配置MySQL主从复制需确保网络通畅、版本一致、server-id唯一、主库开启binlog并设为ROW格式,创建专用复制用户,通过CHANGE MASTER TO连接主从,启动复制后用SHOW SLAVE STATUS检查状态,监控IO和SQL线程运行情况及延迟,及时排查错误与数据不一致问题。

配置MySQL主从数据源,核心在于建立一个数据同步机制,让一个主服务器(Master)的数据变更能够实时或准实时地复制到一个或多个从服务器(Slave)。这不仅能提升数据库的读取性能,通过分担查询压力,更是实现数据冗余、灾难恢复和系统高可用的基石。本质上,我们是在构建一个基于MySQL二进制日志(binlog)的数据流管道。
要搞定MySQL主从复制的数据源配置,我们得从两端着手:主库和从库。这过程说复杂不复杂,但细节挺多的,任何一个环节出了岔子都可能导致复制失败。
第一步:主库(Master)配置
修改my.cnf
/etc/my.cnf
/etc/mysql/my.cnf
[mysqld] log-bin=mysql-bin # 给你的binlog起个名字,比如mysql-bin binlog-format=ROW # 推荐使用ROW模式,更安全,避免基于语句复制可能出现的数据不一致问题 server-id=1 # 主库的唯一ID,在整个复制拓扑中必须独一无二
server-id
systemctl restart mysqld
/etc/init.d/mysql restart
创建复制用户: 从库需要一个有权限连接主库并读取其二进制日志的用户。
CREATE USER 'repl'@'%' IDENTIFIED BY 'your_replication_password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
这个
repl
%
记录主库状态: 在开始复制前,我们需要知道主库当前的二进制日志文件名和位置。
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
你会看到类似这样的结果:
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 123456 | | | | +------------------+----------+--------------+------------------+-------------------+
记下
File
Position
UNLOCK TABLES;
第二步:从库(Slave)配置
修改my.cnf
[mysqld] server-id=2 # 从库的唯一ID read_only=1 # 建议开启,防止从库被误写入数据,仅允许复制线程写入
配置从库连接主库信息: 登录从库MySQL。
STOP SLAVE;
File
Position
CHANGE MASTER TO MASTER_HOST='主库IP地址', MASTER_USER='repl', MASTER_PASSWORD='your_replication_password', MASTER_LOG_FILE='mysql-bin.000001', # 主库SHOW MASTER STATUS中的File MASTER_LOG_POS=123456; # 主库SHOW MASTER STATUS中的Position
这一步是把主从连接起来的关键。如果主库已经有数据,你可能需要先在从库上导入主库的完整备份,然后再执行
CHANGE MASTER TO
mysqldump
启动从库复制进程:
START SLAVE;
检查从库状态:
SHOW SLAVE STATUS\G
这个命令输出的信息量巨大,关键是看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Last_IO_Error:
Last_SQL_Error:
Seconds_Behind_Master: 0
如果这几个关键指标都正常,那恭喜你,主从复制基本就跑起来了。
在动手配置MySQL主从复制之前,有几个核心准备工作和注意事项,这些往往决定了后续配置的顺畅程度。我个人觉得,这些前期工作做得越扎实,后期踩坑的可能性就越小。
首先,网络连通性是基础中的基础。确保主库和从库之间网络是通的,防火墙没有阻挡MySQL默认的3306端口。我见过不少新手,花了好几个小时查复制问题,最后发现是防火墙没开。简单的
ping
telnet 主库IP 3306
其次,MySQL版本的一致性虽然不是强制要求,但强烈建议主从库使用相同的主版本号(例如,都是8.0.x,或都是5.7.x)。不同版本之间复制可能存在兼容性问题,尤其是在升级过程中,这会让你头疼不已。
再来,确保每个MySQL实例拥有唯一的server-id
server-id
主库必须开启二进制日志(log-bin
binlog_format
ROW
STATEMENT
NOW()
UUID()
ROW
最后,主库上需要创建一个专用的复制用户,并且只授予
REPLICATION SLAVE
总结一下,前期准备就是:通畅的网络、一致的版本、唯一的
server-id
log-bin
ROW
主从复制配置好了,不代表就一劳永逸了。日常的监控和故障排查是运维工作中非常重要的一部分。我个人觉得,掌握
SHOW SLAVE STATUS\G
首先,SHOW SLAVE STATUS\G
Slave_IO_Running
Yes
No
Slave_SQL_Running
Yes
No
Last_IO_Error
Last_SQL_Error
Could not find first log file name in binary log index file
CHANGE MASTER TO
Seconds_Behind_Master
0
排查常见故障的思路:
复制中断(Slave_IO_Running: No
Slave_SQL_Running: No
Last_IO_Error
Last_SQL_Error
Duplicate entry '...' for key 'PRIMARY'
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
复制延迟(Seconds_Behind_Master
我通常会结合
pt-table-checksum
当我们搞定了基础的主从复制,并且能够稳定运行后,自然会开始考虑如何让它更健壮、更高效。这就像你把车开起来了,接下来就想让它跑得更快、更稳、更智能。
一个很重要的进阶是多线程复制(Multi-Threaded Replication, MTS)。在MySQL 5.6版本引入后,MTS允许从库的SQL线程并行地应用事务,而不是像以前那样单线程串行执行。这对于那些写入负载高、事务并发度大的主库来说,能极大地提升从库的复制速度,有效降低
Seconds_Behind_Master
my.cnf
slave_parallel_workers
另一个让我觉得非常实用的是GTID(Global Transaction Identifiers)全局事务ID。从MySQL 5.6开始,GTID的引入彻底改变了复制的拓扑管理和故障切换的复杂性。有了GTID,每个在主库上提交的事务都会被分配一个全局唯一的ID。从库在复制时,只需要知道它已经执行到哪个GTID,然后向主库请求它还没执行过的GTID事务即可。这极大地简化了主从切换、故障恢复以及搭建复杂复制拓扑(如级联复制、多源复制)的流程。你不再需要手动记录
File
Position
my.cnf
gtid_mode=ON
enforce_gtid_consistency=ON
半同步复制(Semi-Synchronous Replication)也是一个值得关注的高级特性。默认的MySQL异步复制,主库在提交事务后不会等待从库是否收到或应用成功,这在主库发生故障时可能导致少量数据丢失。半同步复制则要求主库在提交事务后,至少有一个从库成功接收并写入到自己的relay log后,主库才会继续提交事务。这在一定程度上牺牲了主库的写入性能,但换来了更高的数据安全性,降低了数据丢失的风险。在需要更高数据一致性保证的场景下,半同步复制是个不错的选择。
最后,一个比较巧妙的实践是延迟复制(Delayed Replication)。这并非为了提升性能,而是为了提供一种“后悔药”机制。你可以设置从库在收到主库的事务后,延迟一段时间(比如1小时)再应用。如果主库不小心执行了
DROP TABLE
DELETE FROM ...
这些高级特性和实践,各有侧重,可以根据你对性能、可用性、数据一致性以及运维复杂度的需求,灵活选择和组合使用。但无论如何,测试先行,永远是部署这些高级功能前的不二法门。
以上就是如何配置MySQL主从数据源_MySQL主从复制数据源设置的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号