官方参考资料
- 二进制日志记录选项和变量https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_log_bin
一、环境规划
角色 | IP | 主机名 | 操作系统 | mysql版本 |
master | 192.168.11.148 | mysql8-1 | CentOS7.8 | 8.0.26 |
slave | 192.168.11.149 | mysql8-2 | CentOS7.8 | 8.0.26 |
二、注意事项
- 如果是虚拟机环境下(特别是克隆的),那么2台节点的网卡的UUID最好不一样,经测试,在网卡配置文件中去掉UUID参数也不影响使用和网络通信,但如需要添加UUID参数和改变UUID,那么可用以下方法操作:
# 通过uuidgen命令给指定的网卡随机生成UUID ># uuidgen ens32 8f90f93f-d026-43af-b31d-901eaa230356 # 增加到网卡配置文件中,如增加配置文件ifcfg-ens32 UUID=8f90f93f-d026-43af-b31d-901eaa230356
- 两个节点(master、slave)的MySQL Server的UUID不能一样,如果基于二进制包安装的mysql,那么配置文件auto.cnf是datadir目录下,也就是auto.cnf配置文件在数据目录下
- 笔者本文的环境,两台节点的数据目录都是统一的标准路径,如:/home/mysqlData/auto.cnf
# Master节点 # cat auto.cnf [auto] server-uuid=18359589-30ea-11ec-83d6-0050563fcc17 # Slave节点 # cat auto.cnf [auto] server-uuid=18359589-30ea-11ec-83d6-0050563fcc18
- Master节点要启用二进制日志从 MySQL 8.0 开始,二进制日志默认启用
三、Master节点配置
- 创建同步账户
2. CREATE USER 'repl'@'192.168.11.149' IDENTIFIED BY 'abcdefg123'; CREATE USER 'repl'@'192.168.11.149' IDENTIFIED WITH mysql_native_password BY 'abcdefg123'; #推荐的方式,指定密码策略 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.11.149'; #授权
- 增加锁,阻止数据写入(如果没有客户端连接,可省略此步骤)
FLUSH TABLES WITH READ LOCK;
- 查看当前的二进制日志文件名和位置
mysql> SHOW MASTER STATUS; +---------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------------+----------+--------------+------------------+-------------------+ | mysql8-1-bin.000003 | 156 | | | | +---------------------+----------+--------------+------------------+-------------------+ 记录这些值。稍后在设置副本时需要它们。它们表示副本应开始处理来自源的新更新的复制坐标。
- 释放锁(如果没有客户端连接,可省略此步骤)
UNLOCK TABLES;
- 建议从库配置好后,再回到主库解锁
四、Slave配置
- 要将从库配置与主库通信
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.11.148', SOURCE_USER='repl', SOURCE_PASSWORD='abcdefg123', SOURCE_LOG_FILE='mysql8-1-bin.000003', SOURCE_LOG_POS=451;
- 启动复制
START REPLICA;
五、可能的问题
- 认证插件类型为'caching_sha2_password'导致从库连接不上主库
1)查看从库的log 2021-10-29T13:45:15.283827Z 8 [ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master 'repl@192.168.11.148:3306' - retry-time: 60 retries: 24 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061 MY-002061错误代码:这个错误的意思是,创建的授权账号没有指定密码策略 2)查看主库 mysql> select plugin from mysql.user where user='repl'; +-----------------------+ | plugin | +-----------------------+ | caching_sha2_password | +-----------------------+ 3)原因 原来是主库repl的plugin是caching_sha2_password 导致连接不上,修改为mysql_native_password即可解决 4)目前主库上已经创建好了repl账号,因此在主库上修改即可 ALTER USER 'repl'@'192.168.11.149' IDENTIFIED WITH mysql_native_password BY 'abcdefg123'; 5)在主库修改后,再次查看 mysql> select plugin from mysql.user where user='repl'; +-----------------------+ | plugin | +-----------------------+ | mysql_native_password | +-----------------------+
六、主库常用管理命令
- 在主库查看已连接过来的从库状态
SHOW PROCESSLIST \G;
- 在主库上查看从库的基本信息
mysql> SHOW REPLICAS; +-----------+------+------+-----------+--------------------------------------+ | Server_Id | Host | Port | Source_Id | Replica_UUID | +-----------+------+------+-----------+--------------------------------------+ | 2 | | 3306 | 1 | 18359589-30ea-11ec-83d6-0050563fcc18 | +-----------+------+------+-----------+--------------------------------------+
七、从库常用管理命令
- 查看从库的复制状态
SHOW REPLICA STATUS\G;
- 在从库上执行:slave停止从master复制
STOP REPLICA;
- 也可以在从库停止指定的线程
mysql> STOP REPLICA IO_THREAD; mysql> STOP REPLICA SQL_THREAD;
- 从库启动复制
START REPLICA;
- 从库启动指定的线程
mysql> START REPLICA IO_THREAD; mysql> START REPLICA SQL_THREAD;