在Ubuntu上,MySQL主从切换通常是为了实现高可用性和负载均衡。以下是进行MySQL主从切换的步骤:
1. 准备工作
- 备份数据:在进行任何切换操作之前,请确保对主服务器和从服务器的数据进行了完整备份。
- 检查配置:确认主服务器和从服务器的MySQL配置文件(通常是
/etc/mysql/my.cnf
或/etc/my.cnf
)中的相关参数设置正确。
2. 停止从服务器复制
在从服务器上执行以下命令停止复制进程:
STOP SLAVE;
3. 获取主服务器的二进制日志位置
在主服务器上执行以下命令获取当前的二进制日志文件名和位置:
SHOW MASTER STATUS;
记下File
和Position
的值。
4. 将从服务器提升为主服务器
在从服务器上执行以下步骤:
a. 锁定所有表
FLUSH TABLES WITH READ LOCK;
b. 记录当前二进制日志位置
SHOW MASTER STATUS;
记下新的File
和Position
的值。
c. 导出数据库
使用mysqldump
导出从服务器上的所有数据库:
mysqldump -u root -p --all-databases --master-data=2 --single-transaction > full_backup.sql
这会生成一个包含CHANGE MASTER TO
语句的SQL文件,用于在新主服务器上设置复制。
d. 解锁表
UNLOCK TABLES;
e. 修改配置文件
编辑从服务器的MySQL配置文件(例如/etc/mysql/my.cnf
),将server-id
设置为一个唯一的值,并注释掉或删除原有的复制相关配置。
f. 重启MySQL服务
sudo systemctl restart mysql
g. 导入数据库
将之前导出的备份文件导入到新主服务器上:
mysql -u root -p < full>
h. 配置新主服务器
在新主服务器上,编辑MySQL配置文件,确保server-id
是唯一的,并且没有启用复制。然后重启MySQL服务。
5. 配置旧主服务器为从服务器
在旧主服务器上执行以下步骤:
a. 修改配置文件
编辑旧主服务器的MySQL配置文件,设置server-id
为一个唯一的值,并添加以下复制配置:
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_database_name # 替换为你的数据库名
b. 重启MySQL服务
sudo systemctl restart mysql
c. 设置新主服务器
在旧主服务器上执行以下SQL命令,指向新的主服务器:
CHANGE MASTER TO
MASTER_HOST='new_master_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='new_master_log_file',
MASTER_LOG_POS=new_master_log_pos;
将new_master_ip
、replication_user
、replication_password
、new_master_log_file
和new_master_log_pos
替换为实际的值。
d. 启动复制
START SLAVE;
6. 验证切换
在两台服务器上分别执行以下命令,验证复制是否正常工作:
SHOW SLAVE STATUS\G
检查Slave_IO_Running
和Slave_SQL_Running
字段是否都为Yes
。
注意事项
- 在整个过程中,确保网络连接稳定。
- 如果有大量数据,可以考虑使用
pt-table-sync
等工具来同步数据。
- 切换过程中可能会有短暂的服务中断,建议在低峰时段进行。
通过以上步骤,你应该能够成功地在Ubuntu上实现MySQL的主从切换。