192.168.1.14 和 192.168.1.15
14 服务器配置添加
# 主从复制
server-id=14 #设置server-id
log-bin=mysql-bin #开启二进制文件
#同步的数据库,除此之外别的不同步(和下面binlog-ignore-db二选一)
binlog_do_db=testdb
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 1 #初始字段ID为1
slave-skip-errors = all #忽略所有复制产生的错误
15服务器添加配置
server-id=15 #设置server-id
log-bin=mysql-bin #开启二进制文件
binlog_do_db=testdb
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 2 #初始字段ID为1
slave-skip-errors = all #忽略所有复制产生的错误
#主标服务标识号,必需唯一
server-id = 1
#因为MYSQL是基于二进制的日志来做同步的,每个日志文件大小为 1G
log-bin=/var/log/mysql/mysql-bin.log
#要同步的库名
binlog-do-db = test
#不记录日志的库,即不需要同步的库
binlog-ignore-db=mysql
#用从属服务器上的日志功能
log-slave-updates
#经过1日志写操作就把日志文件写入硬盘一次(对日志信息停止一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0。
sync_binlog=1
# auto_increment,控制自增列AUTO_INCREMENT的行为用于MASTER-MASTER之间的复制,避免涌现重复值,
#auto_increment_increment=n有多少台服务器,n就设置为多少,
#auto_increment_offset=1设置步长,这里设置为1,这样Master的auto_increment字段发生的数值是:1,3, #5, 7, …等奇数ID
auto_increment_offset=1
auto_increment_increment=2
#停止镜像处理的数据库
replicate-do-db = test
#不停止镜像处理的数据库
replicate-ignore-db= mysql
在mysql的bin目录下, 以管理员身份打开cmd窗口后,运行mysql -uroot -p,输入密码 登陆。
先后执行下面3条命令创立用户供从库连接用(用户名MySlave,密码123456),并刷新权限
14服务器上执行:
CREATE USER 'MySlave'@'192.168.1.15' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'MySlave'@'192.168.1.15';
FLUSH PRIVILEGES;
15服务器上执行:
CREATE USER 'MySlave'@'192.168.1.14' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'MySlave'@'192.168.1.14';
FLUSH PRIVILEGES;
CHANGE MASTER TO MASTER_HOST='192.168.1.14',MASTER_PORT=3306,MASTER_USER='MySlave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=303322;
注意:上面 MASTER_LOG_FILE 和 MASTER_LOG_POS 部分,替换成主master的二进制文件名和位置
start slave;
show slave status\G;
彻底清除slave同步复制关系操作!见文章地址:https://www.cnblogs.com/musen/p/11162783.html
stop slave;
reset slave all;
show slave status\G;
Emptyset (0,00 sec)
此时真正实现了清除slave同步复制关系!
测试情形一 : 15宕机, 14写入数据 ,然后14也宕机 ,重启15 ,没有恢复数据 , 重启14 , 15恢复数据
测试情形二: 15宕机 ,14写入数据 ,然后14也宕机 ,重启15 , 15写入数据,id和14重复并插入新数据 , 重启14 , 恢复数据 ; 但14/15 id重复行,各自保持原插入数据;
测试情形三: 15宕机, 14修改共有数据 , 然后14也宕机 , 重启15 , 15也修改共有数据, 14/15两边数据保持一致
重启后恢复时间大概需要一分钟内完成
id建议不要用自增id ,随机id比较好,避免id重复导致数据不一致.
由于我后来把备份库从testdb 切换成了 zhlyweb, 所以显示的表都是zhlyweb库的表
Navicat12连接mycat打开表会报错,错误信息说表不存在 , 这是navicat版本问题,换低版本Navicat就可以了
测试双机热备高可用,宕机14库 ,大概30秒后切换主从 读写正常.