一、安装mysql8.0
1.分别在主机(master)和从机(slave)安装mysql8.0.21(我这里是在docker容器中安装)
https://www.cnblogs.com/xiaokangk/p/13474184.html
二、主机(master)创建数据同步用户master01
1、进入mysql容器
docker ps
docker exec -it mysql8 bash
2、登录mysql
mysql -uroot -p
3、创建master01,密码123456
CREATE USER 'master01'@'%' IDENTIFIED BY '123456';
alter user 'master01'@'%' identified with mysql_native_password BY '123456';
4、授予master01 `REPLICATION SLAVE`权限和`REPLICATION CLIENT`权限,用于在`主` `从` 数据库之间同步数据
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
注:授权全部权限 (GRANT ALL PRIVILEGES ON *.* TO 'master01'@'%';)
5、刷新,使其操作生效
FLUSH PRIVILEGES;
三、关联master和slave
1、master服务器中查看master状态(我这里是直接navicat连接后执行的sql语句)
show master status;
注:FIle,Position是等会slave中会用到的配置,在slave配置未完成前,最好不要操作master数据库,否则这两个值会发生变化
2、在slave服务器中的配置(我这里还是直接用navicat连接后执行的sql语句)
master_host
:master服务器地址master_port
:端口号master_user
:用于数据同步的用户(之前在master中创建授权的用户)master_password
:用于同步用户的密码master_log_file
:指定slave从哪个日志文件开始复制数据,即之前提到的File
字段值master_log_pos
:从哪个Position开始读,即之前master
中的Position
字段值,0则是从头开始完整的拷贝master库master_connect_retry
:连接失败时重试的时间间隔,默认是60秒
change master to master_host='10.103.99.85',master_port=13306, master_user='master01', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos= 5430904;
start slave; (开始slave)
show slave status;(查看状态,当Slave_IO_Running 和Slave_SQL_Running都为yes的时候,配置完成)
其它语句:stop slave; RESET slave;
四、配置中遇见Slave_IO_Running和Slave_SQL_Running不为yes的错误
① Slave_IO_Running为connecting
这个错误主要是在创建容器的时候挂载目录的时候没有把主机的my.cnf与容器中mysql中的my.cnf做映射,导致我在主机中配置的my.cnf里的service_id没起作用,导致service_id一致
注:查看service_id的语句为show variables like 'server_id';
②Slave_SQL_Running为NO
这个错误时再同步的时候报错:
Could not execute Update_rows event on table sewage_ga.qms_device_run_log; Can't find record in 'qms_device_run_log', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log binlog.000042, end_log_pos 1889, Error_code: MY-001032
目前解决的方法是在从库中my.cnf中配置跳过1032的错误(slave-skip-errors = 1032),至于为啥报错,现在还没去寻找,后续会补上
原文:https://zhengqing.blog.csdn.net/article/details/104679425