悠悠楠杉
Ubuntu下MySQL主从同步配置全指南:高可用架构实战
一、为什么需要主从同步?
在线上业务场景中,数据库单点故障是致命风险。通过主从同步可实现:
- 读写分离:主库写,从库读,提升并发能力
- 数据灾备:从库作为实时备份节点
- 负载均衡:分散查询压力
- 无缝升级:从库先升级验证后再切换
二、环境准备
假设我们有两台Ubuntu 22.04服务器:
- 主库Master:192.168.1.100
- 从库Slave:192.168.1.101
bash
两台服务器均执行
sudo apt update
sudo apt install mysql-server -y
sudo systemctl start mysql
三、主库(Master)配置
1. 修改MySQL配置文件
bash
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
关键参数调整:
ini
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
binlog_do_db = your_database # 需要同步的数据库
bind-address = 0.0.0.0
2. 创建复制账号
sql
mysql> CREATE USER 'replica'@'%' IDENTIFIED BY 'StrongPassword123!';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
mysql> FLUSH PRIVILEGES;
3. 获取主库状态
sql
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
记录返回的File和Position值(如mysql-bin.000001 / 154)
四、从库(Slave)配置
1. 修改配置文件
ini
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin
read_only = 1
2. 配置主从连接
sql
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.100',
-> MASTER_USER='replica',
-> MASTER_PASSWORD='StrongPassword123!',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=154;
3. 启动复制
sql
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
检查Slave_IO_Running
和Slave_SQL_Running
是否为Yes
五、验证与监控
1. 测试数据同步
在主库创建测试表:
sql
CREATE TABLE sync_test(id INT PRIMARY KEY);
INSERT INTO sync_test VALUES(1);
从库查询验证数据一致性
2. 监控命令
sql
-- 主库查看连接进程
SHOW PROCESSLIST;
-- 从库延迟监控
SHOW SLAVE STATUS\G
六、常见问题排查
连接失败:
- 检查防火墙:
sudo ufw allow 3306
- 验证授权:
SELECT user,host FROM mysql.user
- 检查防火墙:
复制中断:
sql STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
数据不一致:
使用pt-table-checksum工具校验
七、性能优化建议
主库配置:
ini sync_binlog=1 innodb_flush_log_at_trx_commit=1
从库配置:
ini slave_parallel_workers=4 # 并行复制线程数
网络优化:
- 主从服务器同机房部署
- 使用千兆以上内网连接
结语
MySQL主从同步看似简单,但实际部署中会遇到各种"坑"。建议先在测试环境演练,重点掌握以下技能:
- 通过SHOW SLAVE STATUS
解读复制状态
- 掌握基于GTID的复制配置
- 学会使用mysqldump进行数据修复
在完成基础配置后,可以进一步探索级联复制、半同步复制等高级架构,构建更健壮的数据库体系。