主库 10.0.40.200
从库 10.0.50.20
主库配置
- 登录主库,添加一个副库用来复制的账号
mysql -uroot -p123456axc666
GRANT REPLICATION SLAVE ON *.* to 'slave1'@'10.0.50.20' identified by '123456qqq666';
FLUSH PRIVILEGES;
- 修改主库配置文件,开启binlog,并设置server-id
vim /etc/my.cnf
server-id=400101 # 主库的唯一标识
log-bin=mysql-bin
expire_logs_days=3
不加 binlog-do-db 则是所有库
3. 重启服务,查看状态
systemctl restart mysqld.service
登录 mysql 输入命令,获取当前最新数据偏移量作为从库同步开启的配置节点
show master status;
获取到 File 和 Position 参数
从库配置
- 配置文件修改
vim /etc/my.cnf
server-id=22 # 唯一的值
重启服务
2. 进入从库 配置链接主库的信息
mysq -uroot -p123456
mysql> CHANGE MASTER TO MASTER_HOST='10.0.40.200',
MASTER_PORT=3306,
MASTER_USER='slave1',
MASTER_PASSWORD='Report_123',
MASTER_LOG_FILE='mysql-bin.000036',
MASTER_LOG_POS=1250;
- 启动slave进程
start slave;
- 查看同步状态
show slave status\G;
qa
- 只同步指定数据库
主库配置文件 my.cnf 中添加 binlog-do-db=test1
从库配置文件 my.cnf 中添加 replicate-do-db=test1 - 主从配置前,主库数据迁移
主库中 mysql data数据目录全部拷贝到从库后,由于 uuid 在data数据目录中,需要修改为原来的获取随便改一个,不然启动从库同步 start slave 会报错
uuid 存放默认位置 数据目录/auto.cnf
- 迁移数据前,建议停止主库的数据更新操作锁库或者停止服务
- stop slave; 停止同步 start slave; 开始同步
- 后台迁移数据命令
nohup scp -P 22 -r mysql root@10.0.50.20:/usr/local/mysql >/dev/null 2>&1 &
- 意外情况主从断开后,需重新配置同步的节点和日志 File Position
可能遇到的报错
[ERROR 3021(HY000):this operation cannot be performed with a running salve io thread](https://www.cnblogs.com/jichi/p/12233037.html)
处理方法
1、停止已经启动的绑定
stop slave
2、重置绑定
reset master
3、执行复制主机命令
CHANGE MASTER TO MASTER_HOST='10.0.40.200',MASTER_PORT=3306,MASTER_USER='slave1',MASTER_PASSWORD='Report_123',MASTER_LOG_FILE='mysql-bin.000043',MASTER_LOG_POS=37954082;
4、发现此时已经不报错
5、启动复制
start slave
屏蔽主从错误
mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续
修改mysql的配置文件,通过slave_skip_errors参数来跳过指定类型的错误或跳过所有错误
vi /etc/my.cnf
[mysqld]
#slave-skip-errors=1062,1053,1146 #跳过1062,1053,1146类型的错误
#slave-skip-errors=all #跳过所有错误