MySQL 复制-无数据环境搭建异步复制
全新初始化(新环境,无数据)搭建 MySQL 异步复制 & GTID 复制标准文档。
一、前言
环境说明:
操作系统 CentOS 7
&数据库版本 5.7.32
参数要求:主库必须开启
binlog
日志,用于数据同步,相关参数👇
# 设置 server-id server-id=1 # binlog 存储路径 log-bin=/var/log/binlogs/mysql-bin # binlog 刷写策略,双一安全参数之一 sync-binlog=1 # binlog 刷写格式,row 为最安全和严谨的格式,当然也是存储内容较多的格式 binlog-format=row # binlog 文件存储大小,存满 1G 后会自动置换下一个文件 max_binlog_size=1G # binlog 自动清理,设置为 10 会自动清理 10 天前的 binlog 日志,避免日志占用空间较大 expire_logs_days=10
二、操作过程
单实例初始化安装:
忽略配置主从复制关系:
主从实例各自初始化时,会产生自己的二进制位置信息,建议全新环境搭建主从时,先清理各自的 binlog 日志:
-- 主从都需要执行 RESET MASTER;
主库上创建专用的复制用户:
-- 密码安装需求修改 grant replication slave on *.* to repl@'%' identified by 'YouPassword';
从库使用 change master to 语句将复制配置指向主库:
CHANGE MASTER TO MASTER_HOST='主库 id 地址', MASTER_USER='复制用户', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0, MASTER_CONNECT_RETRY=10;
从库启动复制线程:
start slave;
检查复制线程状态:
show slave status\G
主库造些测试数据,在从库查询是否同步正常:
create database rep_test; use rep_test; create table rep_test_table(id int); insert into rep_test_table values(1),(2),(3);
到此为止,全新环境下的 MySQL 异步复制已经搭建完成。
三、GTID 复制搭建
单实例初始化安装:
安装两台 MySQL 可以参考:MySQL 自动化部署 快速完成 MySQL 搭建 👍GTID 复制相关参数:
# 在开启 binlog 基础上添加👇参数主从都需要配置 gtid_mode = on enforce_gtid_consistency = 1
配置主从复制关系:
主从实例各自初始化时,会产生自己的二进制位置信息,建议全新环境搭建主从时,先清理各自的 binlog 日志:
-- 主从都需要执行 RESET MASTER;
主库上创建专用的复制用户:
-- 密码安装需求修改 grant replication slave on *.* to repl@'%' identified by 'YouPassword';
从库使用 change master to 语句将复制配置指向主库:
# 这个使用 MASTER_AUTO_POSITION 替代了 MASTER_LOG_FILE 和 MASTER_LOG_POS CHANGE MASTER TO MASTER_HOST='主库 id 地址', MASTER_USER='复制用户', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_AUTO_POSITION=1;
从库启动复制线程:
start slave;
检查复制线程状态:
show slave status\G
主库造些测试数据,在从库查询是否同步正常:
create database rep_test; use rep_test; create table rep_test_table(id int); insert into rep_test_table values(1),(2),(3);
到此为止,全新环境下的 MySQL GTID 复制已经搭建完成。
四、注意事项
生产环境建议设置
expire_logs_days
参数,如果实例增删改频繁的话,它会在你不知不觉中消耗更多的磁盘空间。该参数 8.0 版本设置为binlog_expire_logs_seconds
单位为秒
;MySQL 8.0 中用户必须先创建再授权:
create user repl'%' identified by 'YouPassword'; grant replication slave on *.* to repl@'%';
该方案适合于数据库无任何业务数据的情况下,并且搭建过程中没有任何业务使用。