mysql8.0 搭建主从同步(附带部分错误记录)

一、安装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

原文地址:https://www.cnblogs.com/xiaokangk/p/14338223.html