在Ubuntu上,MySQL主从切换通常是为了实现高可用性和负载均衡。以下是进行MySQL主从切换的步骤:
/etc/mysql/my.cnf或/etc/my.cnf)中的相关参数设置正确。在从服务器上执行以下命令停止复制进程:
STOP SLAVE;
在主服务器上执行以下命令获取当前的二进制日志文件名和位置:
SHOW MASTER STATUS;
记下File和Position的值。
在从服务器上执行以下步骤:
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
记下新的File和Position的值。
使用mysqldump导出从服务器上的所有数据库:
mysqldump -u root -p --all-databases --master-data=2 --single-transaction > full_backup.sql
这会生成一个包含CHANGE MASTER TO语句的SQL文件,用于在新主服务器上设置复制。
UNLOCK TABLES;
编辑从服务器的MySQL配置文件(例如/etc/mysql/my.cnf),将server-id设置为一个唯一的值,并注释掉或删除原有的复制相关配置。
sudo systemctl restart mysql
将之前导出的备份文件导入到新主服务器上:
mysql -u root -p < full_backup.sql
在新主服务器上,编辑MySQL配置文件,确保server-id是唯一的,并且没有启用复制。然后重启MySQL服务。
在旧主服务器上执行以下步骤:
编辑旧主服务器的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 # 替换为你的数据库名
sudo systemctl restart mysql
在旧主服务器上执行以下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替换为实际的值。
START SLAVE;
在两台服务器上分别执行以下命令,验证复制是否正常工作:
SHOW SLAVE STATUS\G
检查Slave_IO_Running和Slave_SQL_Running字段是否都为Yes。
pt-table-sync等工具来同步数据。通过以上步骤,你应该能够成功地在Ubuntu上实现MySQL的主从切换。