两主一从+HaProxy反向代理实现高可用,从节点只用于热备份,延迟2小时同步。
m1和m2的区别在于server-id
和auto_increment_offset
。组主从,server-id
必须唯一(实际情况可以直接用IP末尾)。
因为是双主,为了保证自增主键不重复,主键增量为2
,m1是单数递增,m2是双数递增。
这样配置后,实际主键会出现跳号
s1的配置文件,server-id
同样需要唯一。除此之外,s1作为纯备份库,没有开启binlog日志(开启也可以,这个看实际情况)。并设为只读
# 进入docker容器
docker-compose exec m1 bash
# 登录MySQL
mysql -uroot -p123456
# 创建同步用户
grant replication slave on *.* to 'replicate'@'%' identified by '123456';
# 查看master状态
show master status\G;
m1和m2互为主从,master_log_file
和master_log_pos
的取值根据实际情况修改
# 用上一步创建的同步用户和master状态,配置从节点
change master to
master_host='m2',
master_user='replicate',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=447;
change master to
master_host='m1',
master_user='replicate',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=740;
s1从m1同步,延迟7200秒。某些小问题(例如直接手动修改数据库改错数据了),可以在2小时内补救。
change master to
master_host='m1',
master_user='replicate',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=740,
master_delay=7200;
start slave;
# 查看同步状态
show slave status\G;
如果Slave_IO_Running
和Slave_SQL_Running
的值都是Yes
,表示启动成功了