(本测试在win2008r2及win2012r2上成功运行)
配置Mysql 8.0 drm 互为主从或1主多从备份/多主多从等交叉互备(也适用于5.7.17)
1号机:(主机,IP:10.1.1.101) mysql数据库端口3306
2号机:(从机,IP:10.1.1.102)mysql数据库端口:33068
3号机:(从机,IP:10.1.1.103)(如有) mysql数据库端口3306
本方案中三台机均配置为同时主从模式,既是主机也是从机。任意一台机的数据库增删都会同步反映在另外两台机上。
一、1号机(主从机模式;IP:10.1.1.101)上的操作:
1、创建备份用户;
登陆mysql命令模式,在提示符“mysql>”下执行下面操作添加授权备份用户和权限:
mysql>GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@’10.1.1.102′ IDENTIFIED BY ‘Abc123456′;
mysql>GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@’10.1.1.103’ IDENTIFIED BY ‘Abc123456′;
mysql>flush privileges; #刷新缓存
2、完整备份主机全部库 #mysqldump -uroot -p1234 -h10.1.1.101 –master-data=2 –single-transaction -R –triggers -A> d:/all.sql;并导入到2、3号机中,以保持数据一致性(实测其实在互为主从模式中,可以忽略此步骤,纯主从模式需要执行本步骤)。
3、分别修改1-3号机的my.ini文件;
# log-bin
log-bin=D:/MySQL/MySQL Server 8.0/log-bin.log #注意修改为自己的日志目录
# Server Id.
server-id=1 #主机ID号,唯一的主机号,各从机之间不能有重复。
#Master Config
read-only=0
#binlog-do-db=wordpress #要备份的数据库,如备份多个库,重复本条,不指定则同步全部;
#binlog-do-db=dolibarr #要备份的数据库,如备份多个库,重复本条,不指定则同步全部;
#replicate-ignore-db=mysql #排除不需要同步的数据库
#replicate-ignore-db=information_schema #排除不需要同步的数据库
#relay_log=relay-bin #开启中继日志 (日志存储位置尽量不要同数据存储同一磁盘同一目录,这里测试方便不重新指向)
log-slave-updates=true # 配置从服务器的更新写入二进制日志
4、在1-3号机中的mysql>状态下均执行show master status\G命令,并分别记下log-bin.xxxxxx和Position:xxxxxx,后面会用到;执行结果类似如下:
File: log-bin.000001
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set(0.00 sec)
5、创建连接:change master to master_host=’10.1.1.102′, master_user=’backup’, master_password=’Abc123456′, master_port=33068, master_log_file=’log-bin.000009′, master_log_pos=154; #本步骤将2号机作为1号机的主机
6、 启动从机:start slave;
查看状态:show slave status\g;
留意以下两项均需要为Yes,否则检查之前各步骤指令和数据是否有输入错误,支付和标点符合、空格等均需要严格检查。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
二、2号机:(主从机,IP:10.1.1.102)上的操作
1、创建备份用户;
登陆mysql命令模式,在提示符“mysql>”下执行下面操作添加授权备份用户和权限:
mysql>GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@’10.1.1.101′ IDENTIFIED BY ‘Abc123456′;
mysql>GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@’10.1.1.103’ IDENTIFIED BY ‘Abc123456′;
mysql>flush privileges; #刷新缓存
2、修改2号机的my.ini文件;
按1号机的方式和内容修改my.ini文件;注意id号改为2,其余照搬即可:
# Server Id.
server-id=2 #主机ID号,唯一的主机号,主从机之间不能有重复。
3、在mysql>执行show master status\G并记下log-bin.XXXXXX和Position:XXXX,后面会用到;
File: log-bin.000009
Position: 154
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set(0.00 sec)
4、创建连接:change master to master_host=’10.0.0.101′, master_user=’backup’, master_password=’Abc123456′, master_port=3306, master_log_file=’log-bin.000063′, master_log_pos=239721;MASTER_LOG_POS=154; #本步骤将1号机作为2号机的主机
5、 启动从机:start slave;
查看状态:show slave status\g;
留意以下两项均需要为Yes,否则检查之前各步骤指令和数据是否有输入错误,支付和标点符合、空格等均需要严格检查。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
三、3号机(从机,IP:10.1.1.103)上的操作
1、创建备份用户;
#作为单纯的备份用从机,不需要创建作为主机接受从机访问的用户和权限。
2、修改3号机的my.ini文件;
按1号机的方式和内容修改my.ini文件;注意id号改为2,其余照搬即可:
# Server Id.
server-id=3 #主机ID号,唯一的主机号,主从机之间不能有重复。
3、在mysql>执行show master status\G并记下log-bin.XXXXXX和Position:XXXX,后面会用到;
# 作为单纯的从机,不需要执行本指令,本指令的执行结果数据是作为主机提供给其他从机使用的。
4、创建连接:CHANGE MASTER TO MASTER_HOST=’10.1.1.101′, MASTER_USER=’backup’, MASTER_PASSWORD=’Abc123456′, MASTER_LOG_FILE=’log-bin.000001′, MASTER_LOG_POS=154; #本步骤将1号机作为3号机的主机
5、 启动从机:start slave;
查看从机状态:show slave status\g;
留意以下两项均需要为Yes,否则检查之前各步骤指令和数据是否有输入错误,支付和标点符合、空格等均需要严格检查。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
四、配置结果检测
1、在1号机中新建数据库test1,在2号机和3号机中均实时同步创建。
2、在2号机中新建数据库test2,在1号机和3号机中均实时同步创建。
3、在2号机中删除test1,在1号机和3号机中实时同步删除。
4、在3号机中新建test3数据库,1、2号机均不同步创建。
5、在3号机中删除test2和test3数据库,1、2号机均不同步删除,且在1、2号机中对test2的操作将不会再同步到3号机;如需要继续同步备份test2到3号机,需要在1或2号机中导出test2数据库到3号机中导入后,3号机即可继续实时同步备份test2。