-
主库配置:
[mysqld]
#设置服务器id,为1表示主服务器,实例唯一ID,不能和canal的slaveId重复
server_id=1
#启动MySQ二进制日志系统
log-bin=mysql-bin
#选择row模式
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-do-db=test
#不同步mysql系统数据库
binlog-ignore-db=mysql
-
从库配置
[mysqld]中配置如下
#实例唯一ID,不能和canal的slaveId重复,表示为从数据库
server-id=2
#启动MySQL二进制日志系统
log-bin=mysql-bin
#选择row模式
binlog-format=ROW
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
replicate-do-db=test
#不同步mysql系统数据库
replicate-ignore-db=mysql
-
主库执行
show master status;
记住position这个值从库中配置需要使用
-
从库执行
CHANGE MASTER TO
MASTER_HOST='192.168.32.200',
MASTER_PORT=50000,
MASTER_USER='root',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=156
-
查看状态
# 查看主库的运行状态
SHOW MASTER STATUS
# 从库开始同步
START SLAVE;
# 查看从库的运行状态
SHOW SLAVE STATUS
# 查询当前节点的server_id
show variables like '%server_id%';
主主复制类推,很简单
-
常见问题
主从同步报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决:删除mysql的data目录下的auto.cnf重启mysql,主要是复制的虚拟机server_uuid相同了
主从数据不一致修复方法(在从库执行)
# 停用现有的slave
stop slave;
# 设置错误跳过1次
set global sql_slave_skip_counter =1;
# 启动slave同步
start slave;
# 查看当前slave状态
show slave status
-
注意事项
每个数据库节点的 dataPath/auto.cnf 中自动生成uuid必须全局唯一
每个数据库节点的 /etc/my.cnf 中的server_id全局唯一