MySQL主从复制实操:授权、配置与数据同步指南

星野
星野
发布时间:2026-10-14| 6人浏览过
原创

掌握MySQL主从复制可实现故障快速切换、降低主库压力及独立备份。本文基于两台服务器(Master 192.168.10.1 / Slave 192.168.10.2),详细讲解用户授权、Binlog配置、初始数据同步及主从连接设置,并附带常见同步错误的修复方案。

操作目标与准备条件

MySQL主从复制的核心优势在于提升系统可用性、分担读负载以及避免备份期间锁表。本案例旨在搭建一个稳定的主从环境,前提条件是:

  • 主服务器 (Master):IP 192.168.10.1,需拥有root权限或能执行grant语句的用户。
  • 从服务器 (Slave):IP 192.168.10.2,网络互通,且已安装相同版本的MySQL。
  • 端口限制:确保双方3306端口防火墙允许通信。

第1步:主库用户授权与Binlog配置

第1.1步:创建同步专用账号

为了安全起见,不建议使用root进行远程复制。我们需要在Master上创建一个专门用于复制的用户。

  1. 目的:赋予Slave特定权限以读取主库日志。
  2. 操作:登录MySQL,查看现有用户后执行授权。
mysql> mysql -uroot -p123123;
mysql> SELECT user, host, password FROM mysql.user;
-- 创建用于复制的用户,允许来自192.168.10.2的连接
mysql> GRANT REPLICATION SLAVE ON *.* TO 'user1'@'192.168.10.2' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;

验证结果:SELECT user, host FROM mysql.user; 应能看到 user1 @ 192.168.10.2。此时可从从库测试连接:mysql -uuser1 -p123456 -h192.168.10.1。

第1.2步:开启二进制日志 (Binlog)

风险提醒:修改配置文件后需重启服务,建议在维护窗口期操作。

  1. 入口:主服务器配置文件 /etc/mysql/my.cnf。
  2. 动作:在 [mysqld] 段落下添加以下配置:
log-bin = /var/log/mysql/mysql-bin.log
server-id = 1

注意:务必设置唯一的 server-id,此处设为主库ID为1。保存后重启MySQL服务: sudo /etc/init.d/mysql restart。

验证开启状态:

mysql> SHOW VARIABLES LIKE '%log_bin%';
-- 若 Variable_name=log_bin 且 Value=ON,则配置成功。

第2步:初始化数据全量同步

配置好主库后,必须先将主库现有的历史数据迁移到从库,以保证数据基线一致。

第2.1步:锁定并导出主库数据

  1. 参数说明: -l (Lock Tables) 锁定表防止写入, -F (Flush Logs) 刷新日志以确保一致性。
  2. 操作:
# 建议先重置主库日志,获取干净的起始点(可选)
mysql> RESET MASTER;

# 导出数据库 test 到 /tmp/test.sql
mysqldump -uroot -p123123 test -l -F > /tmp/test.sql

第2.2步:传输并导入从库

  1. 动作:使用SCP将文件传至从库,然后在从库导入。
# 传输文件
scp /tmp/test.sql 192.168.10.2:/tmp/

# 在从库(192.168.10.2)上执行导入
mysql -uroot -p123123 test < /tmp/test.sql

导入完成后,从库拥有了与主库一致的快照数据。

第3步:从库配置与同步启动

第3.1步:配置从服务器参数

  1. 入口:从服务器配置文件 /etc/mysql/my.cnf。
  2. 关键参数:
[mysqld]
server-id = 2  # 从库ID必须唯一,且不同于主库
# 注意:新版的MySQL通常不再使用master-host等全局变量配置,
# 而是通过 CHANGE MASTER TO 命令动态配置。

重要修正:原文中使用的 master-host 等参数在现代MySQL版本(5.7+ / 8.0+)中已被弃用。推荐在运行时通过SQL命令配置主库地址。

第3.2步:动态建立主从连接

由于我们在第1步导出了数据并查看了主库状态,现在需要在从库上指向这个起点。

  1. 获取主库当前Binlog位置(在主库执行):
mysql> SHOW MASTER STATUS;
-- 记录 File (如 mysql-bin.000002) 和 Position (如 107)
  1. 配置并启动Slave(在从库执行):
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.10.1',
    -> MASTER_USER='user1',
    -> MASTER_PASSWORD='123456',
    -> MASTER_LOG_FILE='mysql-bin.000002',  -- 替换为实际文件名
    -> MASTER_LOG_POS=107;                 -- 替换为实际位置号

mysql> START SLAVE;

完成情况判断与排错

在从库执行 SHOW SLAVE STATUS\G,关键检查项如下:

  • Slave_IO_Running: Yes:表示IO线程正常读取主库日志。
  • Slave_SQL_Running: Yes:表示SQL线程正常执行日志中的事件。
  • Seconds_Behind_Master:数值越小越好,0表示实时同步。

常见错误:Slave_SQL_Running 为 NO

如果变为NO,通常是因为数据冲突或误操作。处理步骤:

  1. 跳过错误事务(适用于可忽略的错误):
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
  1. 重新指定主库位置(适用于严重数据不一致):

参考第3.2步,再次从主库获取最新的File和Pos,执行 CHANGE MASTER TO 并重启Slave。

简要总结

MySQL主从复制通过授权专用账号、开启Binlog、全量数据迁移及动态配置连接来实现。关键在于保证主从 server-id 的唯一性以及 MATRIX_LOG_FILE/POS 的准确匹配。定期监控 SHOW SLAVE STATUS 可及时发现同步延迟或中断问题。

以上就是MySQL主从复制配置与实际操作的详细内容,更多关于数据库高可用的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。