kizumi_header_banner_img
文章导读

mysql主从同步


avatar
Mortis-AveMuj1ca 2026年4月26日 46

原理图示意

 

 

# MySQL 主从复制完整配置文档

## 环境信息
– 主库 IP:192.168.116.128(示例)
– 从库 IP:192.168.116.131
– MySQL 版本:8.0+
– 复制用户:mortis / Kylin2024!
– root 密码:Kylin2024!

====================================
一、主库(Master)配置
====================================

# 1. 登录并设置 root 密码
mysql -u root

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Kylin2024!’;
FLUSH PRIVILEGES;
EXIT;

# 2. 修改主库配置文件
vim /etc/my.cnf.d/mysql-server.cnf
# 在 [mysqld] 下添加:
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW

# 3. 重启服务
systemctl restart mysqld

# 4. 创建复制用户(使用 mysql_native_password 避免认证问题)
mysql -u root -p
# 输入密码 Kylin2024!

CREATE USER ‘mortis’@’%’ IDENTIFIED WITH ‘mysql_native_password’ BY ‘Kylin2024!’;
GRANT REPLICATION SLAVE ON *.* TO ‘mortis’@’%’;
FLUSH PRIVILEGES;

# 5. 查看主库状态,记录 File 和 Position
SHOW MASTER STATUS;
# 示例输出:
# +——————+———-+————–+——————+
# | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
# +——————+———-+————–+——————+
# | mysql-bin.000001 | 157 | | |
# +——————+———-+————–+——————+

# 6. 开放防火墙(主库执行)
firewall-cmd –permanent –add-port=3306/tcp
firewall-cmd –reload
# 或临时关闭(仅测试用):systemctl stop firewalld

====================================
二、从库(Slave)配置
====================================

# 1. 修改从库配置文件
vim /etc/my.cnf.d/mysql-server.cnf
# 在 [mysqld] 下添加:
[mysqld]
server-id = 2
relay-log = relay-log
read-only = 1

# 2. 重启服务
systemctl restart mysqld

# 3. 配置主从复制(登录从库 MySQL)
mysql -u root -p
# 输入 root 密码(如果未设置请先设置)

# 清理旧配置
STOP SLAVE;
RESET SLAVE ALL;

# 执行 CHANGE MASTER(注意替换 MASTER_LOG_FILE 和 MASTER_LOG_POS)
CHANGE MASTER TO
MASTER_HOST = ‘192.168.116.128’,
MASTER_USER = ‘mortis’,
MASTER_PASSWORD = ‘Kylin2024!’,
MASTER_LOG_FILE = ‘mysql-bin.000001’, — 改为实际值
MASTER_LOG_POS = 157, — 改为实际值
GET_MASTER_PUBLIC_KEY = 1; — 解决 caching_sha2_password 问题

START SLAVE;

# 4. 验证复制状态
SHOW SLAVE STATUS\G;
# 必须看到:
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# Seconds_Behind_Master: 0
# Last_IO_Error: (空)
# Last_SQL_Error: (空)

====================================
三、常见故障处理
====================================

# 问题1:无法连接主库(Last_IO_Error: connect timeout)
# 解决:检查防火墙,主库执行:
firewall-cmd –permanent –add-port=3306/tcp && firewall-cmd –reload

# 问题2:认证插件错误(caching_sha2_password requires secure connection)
# 解决:从库执行 CHANGE MASTER 时加上 GET_MASTER_PUBLIC_KEY = 1;或改用 mysql_native_password 用户

# 问题3:Slave_SQL_Running: No
# 解决:查看 Last_SQL_Error,临时跳过一步(慎用)
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;

# 问题4:主从数据不一致
# 解决:重新同步(需主库锁表备份,此处略)

====================================
四、常用维护命令
====================================

— 主库查看状态
SHOW MASTER STATUS;

— 从库查看状态
SHOW SLAVE STATUS\G;

— 暂停复制
STOP SLAVE;

— 恢复复制
START SLAVE;

— 完全重置从库(清除复制信息)
RESET SLAVE ALL;

— 从库只读控制
SET GLOBAL read_only = ON; — 普通用户只读
SET GLOBAL super_read_only = ON; — 包括超级用户只读

====================================
五、注意事项
====================================

1. 主从服务器时间需同步(安装 chrony 或 ntpdate)。
2. 如果主库已有数据,需先用 mysqldump 导出并导入从库,再配置复制。
3. 生产环境建议使用 SSL 加密复制(MASTER_SSL=1)。
4. read_only=1 对 SUPER 权限无效,应用账号不应赋予 SUPER。
5. 从库的 server-id 必须唯一,且不能与主库相同。
6. 复制用户密码需满足 MySQL 密码策略(可临时降低策略)。
7. 若 MySQL 版本 < 8.0,无需 GET_MASTER_PUBLIC_KEY 参数。

====================================
配置完成。
====================================



评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码