准备两台linux服务器,注意要锁ip
我这里如上图
主库 192.168.5.5/24
从库 192.168.5.10/24
接下来确定mysql是否启动成功并且能从外部连接
主库
从库
主服务器配置
vim编辑主服务器配置
vim /etc/my.cnf
注意是下面那个
添加配置代码
log-bin=mysql-bin # 配置二进制日志
server-id=100 #配置服务器id
配置好后 重启mysql
systemctl restart mysqld
创建用户当作复制账户
-- 1. 创建用户(如果不存在)
CREATE USER IF NOT EXISTS 'repl_user'@'%' IDENTIFIED BY 'Root@123456';-- 2. 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';-- 3. 刷新权限(使更改生效)
FLUSH PRIVILEGES;
查看MASTER 状态
SHOW MASTER STATUS;
注意此时不要再操作数据库
从库设置
依旧是去mysql设置id 注意不要一样
然后重启mysql服务
systemctl restart mysqld
停止现有复制(如果运行中):
STOP REPLICA;
重置复制状态
RESET REPLICA ALL; -- 清除所有复制配置
执行下面sql配置复制
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.5.5',SOURCE_USER = 'repl_user',SOURCE_PASSWORD = 'xxxx',SOURCE_LOG_FILE = 'mysql-bin.000001',SOURCE_LOG_POS = 1929,GET_SOURCE_PUBLIC_KEY = 1, -- 允许获取公钥SOURCE_CONNECT_RETRY = 8,SOURCE_RETRY_COUNT = 1000, -- 最大重试次数SOURCE_HEARTBEAT_PERIOD = 30, -- 心跳间隔CONNECTION_AUTO_FAILOVER = 1; -- 自动故障转移
启动复制
START REPLICA;
查看状态
SHOW REPLICA STATUS\G
主库
//设置日志定期清理防止满盘
SET GLOBAL binlog_expire_logs_seconds = 7776000; --保留90天//单位秒
验证
新建aaa
从机自动创建
ok
2025-8-8日补充
今天发现虚拟机重启后,主从复制没了
这是因为上面的配置缺少
- ❌
relay_log_recovery=1
– 中继日志恢复机制 - ❌
gtid_mode=ON
– GTID全局事务标识 - ❌
enforce_gtid_consistency=ON
– GTID一致性检查
先在从库添加
vim /etc/my.cnf
# 启用中继日志自动恢复
relay_log_recovery = 1# 启用GTID复制(避免位点失效)
gtid_mode = ON
enforce_gtid_consistency = ON# 可选:禁止启动时自动开启复制(只是为了方便故障排查)
skip_slave_start = 1
然后重启
sudo systemctl restart mysqld
然后登录mysql 配置GTID
STOP SLAVE;
RESET SLAVE ALL;-- 使用GTID自动定位(无需手动指定binlog位置)
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.5.5', -- 注意替换自己ipSOURCE_USER = 'repl_user', -- 注意替换自己的用户SOURCE_PASSWORD = '^Lin@log64.ms$', -- 注意替换成自己的密码SOURCE_AUTO_POSITION = 1, -- ★ 关键改进:使用GTID自动定位 ★GET_SOURCE_PUBLIC_KEY = 1,SOURCE_CONNECT_RETRY = 8,SOURCE_RETRY_COUNT = 1000,SOURCE_HEARTBEAT_PERIOD = 30,SOURCE_SSL = 1, -- 新增:启用SSL加密SOURCE_TLS_VERSION = 'TLSv1.3', -- 新增:强制TLS版本NETWORK_NAMESPACE = ''; -- 明确指定网络命名空间START SLAVE;
主库更改
# 确保binlog持久化
sync_binlog = 1# 启用GTID(与从库匹配)
gtid_mode = ON
enforce_gtid_consistency = ON
然后登录主库mysql
查看状态
SHOW VARIABLES LIKE 'gtid_mode';
然后去从库从其slave,并查看状态
STOP SLAVE;
START SLAVE;
SHOW SLAVE STATUS\G;
重点关注如下字段
去可视化操作看下,可以发现主从复制好了
重启模拟关机
注意事项
重要注意事项
如果主库已有数据:需要重新建立全量同步
# 主库备份
mysqldump --all-databases --single-transaction --master-data=2 -uroot -p > full.sql# 从库导入
mysql -uroot -p < full.sql
SSL配置额外步骤(如启用)
- 主库生成SSL证书
-- 检查是否已有证书
SHOW VARIABLES LIKE '%ssl%';-- 若无证书,执行(MySQL 8.0+自动生成)
INSTALL COMPONENT "file://component_validate_password";
ALTER INSTANCE ROTATE INNODB MASTER KEY;
- 从库配置信任主库证书
-- 主库执行:查看公钥
SHOW STATUS LIKE 'Caching_sha2_password_rsa_public_key';-- 复制公钥值,在从库执行:
SET @@GLOBAL.replication_source_public_key_path = '主库公钥值';