linux下mysql主从复制操作流程
在Linux下实现MySQL主从复制(Master-Slave Replication)是一个常见的需求,用于读写分离、数据备份等场景。以下是一个详细的操作流程,包括每个步骤、注意事项以及总结。
一、准备环境
-
安装MySQL
- 确保主服务器(Master)和从服务器(Slave)都已经安装了MySQL。
- 可以通过包管理工具安装,例如:
sudo apt-get install mysql-server
(Debian/Ubuntu)或sudo yum install mysql-server
(CentOS/RHEL)。
-
配置网络连通性
- 确保主服务器和从服务器之间可以通过网络相互通信。
二、配置主服务器(Master)
-
编辑MySQL配置文件
-
打开MySQL配置文件(通常是
/etc/mysql/mysql.conf.d/mysqld.cnf
或/etc/my.cnf
)。 -
添加或修改以下内容:
ini[mysqld] server-id = 1 log-bin = mysql-bin binlog-do-db = your_database # 仅复制特定的数据库,可选
-
server-id
:每个服务器的唯一标识符,主服务器和从服务器不能相同。 -
log-bin
:启用二进制日志。 -
binlog-do-db
:仅复制特定的数据库,如果希望复制所有数据库,可以省略此行。
-
-
重启MySQL服务
-
重启MySQL服务以使配置生效:
shsudo systemctl restart mysql
-
-
创建复制用户
-
登录到MySQL:
shmysql -u root -p
-
创建一个用于复制的用户,并授予必要的权限:
sqlCREATE USER 'replica_user'@'%' IDENTIFIED BY 'replica_password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES;
-
-
锁定表并获取二进制日志位置
-
为了确保数据一致性,锁定表并获取当前二进制日志文件名和位置:
sqlFLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;
-
记录下
File
和Position
的值,稍后从服务器上会用到。
-
-
备份数据库
-
使用
mysqldump
备份数据库,并传输到从服务器:shmysqldump -u root -p --all-databases --master-data=2 > all_databases.sql
-
将生成的
all_databases.sql
文件复制到从服务器。
-
-
解锁表
-
在主服务器上解锁表:
sqlUNLOCK TABLES;
-
三、配置从服务器(Slave)
-
编辑MySQL配置文件
-
打开MySQL配置文件(路径同上)。
-
添加或修改以下内容:
ini[mysqld] server-id = 2 relay-log = mysql-relay-bin
-
server-id
:确保与主服务器不同。 -
relay-log
:定义中继日志文件名。
-
-
重启MySQL服务
-
重启MySQL服务以使配置生效:
shsudo systemctl restart mysql
-
-
导入主服务器的备份
-
将之前在主服务器上生成的
all_databases.sql
文件导入到从服务器:shmysql -u root -p < all_databases.sql
-
-
配置从服务器以连接到主服务器
-
登录到从服务器的MySQL:
shmysql -u root -p
-
配置从服务器:
sqlCHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='replica_user', MASTER_PASSWORD='replica_password', MASTER_LOG_FILE='mysql-bin.000001', # 使用SHOW MASTER STATUS得到的File值 MASTER_LOG_POS= 12345; # 使用SHOW MASTER STATUS得到的Position值
-
-
启动复制
-
在从服务器上启动复制进程:
sqlSTART SLAVE;
-
-
检查复制状态
-
检查从服务器状态:
sqlSHOW SLAVE STATUS \G;
-
确保
Slave_IO_Running
和Slave_SQL_Running
都为Yes
,并且没有错误。
-
四、注意事项
-
防火墙和网络
- 确保MySQL端口(默认3306)在主服务器和从服务器之间开放。
-
数据一致性
- 在主服务器上进行备份和获取二进制日志位置时,确保没有写入操作,或者选择适当的备份策略(如使用Percona XtraBackup等工具)。
-
权限和安全性
- 复制用户应仅授予必要的权限,并且密码应足够复杂。
- 使用SSL加密复制连接以增加安全性。
-
监控和故障排查
- 定期监控复制状态,及时发现并解决问题。
- 使用工具如
pt-table-checksum
和pt-table-sync
来检查和修复数据不一致。
五、总结
MySQL主从复制是一个强大且灵活的功能,可以显著提高数据库的可用性和可扩展性。通过遵循上述步骤,您可以轻松地在Linux下实现MySQL的主从复制。重要的是,要仔细规划配置,确保网络连通性和安全性,以及定期监控复制状态以维护数据一致性。