1、在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。
2、备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。
3.、备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。
(1) 启动二进制日志,服务器ID,GTID
vim /etc/my.cnf // 更改配置文件,开启二进制 log_bin // 二进制开启 server-id=1 // 服务器 ID gtid_mode=ON // gtid的模式为 开 enforce_gtid_consistency=1 // 存 主从 信息的临时表 强制开启(2)重新启动数据库,让配置生效
systemctl restart mysqld // 重新启动 数据库(3)授权复制用户 rep
grant replication slave,replication client on *.* to 'rep'@'10.8.162.%' identified by 'QianFeng@123'; 授权 flush privileges; 手动刷新(4)备份数据
mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql 备份 主服务器 数据库内容 scp 2020-1-1-mysql-all.sql master2:/tmp 备份内容拷贝到 从 服务器(1)启动二进制日志,服务器ID,GTID
(2)重新启动数据库,让配置生效
(3)还恢复手动同步数据
set sql_log_bin=0; 临时关闭二进制 source /tmp/2020-1-1-mysql-full.sql 恢复还原 主数据库 数据内容 该实验的关键效果即将出现。(4)在 从 上设置主服务器
mysql> change master to master_host='master1', 主服务器名( 没做域名解析的话,可以写 IP ) master_user='rep', 主库的授权用户为 rep master_password='QianFeng@123', 授权用户 rep 登录数据库的密码是 QianFeng@123 master_auto_position=1; 主库 自动位置 开启(5)启动 从
start slave; 启动 从 show slave status\G; 查看 从 状态是否为双 YES(6)验证
在 主 上 创库 创表 改数据 ,在 从 上查看 数据是否同步。 同步即为 一主一从集群 成功!
(1)授权复制用户 rep
(1)在 从 上设置 主 服务器
(2)启动 从 master1
(3)如果状态不佳,重启一下 主 master2 的mysqld
master2 退出数据库 systemctl restart mysqld // master2 重新启动数据库 master1 退出数据库 master1 再进入数据库 show slave status\G // master1 再次查看状态(1)master1 备份
mysqldump -p'QianFeng@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql 主库 master1 备份内容 ( 已经是双主,只备份一个库即可 )(2)slave 1 导入数据库 主库 备份内容
scp -r 2020-1-1-mysql-all.sql slave1:/tmp(3)启动 slave 1 从服务器ID,gtid
vim /etc/my.cnf server-id=3 gtid_mode=ON enforce_gtid_consistency=1 master-info-repository=TABLE relay-log-info-repository=TABLE 把主的信息存在主信息仓库里。主信息库可以是文件也可以上表,具体由—master-info-repository参数值决定。—master-info-repository=file时 会生成master.info 和 relay-log.info2个文件,如果—master-info-repository=table,信息就会存在mysql.master_slave_info表中。(4)重新启动数据库,让配置生效
systemctl restart mysqld(5)设置主服务器
mysql> change master to // master 1 设置主服务器 master_host='10.8.162.14', master_user='rep', master_password='QianFeng@123', master_auto_position=1 for channel '10.8.162.14'; mysql> change master to // master 2 设置主服务器 master_host='10.8.162.81', master_user='rep', master_password='QianFeng@123', master_auto_position=1 for channel '10.8.162.81';(6)启动 从 slave 1