文章目录
- 主从同步的基本原理
- 主从同步的搭建步骤
- 1. 环境准备
- 2. 配置主服务器(Master)
- 3. 配置从服务器(Slave)
- 4. 测试配置
- 5. 常见故障
- 5.1. 主从服务器上的MySQL版本不一致导致失败?
- 5.2. Slave_IO_Running状态异常?
- 5.3. 配置正确,但同步失败?
- 5.4. 断电重启后同步中断?
MySQL的主从同步(Master-Slave Replication)是一个常用的数据备份和恢复策略,它允许在两个或多个数据库服务器之间实现数据同步。这种方案不仅可以提高数据备份的效率,还可以实现读写分离,从而提高整个系统的性能和可靠性。
主从同步的基本原理
MySQL主从同步是基于二进制日志(binlog)实现的。主数据库将数据变更记录在binlog中,而从数据库则通过读取binlog来获取这些变更,并将它们应用到自己的数据库中。这样,从数据库就可以保持与主数据库的数据一致性。
主从同步的搭建步骤
1. 环境准备
- 两台服务器
一台作为主服务器(Master),一台作为从服务器(Slave) - 均安装MySQL8.0
- 均安装Navicat[可选项]
使用数据库连接工具Navicat可以便捷的连接数据库,从而方便操作。
2. 配置主服务器(Master)
编辑主服务器的MySQL配置文件,通常位于/etc/mysql/mysql.conf.d/mysqld.cnf
或/etc/my.cnf
,添加下列配置项:
[mysqld]
server-id=1
log-bin=mysql-binlog
binlog-do-db=your-database-name
gtid_mode=ON
enforce_gtid_consistency=ON
server-id
:MySQL服务器的唯一ID,主从服务器ID不能相同log-bin
:启用二进制日志,记录所有数据库的修改信息binlog-do-db
:指定需要同步的数据库名(可选配置)- gtid_mode:GTID 是一个全局唯一的事务标识符,用于标识数据库集群中的事务。启用 GTID 后,每个事务都会被分配一个唯一的 GTID。
- enforce_gtid_consistency:当启用 GTID 后,该选项用于强制要求从库只能复制具有与主库一致的 GTID 链的事务,以确保数据一致性。
重启MySQL服务使配置生效。
然后,登录MySQL并执行以下命令:
CREATE USER 'replication_user'@'%' identified by 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
FLUSH PRIVILEGES
:刷新权限FLUSH TABLE WITH READ LOCK
:锁定所有表,以便获取当前的二进制日志位置SHOW MASTER STATUS
:查看主服务器状态
3. 配置从服务器(Slave)
编辑从服务器的MySQL配置文件,添加下列配置项:
[mysqld]
server-id=2
relay-log=mysql-relay-bin
replicate-do-db=your_database_name
relay-log
:中继日志,从服务器用于存储接收到的二进制日志事件。replicate-do-db
:指定需要同步的数据库名(可选配置)。
重启MySQL服务以使配置生效。然后,登录MySQL并执行以下命令:
CHANGE MASTER TO
MASTER_HOST='master_server_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='recorded_log_file',
MASTER_LOG_POS=recorded_log_pos;
START SLAVE;
SHOW SLAVE STATUS\G;
CHANGE MASTER TO
:配置从服务器连接到主服务器的信息。START SLAVE
:启动从服务器的复制进程。SHOW SLAVE STATUS
:查看从服务器的复制状态。确保Slave_IO_Running
和Slave_SQL_Running
的值都是Yes。
4. 测试配置
在主服务器上创建一个新的表并插入一些数据,然后检查从服务器是否已同步这些更改。
5. 常见故障
5.1. 主从服务器上的MySQL版本不一致导致失败?
解决:卸载并重新安装相同版本的MySQL服务器。
5.2. Slave_IO_Running状态异常?
解决:检查主服务器防火墙配置,放行从服务器相关连接请求或直接关闭主服务器的防火墙(仅限开发环境)。
5.3. 配置正确,但同步失败?
解决:检查bin-log及relay-log文件及其目录的权限,确保配置权限适当。
5.4. 断电重启后同步中断?
解决:检查上述配置及服务状态,修复异常项。