MySQL高可用架构实战:备份恢复、主从复制、读写分离与MHA
一、MySQL备份与恢复
1.1 备份分类
- 物理备份:直接复制数据库文件(冷备、热备、温备)。
- 逻辑备份:导出SQL语句(如mysqldump)。
- 增量备份:基于二进制日志。
1.2 冷备份(物理冷备)
systemctl stop mysqld
tar czf /backup/mysql-backup-$(date +%F).tar.gz /var/lib/mysql
systemctl start mysqld
# 恢复时停止服务,解压覆盖,修改权限后启动
1.3 逻辑备份(mysqldump)
# 备份单个数据库
mysqldump -u root -p school > /backup/school.sql
# 备份多个数据库
mysqldump -u root -p –databases school mysql > /backup/school_mysql.sql
# 备份所有数据库
mysqldump -u root -p –all-databases > /backup/all.sql
# 备份指定表
mysqldump -u root -p school student > /backup/student.sql
- 恢复:mysql -u root -p school < /backup/school.sql 或在mysql内 source /backup/student.sql
1.4 增量备份(基于binlog)
mysqlbinlog mysql-bin.000003 | mysql -u root -p
二、主从复制
2.1 核心原理
- binlog:主库记录所有变更。
- IO线程:从库请求并接收binlog,写入relay log。
- SQL线程:从库重放relay log。
2.2 配置步骤(基于5.7)
主库:
[mysqld]
server-id=1
log-bin=master-bin
log-slave-updates
创建复制用户:
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
SHOW MASTER STATUS; — 记录File和Position
从库:
[mysqld]
server-id=2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
执行:
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='myslave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=604;
START SLAVE;
SHOW SLAVE STATUS\\G; — 查看两个YES
三、读写分离(Amoeba中间件)
3.1 原理
- 应用连接Amoeba代理(端口8066)。
- Amoeba解析SQL,写操作(INSERT/UPDATE/DELETE)发往主库池,读操作(SELECT)发往从库池,并轮询负载均衡。
3.2 配置要点
- 安装JDK,解压Amoeba。
- 修改 conf/amoeba.xml:设置客户端认证账号、defaultPool、writePool、readPool。
- 修改 conf/dbServers.xml:定义后端MySQL节点(主库和从库地址、用户名密码、库名)。
- 启动Amoeba:/usr/local/amoeba/bin/amoeba start
- 客户端连接Amoeba:mysql -u amoeba -p123456 -h amoeba_ip -P 8066
四、MHA高可用
4.1 MHA概述
- 解决MySQL主从复制中主库单点故障,实现自动故障转移(0-30秒)。
- 组成:Manager(管理节点)+ Node(数据节点)。
- 原理:监控主库,宕机后从候选从库中选举新主库,并让其他从库指向新主库。
4.2 实验环境(一主两从)
| mysql-master | 192.168.108.131 | 主库,安装node |
| mysql-slave01 | 192.168.108.132 | 从库(候选主),安装node |
| mysql-slave02 | 192.168.108.133 | 从库,安装node |
| mha | 192.168.108.130 | 管理节点,安装node+manager |
4.3 配置步骤
masterha_check_ssh –conf=/etc/masterha/app1.cnf
masterha_check_repl –conf=/etc/masterha/app1.cnf
nohup masterha_manager –conf=/etc/masterha/app1.cnf \\
–remove_dead_master_conf –ignore_last_failover \\
< /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
4.4 故障模拟与恢复
- 停止主库MySQL:systemctl stop mysql
- MHA自动切换,VIP漂移到候选从库(slave01),其他从库重新指向新主库。
- 原主库恢复后,重新配置为从库指向新主库。
五、补充:MySQL 5.7源码编译安装
- 安装依赖:gcc, cmake, ncurses-devel, bison等。
- 下载MySQL源码和boost库。
- cmake指定安装路径、字符集、存储引擎、boost路径等。
- make && make install
- 初始化数据库:mysqld –initialize-insecure –user=mysql
- 配置systemd服务文件,设置环境变量。

