MySQL 运维
主从复制
主库配置 /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin
binlog_format = ROW # 推荐 ROW 格式
gtid_mode = ON # 启用 GTID
enforce_gtid_consistency = ON
sync_binlog = 1 # 每次事务刷盘
主库创建复制账号
CREATE USER 'repl'@'10.0.%' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.%';
从库配置复制
CHANGE MASTER TO
MASTER_HOST='10.0.1.10',
MASTER_USER='repl',
MASTER_PASSWORD='strong_password',
MASTER_AUTO_POSITION=1; -- GTID 模式
START SLAVE;
SHOW SLAVE STATUS\G -- 检查 Seconds_Behind_Master
备份与恢复
| 方式 | 工具 | 特点 |
|---|---|---|
| 逻辑备份 | mysqldump | 可读 SQL,慢,适合小库 |
| 物理备份 | xtrabackup | 热备,快速,适合大库 |
| Binlog 备份 | mysqlbinlog | 增量备份,PITR |
xtrabackup 全量备份 + 恢复
# 全量备份
xtrabackup --backup --target-dir=/backup/full \
--user=root --password=xxx
# 准备恢复(应用 redo log)
xtrabackup --prepare --target-dir=/backup/full
# 恢复(停止 MySQL 后)
xtrabackup --copy-back --target-dir=/backup/full
chown -R mysql:mysql /var/lib/mysql
PITR 恢复(时间点恢复)
# 先恢复全量备份,再回放 binlog 到指定时间点
mysqlbinlog --stop-datetime="2024-01-15 10:30:00" \
/var/log/mysql/mysql-bin.000042 | mysql -u root -p
慢查询优化
开启慢查询日志
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1 # 超过 1 秒记录
log_queries_not_using_indexes = ON
# 分析慢查询日志
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
# pt-query-digest 更详细的分析
pt-query-digest /var/log/mysql/slow.log --limit=20
关键参数调优
| 参数 | 推荐值 | 说明 |
|---|---|---|
innodb_buffer_pool_size | 物理内存 60-80% | InnoDB 缓冲池,最重要的参数 |
innodb_log_file_size | 1-2GB | redo log 大小 |
max_connections | 按需,200-1000 | 最大连接数 |
innodb_flush_log_at_trx_commit | 1(安全)或 2(性能) | 事务日志刷盘策略 |
sync_binlog | 1 | binlog 刷盘策略 |
innodb_io_capacity | 按磁盘性能,SSD 可设 2000+ | IO 吞吐量 |
常见面试问题
Q1: 主从复制延迟怎么解决?
答案:
- 并行复制:
slave_parallel_workers = 8,slave_parallel_type = LOGICAL_CLOCK开启多线程回放 - 优化大事务:拆分批量 UPDATE/DELETE,避免单事务过大
- 升级硬件:从库用 SSD,提升 IO 能力
- 监控:
Seconds_Behind_Master+ Prometheus 告警
Q2: innodb_flush_log_at_trx_commit 各值的区别?
答案:
| 值 | 行为 | 数据安全 | 性能 |
|---|---|---|---|
| 1 | 每次事务提交刷盘 | 最安全 | 最慢 |
| 2 | 每次事务写入 OS 缓存,每秒刷盘 | 掉电丢 1 秒 | 较快 |
| 0 | 每秒写入 + 刷盘 | 掉电丢 1 秒 | 最快 |
生产环境一般设为 1(金融等高可靠场景)或 2(普通业务,性能优先)。