my.cnf
文件中的binlog-do-db
和replicate-do-db
参数实现。双向同步需在两台服务器上互相配置主从关系,并确保网络畅通。MySQL主从复制是一种常见的数据库备份和负载均衡技术,通过在主服务器(Master)上进行数据写入,然后将这些更改同步到一个或多个从服务器(Slave)上,实现数据的高可用性和容错性,有时我们只需要将部分数据库从主服务器同步到从服务器,或者实现双向同步,即允许从服务器的数据变更也同步回主服务器,本文将详细介绍如何设置MySQL主从复制来同步部分数据库,并讨论MySQL到MySQL的双向同步。
一、MySQL主从复制基础配置
确保主从服务器都已安装并运行MySQL,以下是基本步骤:
1、编辑my.cnf文件:
在主服务器上,找到[mysqld]
部分,添加或修改以下配置:
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = mydb # 只记录名为mydb的数据库的二进制日志
在从服务器上,找到[mysqld]
部分,添加或修改以下配置:
server-id = 2 relay_log = /var/log/mysql/mysql-relay-bin.log
2、重启MySQL服务:分别在主从服务器上执行命令sudo systemctl restart mysqld
。
3、创建复制用户:在主服务器上,为从服务器创建一个用于复制的用户:
CREATE USER 'replica'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%'; FLUSH PRIVILEGES;
4、查看主服务器状态:在主服务器上执行SHOW MASTER STATUS;
,记下File和Position的值。
5、配置从服务器:在从服务器上执行命令:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replica', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.log', -File值 MASTER_LOG_POS=xxx; -Position值 START SLAVE;
二、MySQL部分数据库同步
如果只想同步特定的数据库,可以通过binlog_do_db
参数来实现,在主服务器的my.cnf文件中,指定需要同步的数据库:
binlog_do_db = mydb1, mydb2 # 仅同步mydb1和mydb2两个数据库的变更
这样配置后,只有mydb1和mydb2的变更会被记录到二进制日志中,并同步到从服务器。
三、MySQL到MySQL双向同步
双向同步意味着不仅主服务器的数据变更会同步到从服务器,从服务器的数据变更也会同步回主服务器,这通常通过链式复制实现,即设置一个中间服务器作为“桥梁”。
1、设置中间服务器:该服务器同时作为主服务器的从服务器和另一个从服务器的主服务器,在中间服务器的my.cnf文件中配置如下:
server-id = 3 log_bin = /var/log/mysql/mysql-bin.log relay_log = /var/log/mysql/mysql-relay-bin.log
2、配置主服务器与中间服务器的复制:按照上述基本步骤配置主服务器到中间服务器的单向复制。
3、配置中间服务器到最终从服务器的复制:同样按照基本步骤配置,但这次是将中间服务器作为“主服务器”,最终从服务器作为“从服务器”。
4、开启链式复制:确保所有服务器的复制线程均已启动。
FAQs
Q1: 如何检查复制状态是否正常?
A1: 可以在从服务器上执行SHOW SLAVE STATUS\G;
查看Slave_IO_Running和Slave_SQL_Running是否都为Yes,以及Seconds_Behind_Master是否合理(不应太大)。
Q2: 如果发现数据不一致怎么办?
A2: 首先停止从服务器上的复制线程(STOP SLAVE;),然后使用CHANGE MASTER TO ...
重新指向正确的日志文件和位置,最后再次启动复制(START SLAVE;),必要时,可能需要从主服务器导出数据并覆盖从服务器上的数据。
小编有话说:虽然MySQL主从复制提供了强大的数据同步能力,但在实际应用中仍需谨慎配置和维护,特别是在处理部分数据库同步和双向同步时,定期检查复制状态,及时处理异常,可以有效避免数据丢失和服务中断。