mysql8.4主从
- 8.4安装
- 主从原理
- 主
- my.cnf
- 启动
- 创建复制用户
- 从
- my.cnf
- 启动
- 锁库&迁移数据
- 连接主&开启复制
- 检查复制
8.4安装
- 参考保姆级安装教程传送门
主从原理
- 从库准备
- 使用 CHANGE MASTER TO 配置主库信息并写入 master.info 文件。
- 执行 START SLAVE 启动从库,启动 I/O 线程和 SQL 线程。
- 同步过程
- 从库的 I/O 线程读取 master.info 文件,连接到主库
- 主库生成 binlog dump 线程响应从库连接请求
- 主库生成新的 binlog 日志,binlog dump 线程将其发送给从库。
- 从库的 I/O 线程将日志存储在 TCP/IP 缓存中,并向主库发送 ACK 确认。
- I/O 线程更新 master.info 文件中的 binlog 文件名和位置。
- I/O 线程将日志写入 relay-log 文件中。
- 从库的 SQL 线程从 relay-log 文件读取并回放日志。
- 回放完成后,SQL 线程更新 relay-log.info 文件中的位置。
主
my.cnf
-
主要参数说明
server-id = 1 # 服务器的唯一标识符,用于区分集群或复制环境中的不同服务器 log_bin = mysql-bin # (1)启用二进制日志功能 (2)指定二进制日志文件的基名 binlog-do-db = test-db #指定需要记录二进制日志的数据库 binlog_format = row # 指定二进制日志的格式为行格式(ROW) sync_binlog = 1 # 控制二进制日志同步到磁盘的频率,为 1 时,每次提交事务后,二进制日志都会同步到磁盘 binlog_cache_size = 128M max_binlog_cache_size = 512M max_binlog_size = 256M # 单个二进制日志超过 256MB,切换到新的二进制日志继续记录 log_output = FILE # 日志的输出为文件,设置为 “TABLE”,可以存储在数据库表中,通过 SQL可进行查询和分析 binlog_checksum = none
参数 说明 server-id = 1 服务器的唯一标识符,用于区分集群或复制环境中的不同服务器 log_bin = mysql-bin (1)启用二进制日志功能 (2)指定二进制日志文件的基名 binlog-do-db = test-db 指定需要记录二进制日志的数据库 binlog_format = row 指定二进制日志的格式为行格式(ROW) sync_binlog = 1 控制二进制日志同步到磁盘的频率,为 1 时,每次提交事务后,二进制日志都会同步到磁盘 binlog_cache_size = 128M max_binlog_cache_size = 512M max_binlog_size = 256M 单个二进制日志超过 256MB,切换到新的二进制日志继续记录 log_output = FILE 日志的输出为文件,设置为 “TABLE”,可以存储在数据库表中,通过 SQL可进行查询和分析 binlog_checksum = none
启动
- 参考保姆级安装教程 中safe启动
创建复制用户
- 创建用户 CREATE USER ‘copyer’@‘%’ IDENTIFIED BY ‘copyer@111’;
- 查看权限 SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTEE = “‘copyer’@‘%’”;
- 授权复制 GRANT REPLICATION SLAVE ON . TO ‘copyer’@‘%’ WITH GRANT OPTION;
- 查看用户 SELECT host, user FROM mysql.user ;
从
my.cnf
- 主要参数说明
relay_log = mysql-relay-bin relay_log_purge = on relay_log_recovery = on max_relay_log_size = 1G server-id = 2 log_bin = mysql-slave-bin binlog-do-db = test-dev
参数 说明 relay_log = mysql-relay-bin 主库的(binlog)被从库的I/O线程读取,写入到从库的中继日志 relay_log_purge = on 从库用完中继日志中的更新操作后,中继日志会被自动删除 relay_log_recovery = on 中继日志完整且主库二进制日志存在:从库会根据记录的主库二进制日志位置,从中断处继续复制和应用更新,数据保持一致,不会丢失
主库二进制日志已清理但中继日志完整:从库无法基于中断信息获取当时主库二进制日志,重启后会从主库最新位置开始复制,主库最新数据不会丢失,但重启期间主库的更新不会同步,导致数据不一致
所以如果重启,一般重新同步数据log_slave_updates = ON 从库参与级联复制或多源复制,设置ON,从库生成二进制日志 server-id = 2 保证集群内每个服务器都有唯一的 server-id,防止复制冲突 log_bin = mysql-slave-bin 从库通常不需要启用 binlog,除非它也需要作为上级主库(Master)向其他从库(Slave)同步数据 binlog-do-db = test-dev 可以控制哪些数据库的更新操作会被记录到 binlog 中。如果从库需要作为上级主库,这个参数可以减少 binlog 文件的大小和写入操作
启动
- 参考保姆级安装教程 中safe启动
锁库&迁移数据
- 参考数据库迁移
连接主&开启复制
-
获取主库日志及位置:8.4版本后 SHOW BINARY LOG STATUS;
-
通过复制用户连接到主
CHANGE REPLICATION SOURCE TO SOURCE_HOST='服务器A-IP',SOURCE_PORT = 3308, SOURCE_USER='copyer', SOURCE_PASSWORD='copyer@111',SOURCE_LOG_FILE = 'mysql-bin.000019',SOURCE_LOG_POS = 126927914,GET_SOURCE_PUBLIC_KEY=1;(获取复制源(主服务器)的公钥);
-
开启复制
- 8.0.22之后 start replica ;
检查复制
- 8.0.22之后 show replica status\G ;