MySQL数据库主从同步配置详解

山间有风
山间有风
发布时间:2026-10-13| 6人浏览过
原创

MySQL主从同步技术能有效缓解高负载网站数据库的读写压力,同时实现热备份和故障切换。

MySQL主从同步的原理与作用

MySQL同步的核心机制依赖于二进制日志(binlog)的传递与应用,其基本流程如下:

  1. 写入日志:主服务器(Master)将所有的变更事件(如更新、删除、表结构改变等)记录到二进制日志中。
  2. 传输日志:从服务器(Slave)的IO线程连接主服务器,获取这些二进制日志内容,并在本地保存为中继日志(relay log)。
  3. 重演操作:从服务器的SQL线程读取本地中继日志,并重放其中的变更事件,从而实现数据的一致性。

在实际应用中,主从同步主要具备以下价值:

  • 热备份:作为有效的数据备份手段,且在备份期间不会阻断主服务器的服务。
  • 读写分离:通过主库负责写入、从库负责读取的方式,均衡数据库负载。
  • 高可用性与灾备:当主服务器发生故障时,可以迅速切换到从服务器以维持业务运行。

主从同步配置实操

第一步:准备环境与数据同步

在进行配置前,需确保主从数据库版本一致且尽量高于5.5版本。同时,应保证从库的数据与主库保持一致,以避免初始阶段出现严重的数据差异。

第二步:主数据库(Master)配置

首先修改 /etc/my.cnf 文件开启主从同步所需的基础功能:

# /etc/my.cnf
# 指定二进制日志文件路径与前缀
log-bin=/home/mysql/logs/binlog/bin-log
# 主数据库端唯一标识ID,不可重复
server-id = 1
# 单个binlog最大大小限制,超过此值自动分割
max_binlog_size = 500M
# 日志缓存大小
binlog_cache_size = 128K
# 指定需要同步的数据库(多行写多个)
binlog-do-db = adb
# 指定不同步的数据库
binlog-ignore-db = mysql
# Slave从Master读取日志时是否更新新日志,保持与主库一致
log-slave-updates
# binlog保留天数(MySQL 5.0以下不支持该参数)
expire_logs_day=2
# binlog格式设为MIXED,防止主键重复问题
binlog_format="MIXED"

关键参数说明:
server-id:必须唯一。同一组主从中该标识号不能重复,若配置文件中存在多个,以第一个为准。
log-bin:用于开启二进制日志功能,并指定目录和前缀名称。
binlog-do-db / binlog-ignore-db:分别控制只同步或不同步指定的数据库,支持添加多行进行定义。

完成配置后重启MySQL,并创建专用的同步账号:

# 授权slave账号对全库的复制权限
mysql> grant replication slave on *.* to 'slave'@'%' identified by '111111';
# 刷新权限使配置生效
mysql> flush privileges;

最后,查询主库当前状态并记录文件位置和偏移量,执行完毕后务必不要操作主库以免状态值变动:

mysql> show master status;
+------------------+----------+--------------+------------------+
| File    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000009 |  196 |             |                  |
+------------------+----------+--------------+------------------+
1 row in set

第三步:从数据库(Slave)配置

进入从库服务器,同样编辑配置文件,但只需关注其唯一的标识:

# 从数据库端ID号,需与Master不同
server-id = 2

进入MySQL客户端,通过 change master to 语句建立从库与主库的连接关系,填入上一步获取的文件名和位置:

# 配置连接信息,替换为实际的主库IP、账号密码及同步坐标
mysql> change master to 
master_host='192.168.1.2',
master_user='slave',
master_password='111111',
master_log_file='mysql-bin.000009',
master_log_pos=196;

随后启动同步进程:

mysql> start slave;

执行以下命令检查同步状态:

mysql> show slave status\G;

观察输出结果中的关键字段:
Slave_IO_Running 和 Slave_SQL_Running 两项均必须显示为 Yes,否则表明同步失败。这两项通常也用于检测从服务器是否正常运行。

至此,基础的主从同步配置已完成。建议新建测试库表并进行插入、修改操作,验证数据是否能成功同步至从库。

常见维护与排错参数

在长期使用中,可根据需求调整相关参数:

Master端常用配置补充:

  • sync_binlog:控制binlog刷盘频率(如每5次事务写入一次),可减少崩溃数据损失,但有一定性能损耗。
  • expire_logs_days:统一设置日志文件的保留天数。

Slave端常用维护命令:

# 停止主从同步
mysql> stop slave;
# 修改断线重连超时时间(单位秒)
mysql> change master to master_connect_retry=50;
# 重新开启主从同步
mysql> start slave;

在实际开发中,可通过SQL脚本定期检查同步状态,例如判断 Slave_IO_Running 和 Slave_SQL_Running 是否为 'Yes',以便及时发现并处理异常。

以上就是MySQL数据库设置主从同步的详细内容,更多关于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 算法库。