1. 主库设置
在主库,假设是A服务器上,开放 3306 端口
sudo ufw allow 3306/tcp
重新加载 UFW 生效
sudo ufw reload
编辑/etc/my.cnf:
[mysqld]
server-id=1
read_only=0
log-bin=mysql-bin
# 指定需要同步的数据库,如果不指定,默认所有数据库
binlog-do-db=db1
binlog-do-db=db2
重启数据库
service mysqld restart
2. 从库设置
假设是B服务器上,编辑my.cnf:
[mysqld]
server-id=2
read_only=1
# 指定需要复制的数据库
replicate-do-db=db1
replicate-do-db=db2
重启数据库
service mysqld restart
3. 主库授权
登录 mysql 命令行
mysql -u root -p
只需要在主库,服务器(A)上创建同步用户:
-- 在主服务器A上执行
CREATE USER 'tongbu'@'从服务器IP' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'tongbu'@'从服务器IP';
FLUSH PRIVILEGES;
4. 配置主从关系
- 在主服务器上获取日志位置:
SHOW MASTER STATUS;
- 在从服务器上配置:
-- 1. 停止同步
STOP SLAVE;
-- 2. 重置服务器状态
RESET SLAVE;
-- 3. 配置主从关系
CHANGE MASTER TO
MASTER_HOST='主服务器IP',
MASTER_USER='tongbu',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体位置;
-- 4. 启动同步
START SLAVE;
4. 验证复制状态
在从服务器上执行:
SHOW SLAVE STATUS\G
检查以下两个参数是否都为Yes:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
一、故障确认
- 检查主库状态
# 检查MySQL服务状态
systemctl status mysql
- 检查从库同步状态
-- 登录从库
mysql -u root -p
-- 检查同步状态
SHOW SLAVE STATUS\G
-- 确认以下内容:
-- 1. Slave_IO_Running 和 Slave_SQL_Running 的状态
-- 2. Seconds_Behind_Master 是否为 0(确保数据已完全同步)
二、从库提升为主库
- 停止从库同步
-- 在从库上执行
STOP SLAVE;
RESET SLAVE ALL;
- 修改从库配置文件
[mysqld]
# 删除或注释掉从库相关配置
# replicate-do-db=db1
# replicate-do-db=db2
# 取消只读模式
read_only=0
# 启用二进制日志(如果之前没启用)
log-bin=mysql-bin
- 重启MySQL服务
systemctl restart mysql
三、原主库恢复后的处理
如果原主库恢复,可以将其配置为新的从库:
- 备份新主库数据
mysqldump -u root -p --all-databases > backup.sql
- 将备份文件上传到原主库服务器 在原主库上恢复数据
进入到备份文件所在的目录:
cd /path/to/destination/
执行导入命令:系统会提示输入 root 用户的密码,输入后开始恢复数据
mysql -u root -p < backup.sql
- 配置原主库为从库
[mysqld]
server-id=2 # 注意修改server-id
read_only=1
- 设置复制关系
-- 在原主库上执行
CHANGE MASTER TO
MASTER_HOST='新主库IP',
MASTER_USER='tongbu',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体位置;
START SLAVE;
MASTER_HOST
:新主库的 IP 地址。MASTER_USER
和MASTER_PASSWORD
:用于复制的账户及其密码。MASTER_LOG_FILE
和MASTER_LOG_POS
:指定从库应该从哪个 binlog 文件及位置开始同步数据,需根据新主库状态设置。
执行 START SLAVE;
后,可以通过以下命令检查复制状态:
SHOW SLAVE STATUS\G;
确认 Slave_IO_Running
和 Slave_SQL_Running
都为 Yes
表示配置成功。