在 Linux 上搭建 MySQL 高可用架构的可落地方案
一、方案选型与适用场景
一主多从 + 读写分离 + VIP/HAProxy/Keepalived
双主互备(Active/Standby)+ Keepalived
双主双从(或一主多从扩展)
同步多主(Galera Cluster / MySQL Cluster)
二、快速落地 主从复制 + Keepalived 高可用
架构要点
主库配置(示例)
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = your_db # 可选:仅复制指定库
CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPass!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; -- 记录 File 与 Position
UNLOCK TABLES;
从库配置(示例)
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log # 便于级联复制
read_only = 1
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='StrongPass!',
MASTER_LOG_FILE='mysql-bin.000001', -- 替换为 SHOW MASTER STATUS 的 File
MASTER_LOG_POS=123; -- 替换为 Position
START SLAVE;
SHOW SLAVE STATUS\G
-- 确保 Slave_IO_Running=Yes、Slave_SQL_Running=Yes
高可用接入(VIP 示例)
三、进阶 双主互备 + Keepalived 自动切换
适用前提
MySQL 关键配置(双主)
[mysqld]
gtid_mode = ON
enforce_gtid_consistency = TRUE
log-bin = /binlog/bin
binlog_format = ROW
sync_binlog = 1
log-slave-updates = 1
auto_increment_increment = 2
auto_increment_offset = 1 # 另一台设为 2
Keepalived 要点
mysqladmin ping 或执行轻量 SQL。四、一致性、切换与运维要点
复制一致性
enforce_gtid_consistency;对关键库表开启半同步降低数据丢失风险;从库设置 read_only=1 防止误写。切换与脑裂防护
监控与备份