MySQL主从复制实现

一主一从
MySQL主从复制实现_第1张图片
原理:主服务器收到一个用户的写操作后,开始更新数据库,把更新写到二进制日志中,服务器线程dump thread把二进制日志读出来,通过网络发给从服务器,从服务器的io thread线程发出请求,收到二进制日志后放到relay log中继日志磁盘文件中,然后SQLthread线程从中继日志中读出二进制日志,在本地完成重放,写入/var/lib/mysql/中,更新从服务器的数据。

主从复制的实现
主服务器
192.168.245.17
vim /etc/my.cnf
[mysqld]
log-bin=/data/logbin/mysql-bin
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
binlog_format=row
#skip-grant-tables
innodb_file_per_table
character-set-server=utf8

从服务器
192.168.245.27
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#binlog_format=row
#skip-grant-tables
innodb_file_per_table
character-set-server=utf8
实验开始前先清空数据库文件,主从服务器都清空
rm -rf /var/lib/mysql/*
master主服务器配置
vim /etc/my.cnf.d 写入
log-bin =/data/logbin/mysql-bin
server-id=1

chown -R mysql.mysql /data/logbin/
rm -rf /data/logbin/*
systemctl restart mariadb
mysql
MariaDB [(none)]> show master logs;
MariaDB [(none)]> grant replication slave on . to repluser@‘192.168.245.%’ identified by ‘centos’;
Ctrl-C
[root@centos7 ~]# mysql < hellodb_innodb.sql
mysql
MariaDB [(none)]> show master logs; #可以看到日志增加了

master从服务器配置
vim /etc/my.cnf.d 写入
read-only
server-id=2

rm -rf /var/lib/mysql/*
systemctl restart mariadb
mysql
MariaDB [(none)]>help CHANGE MASTER TO
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST=‘192.168.245.17’,
MASTER_USER=‘repluser’,
MASTER_PASSWORD=‘centos’,
MASTER_PORT=3306,
MASTER_LOG_FILE=’ mariadb-bin.000001’,
MASTER_LOG_POS=245;

show slave status\G
start slave;
show databases; #发现数据库已经被复制过来了
主从复制设置完成

主从从复制
主192.168.245.17
1从192.168.245.27
(log_slave_updates)————此项必须加入中间节点也就是192.168.245.27的/etc/my.cnf.d中
2从192.168.245.37
加上第2台从服务器,和第1台从服务器操作配置一样,第2个从服务器37从第1个从服务器27复制数据
master2从服务器配置
vim /etc/my.cnf.d 写入
read-only
server-id=3

rm -rf /var/lib/mysql/*
systemctl restart mariadb
mysql
MariaDB [(none)]>help CHANGE MASTER TO
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST=‘192.168.245.27’,
MASTER_USER=‘repluser’,
MASTER_PASSWORD=‘centos’,
MASTER_PORT=3306,
MASTER_LOG_FILE=‘mariadb-bin.000001’,
MASTER_LOG_POS=245;
地址改为中间节点192.168.245.27,其他基本不变
show slave status\G
start slave;
show databases; #发现数据库已经被复制过来了
主从从复制设置完成

主主复制————主服务器出问题的话另一台直接变为主
主1
192.168.245.17
vim /etc/my.cnf.d 写入
server-id=1
log-bin
auto_increment_offset=1
auto_increment_increment=2
主2
192.168.245.27

vim /etc/my.cnf.d 写入
server-id=2
log-bin
auto_increment_offset=2
auto_increment_increment=2

实现:SSL加密同步
创建CA证书
(umask 066;openssl genrsa 2048 > cakey.pem)
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650
openssl req -newkey rsa:2048 -days 365 -nodes -keyout master.key > master.csr
openssl req -newkey rsa:2048 -days 365 -nodes -keyout slave.key > slave.csr
openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt
openssl x509 -in master.crt -noout -text
openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt
将证书相关文件复制到从服务器上
scp cacert.pem slave.crt slave.key 192.168.245.27:/etc/my.cnf.d/ssl/
scp cacert.pem slave.crt slave.key 192.168.245.23:/etc/my.cnf.d/ssl/
vim /etc/my.cnf.d 加上
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key

17主服务器上创建ssl认证账户
mysql
grant replication slave on . to rplssl@’192.168.245.%’ identified by ‘centos’ require ssl;

27上用rplssl账户登陆
mysql -urplssl -pcentos -h192.168.245.17 –ssl-ca=/ec/my.cnf.d/ssl/cacert.pem –ssl-cert=/etc/my.cnf.d/ssl/slave.crt –ssl-key=/etc/my.cnf.d/ssl/slave.key
登陆成功
输入status可以看到ssl加密方式

你可能感兴趣的:(实验测试)