MySQL实现主从复制不需停机(mysql不停机做主从)
MySQL实现主从复制不需停机
MySQL的主从复制是一种常见的数据复制技术,它允许在多个MySQL服务器之间复制数据。在复制过程中,主服务器将数据库更改记录到二进制日志文件中,并将该文件发送到从服务器,从服务器将在其本地数据库中执行相同的更改。本文将介绍如何实现MySQL主从复制,并且无需停机。
1. 创建主服务器
我们需要创建一个MySQL主服务器。在这个过程中,我们将启用二进制日志记录,并创建一个专用的复制用户。
mysql> SET @@GLOBAL.SQL_SLAVE_SKIP_COUNTER = 1;
mysql> CREATE USER ‘replication’@’%’ IDENTIFIED BY ‘password’;
mysql> GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’;
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
在创建用户时,我们为其分配了“复制”权限。这允许从服务器读取二进制日志文件,并在其本地数据库中执行相同的更改。我们还锁定了所有表,以便在创建从服务器之前可靠地读取主服务器状态。
2. 创建从服务器
接下来,我们将创建从服务器,并将其配置为使用主服务器的二进制日志文件。
mysql> CHANGE MASTER TO MASTER_HOST=’master’, MASTER_USER=’replication’, MASTER_PASSWORD=’password’, MASTER_LOG_FILE=’mysql-bin.000001′, MASTER_LOG_POS=107;
我们在这个过程中指定了主服务器的位置信息(主机名,用户名和密码)。我们还指定了主服务器正在使用的二进制日志文件的名称和位置。这些信息将用于创建与主服务器的连接。
3. 启动从服务器复制
现在,从服务器已经配置好了,我们可以开始使用它来复制主服务器的数据了。
mysql> START SLAVE;
现在,从服务器将从主服务器的二进制日志文件中读取更改,并确保数据库的状态与主服务器相同。完成此过程后,我们可以查看从服务器状态:
mysql> SHOW SLAVE STATUS\G
在这个输出中,我们可以查看到复制进度、错误、速度等信息。要停止从服务器复制,可以使用如下命令:
mysql> STOP SLAVE;
4. 不停机实现主从复制
在上面的实现过程中,我们会发现必须在主服务器上执行命令”FLUSH TABLES WITH READ LOCK”,并且从服务器必须指定主服务器位置信息。这些步骤在一些特定场景下,如停机维护、服务器迁移等情况下会复杂一些,无法实现不停机主从复制。如何实现不停机主从复制?我们可以使用MySQL GTID (Global Transaction ID)来解决这个问题。
· GTID在MySQL 5.6.9及更高版本中可用
· 它可确保在主服务器和从服务器之间复制的事务完全相同
· 它允许在不停机的情况下将从服务器切换到新的主服务器
如果您的MySQL版本支持GTID,则可以按照以下步骤配置主从复制:
1) 在主服务器上启用GTID
[mysqld]
server-id=1
log_bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
2) 重启MySQL服务
systemctl restart mysql
3) 在同一主机上创建并配置第二个MySQL实例,启用GTID
[mysqld]
server-id=2
log_bin=mysql-bin
gtid_mode=ON
enforce_gtid_consistency=ON
4) 创建从服务器
mysql> CREATE SERVER `slave` FOREIGN DATA WRAPPER `mysql` OPTIONS (
`host` ‘slave IP’, # 从服务器IP
`port` 3306,
`user` ‘replication’,
`password` ‘password’,
`gtid_slave_pos` ‘CURRENT_POS’ # 当前位置的GTID
);
5) 配置从服务器的副本事件处理程序
mysql> CHANGE REPLICATION FILTER REPLICATE_DO_DB=percona;
6) 启动从服务器复制
mysql> START REPLICA;
现在,我们已经成功实现了MySQL主从复制,并且在GTID模式下,无需停机切换从服务器到新的主服务器仍然非常方便。