MySQL双机配置实操,主要是想避免系统突然崩溃那种尴尬情况发生
- 问答
- 2026-01-19 07:14:02
- 2
双机配置的本质是让两台MySQL服务器保持数据实时同步,一台作为主服务器(Master),负责处理所有的写操作(比如新增、修改、删除数据);另一台作为从服务器(Slave),实时地从主服务器复制数据,平时读操作(查询)可以分摊到两台机器上,一旦主服务器崩溃,我们手动(或借助工具自动)将从服务器切换成新的主服务器,让应用程序连接到它,这样就实现了快速恢复。
下面我们一步步来操作,假设你有两台服务器,IP地址分别是192.168.1.100(我们定它为主库)和192.168.1.101(我们定它为从库)。
第一步:准备工作
- 确保网络通畅:两台服务器必须能互相ping通,防火墙要开放MySQL的端口(默认是3306),这是同步的基础。
- 安装MySQL:在两台服务器上安装完全相同版本的MySQL,版本不一致可能会导致同步失败,可以用
mysql --version命令检查。 - 准备初始数据:如果主库上已经有数据了,需要先进行一次完整的数据备份,然后恢复到从库上,保证两者的起点一致,可以使用
mysqldump工具来完成,命令大致是:- 在主库上执行:
mysqldump -u root -p --all-databases --master-data > master_data.sql - 把这个
master_data.sql文件拷贝到从库服务器上。 - 在从库上执行:
mysql -u root -p < master_data.sql
- 在主库上执行:
第二步:配置主库(192.168.1.100)
我们需要修改主库的MySQL配置文件,通常是 /etc/my.cnf 或 /etc/mysql/my.cnf,找到 [mysqld] 这个段落,修改或增加以下几行:
[mysqld] # 每个服务器必须有一个唯一的ID,这里主库设为1 server-id = 1 # 开启二进制日志,这是数据同步的“源头”,所有变更都记录在这里 log_bin = mysql-bin # 指定需要同步的数据库名,如果有多个数据库就写多行,如果想同步所有库,可以不设或注释掉。 # binlog_do_db = your_database_name
保存文件后,重启MySQL服务让配置生效,比如用命令 systemctl restart mysql。
重启后,登录主库的MySQL命令行(mysql -u root -p),我们需要创建一个专门用于数据同步的用户账号,并授予权限:
CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY '一个安全的密码'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101'; FLUSH PRIVILEGES;
查看主库当前的状态,记录下两个关键信息:
SHOW MASTER STATUS;
你会看到一个结果,类似下面这样:
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 107 | | | |
+------------------+----------+--------------+------------------+-------------------+
记下 File(mysql-bin.000001)和 Position(107)这两个值,配置从库时会用到。
第三步:配置从库(192.168.1.101)

同样,修改从库的MySQL配置文件:
[mysqld] # 从库的server-id必须和主库不同,这里设为2 server-id = 2 # 从库也可以开启二进制日志,这样它如果将来升级为主库,还能有自己的从库 log_bin = mysql-bin # 可选:防止从库被意外写入,确保数据一致性 read_only = 1
保存并重启从库的MySQL服务。
登录从库的MySQL命令行,开始配置复制链路:
CHANGE MASTER TO MASTER_HOST='192.168.1.100', -- 主库的IP地址 MASTER_USER='repl', -- 刚才在主库创建的用户名 MASTER_PASSWORD='你设置的密码', -- 刚才在主库设置的密码 MASTER_LOG_FILE='mysql-bin.000001', -- 刚才在主库记下的File名 MASTER_LOG_POS=107; -- 刚才在主库记下的Position值
启动从库的复制线程:
START SLAVE;
第四步:检查同步状态
在从库上执行以下命令检查同步是否成功:

SHOW SLAVE STATUS\G
(\G 是让结果以更易读的垂直格式显示)
在输出信息中,重点关注这两行:
Slave_IO_Running: 是否正在从主库读取日志,应该是Yes。Slave_SQL_Running: 是否正在执行日志中的SQL,应该是Yes。
如果这两项都是 Yes,恭喜你,主从同步已经建立成功了!
第五步:模拟故障切换(演练)
光配置好不行,必须演练一下,找个业务低峰期,进行测试:
- 模拟主库崩溃:直接关闭主库的MySQL服务(
systemctl stop mysql)。 - 提升从库为主库:
- 在从库(192.168.1.101)上执行
STOP SLAVE;停止复制。 - 执行
RESET SLAVE ALL;清除旧的复制信息(谨慎操作,这会清除连接配置)。 - 修改从库的
my.cnf,注释掉read_only = 1,使其可写。 - 重启从库MySQL服务。
- 在从库(192.168.1.101)上执行
- 修改应用程序配置:将应用程序的数据库连接地址从原来的主库(192.168.1.100)改为新的主库(192.168.1.101)。
- 测试应用:检查应用是否能够正常读写新的主库。
这样,整个切换过程就完成了,等原来的主库修好后,可以按照类似的步骤,把它设置为新主库的从库,恢复双机模式。
重要提醒:
- 是手动切换的方式,虽然可靠,但需要人工干预,恢复时间取决于人的反应速度,对于要求更高的场景,可以使用中间件(如MHA, Orchestrator)或云服务商提供的高可用方案来实现自动故障切换。
- 定期检查主从同步状态是否正常,确保数据一致。
- 务必做好定期全量备份,双机同步不能替代备份,如果误删数据,同步也会把误删操作复制到从库。
这个实操流程基于MySQL经典的主从复制(Replication) 技术,这是实现MySQL高可用最基础也是最广泛使用的方法之一,希望这些直接的步骤能帮助你避免系统崩溃的尴尬。
本文由瞿欣合于2026-01-19发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/83525.html
