MySQL5.7的AB复制以及 GTID多线程复制 配置
mysql AB复制:
三台主机:MASTER IP:172.25.35.21
SLAVE1 IP:172.25.35.22
SLAVE2 IP:172.25.35.19
MYSQL版本:mysql5.7
下载安装包
mysql-community-client-5.7.11-1.el6.x86_64.rpm
mysql-community-common-5.7.11-1.el6.x86_64.rpm
mysql-community-libs-5.7.11-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.11-1.el6.x86_64.rpm
mysql-community-server-5.7.11-1.el6.x86_64.rpm
安装
yum install * -y 安装所有
启动 mysql 5.7版本启动时会随机生成root初始密码
cat /var/log/mysqld.log | grep password 过滤出初始密码
初始密码为:wy+egrCeB1Ul
mysql_secure_installation 初始化数据库
更改数据库root密码 5.7版本要求密码包括大写和小写字母、特殊符号、数字
Mysql -uroot -p 用新更改的密码登陆
在master主机上:
vim /etc/my.cnf
添加:
server-id=1
log-bin=mysql-bin
binlog-do-db=moto 同步的数据库为moto
binlog-ignore-db=mysql 不同步 mysql
/etc/init.d/mysqld restart 每次更改完my.cnf 文件要重起mysqld
登陆mysql
mysql> CREATE DATABASE moto; 添加数据库
mysql> SHOW DATABASES; 查看数据库
mysql> GRANT REPLICATION SLAVE ON *.* TO pop@'172.25.35.22' IDENTIFIED BY 'Poiu@123'; 给slave1 主机172.25.35.22 授权 可以用pop用户 登陆
Mysql> SHOW MASTER STATUS; 查看MASTER 状态
记下file名与position号
在slave1主机上
用pop用户登陆验证授权是否成功
[root@mysql2 mysql]# mysql -h 172.25.35.21 -u pop -p
Enter password: 输入pop用户密码
mysql> SHOW DATABASES;
vim /etc/my.cnf
添加:
server-id=2
/etc/init.d/mysqld restart 重起数据库
登陆slave1主机的mysql
mysql> CREATE DATABASE moto; 同步之前要保证master与slave主机的数据库信息一致所以为slave1创建moto数据库
mysql>CHANGE MASTER TO MASTER_HOST='172.25.35.21',MASTER_USER='pop',
MASTER_PASSWORD='Poiu@123',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=1817;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G; 查看slave状态
看到的信息与刚才设置的相同;
看到IO/SQL 为yes 表示正常
测试:
在master主机数据库中
mysql>USE moto;
mysql>CREATE TABLE GP( NUM VARCHAR(15) NOT NULL,TEAM VARCHAR(25) NOT NULL); 创建表GP
mysql> INSERT INTO GP VALUES('93','HONDA'); 给表中添加信息
mysql> INSERT INTO GP VALUES('46','YAMAHA');
在slave1主机上
登陆数据库
mysql>USE moto;
mysql> SELECT * FROM GP;
可以看到master刚才添加的信息已经同步到了slave主机上
单向同步完成
单向master> slave1>slave2
原理:master 作为slave1的master,slave1又作为slave2的master,逐级同步 slave2只同步slave1上的 数据而不是直接去master上取数据
配置:
保持master不变、添加slave2 172.25.35.19 主机
在slave2上安装需要的软件,启动,并更改数据库root用户密码
vim /etc/my.cnf
添加:
server-id=3 每台主机的server-id都是唯一的、开启美表一个文件功能
重启mysqld
####不要忘记,作同步的主机、初始的数据库状态必须保持一致,在配置slave2之前先将master上的数据库数据先复制一份给slave2并导入数据库中
在master上
mysqldump -u root -p moto > moto.back 将moto数据库的信息备份一份出来
scp moto.back 172.25.35.19:/mnt 拷贝一份到slave2上
在slave2上
mysql -uroot -p moto < /mnt/moto.back 将备份的导入数据库中 注意slave2本地数据库重要先创建moto数据库 这时slave2与master数据库信息一致
在slave1上
vim /etc/my.cnf
添加:
log-bin=mysql-bin 定义二进制日志
binlog-do-db=moto
binlog-ignore-db=mysql
log-slave-updates
保存后重启mysqld服务
登陆数据库
授权:
mysql> GRANT REPLICATION SLAVE ON *.* TO pop@'172.25.35.19' IDENTIFIED BY 'Poiu@123'; 给slave2 主机授权
mysql>SHOW MASTER STATUS;
在slave2主机上
进入数据库:
mysql> CHANGE MASTER TO MASTER_HOST='172.25.35.21',MASTER_USER='pop',MASTER_PASSWORD='Poiu@123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=447; 指定同步数据的master主机是172.25.35.21
mysql>START SLAVE;
mysql>SHOW SLAVE STATUS\G;
看到IO/SQL 为yes 并且没有报错说明成功
当在master端改变数据库信息时、可以看到slave1和slave2主机信息都在发生改变
GTID AB复制:
使用master跟slave1
在master上:
Vim /etc/my.cnf
添加:
gtid-mode=on 打开gtid模块
Enforc e-gtid-consistency=on
在slave1上
Vim /etc/my.cnf
注释掉刚才作为master时添加的:
#log-bin=mysql-bin
#binlog-do-db=westos
#binlog-ignore-db=mysql
#log-slave-updates
添加:
gtid-mode=on 打开gtid模块
Enforc e-gtid-consistency=on 设置强行同步,保证主从数据的一致性
两台主机上重启mysqld
用GTID的AB复制需要重新做change master操作
在slave1上
进入数据库执行
mysql> change master to master_host='172.25.35.21',master_user='pop',master_password='Poiu@123',master_auto_position=1;
在master上
进入数据库给共享数据库的表中做两次添加操作后可以看到slave1上
GTID 多线程复制:
在slave1上:
Vim /etc/my.cnf
添加:
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16 指定线程数 官方推荐为16 0表示不使用多线程而是使用AB复制
master_info_repository=TABLE
relay_log_info_repository=TABLE
/etc/init.d/mysqld restart 每次更改文件后要重启数据库
登陆数据库
mysql> show processlist
会看到有十六个线程。mysql5.7的多线程并行复制、解决了mysql以前为人诟病的复制延迟的问题,使从机的复制效率大大提升。
****当同步做好后slave主机上的数据不能更改、只能更改master的数据