如何在 Ubuntu 22.04 香港服务器上从零搭建 MySQL 8 主从复制与性能优化完整教程
本文基于最新 MySQL 8 与 Ubuntu 22.04 LTS,A5数据结合实战经验与性能优化策略,逐步讲解如何在两台香港服务器(Master 与 Slave)上从零搭建高可用的主从复制系统,并进行性能调优验证。文章重点覆盖硬件选型、系统配置、MySQL 参数设定、复制策略(GTID)、性能评测与优化策略。
一、方案概览与硬件配置建议
在跨境电商、订单系统等高并发场景下,数据库读写分离与性能优化至关重要。主从复制可将写与读分离、提高可用性、实现故障快速切换。
推荐香港服务器www.a5idc.com硬件配置(参考香港 BGP & CN2 带宽环境)
| 项目 | Master | Slave |
|---|---|---|
| CPU | 8 核 Intel Xeon / AMD EPYC | 8 核 Intel Xeon / AMD EPYC |
| 内存 | 32GB DDR4 | 32GB DDR4 |
| 存储 | 1TB NVMe SSD | 1TB NVMe SSD |
| 带宽 | 500Mbps~1Gbps BGP & CN2 | 500Mbps~1Gbps BGP & CN2 |
| 操作系统 | Ubuntu 22.04 LTS x64 | Ubuntu 22.04 LTS x64 |
该配置在中高负载业务中具备足够的 I/O 与计算能力,同时网络延迟适配香港机房优势。
二、MySQL 8 安装与基础配置
在 Master 与 Slave 上均进行如下步骤。
2.1 安装 MySQL 8
sudo apt update
sudo apt install -y mysql-server
mysql --version
确认 MySQL 版本为 8.0。
2.2 MySQL 基础安全设置
执行:
sudo mysql_secure_installation
按需配置 root 密码、移除匿名用户、禁用远程 root 登录、移除测试数据库。
三、主从复制基本原理与 GTID
MySQL 8 倾向使用 GTID(Global Transaction ID)方式进行复制管理,相比旧的基于文件/位置复制更可靠。
GTID 使得主从在故障恢复时能自动定位复制起点,与 binlog_format=ROW 配合使得数据一致性更高。
四、Master 配置步骤
4.1 配置 MySQL 参数
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
server-id=1
log_bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
expire_logs_days=7
max_binlog_size=1G
4.2 重启并验证
sudo systemctl restart mysql
sudo mysql -e "SHOW GLOBAL VARIABLES LIKE 'gtid_mode';"
sudo mysql -e "SHOW GLOBAL VARIABLES LIKE 'server_id';"
确保 gtid_mode=ON。
4.3 创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongReplPass2026';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
4.4 初始化备份
为了初始化 Slave,需要导出当前数据:
sudo mysqldump --all-databases --master-data=2 --single-transaction --triggers --routines --events > /root/mysql_initial.sql
注:使用 --master-data=2 会将 Master 状态注入 SQL 注释中。
五、Slave 配置步骤
5.1 参数配置
在 Slave 的 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
server-id=2
log_bin=mysql-bin
relay_log=relay-bin
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
read_only=ON
5.2 导入数据与配置
sudo systemctl restart mysql
mysql < /root/mysql_initial.sql
从导出的文件中获取 Master 的 binlog 位点(通过读注释部分)。
5.3 配置复制
基于 GTID 的复制指令
CHANGE MASTER TO
MASTER_HOST='MASTER_IP',
MASTER_USER='repl',
MASTER_PASSWORD='StrongReplPass2026',
MASTER_AUTO_POSITION=1;
START SLAVE;
5.4 验证复制状态
SHOW SLAVE STATUS\G
确保 Slave_IO_State 正常且 Seconds_Behind_Master 为数字(非 NULL)。
六、读写分离与负载分担(可选)
主库处理写,读库处理 SELECT 查询。可在应用层(如 ProxySQL、MaxScale)或应用代码层实现。
示例 ProxySQL 配置片段:
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (10, 'MASTER_IP', 3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (20, 'SLAVE_IP', 3306);
七、性能优化策略
7.1 系统级(Ubuntu)
调整内核参数
编辑 /etc/sysctl.conf:
net.core.somaxconn=65535
net.ipv4.tcp_tw_reuse=1
vm.swappiness=10
应用:
sudo sysctl -p
文件描述符
编辑 /etc/security/limits.conf:
mysql soft nofile 65535
mysql hard nofile 65535
7.2 MySQL 参数优化
为不同负载制定不同配置,此处给出适合中高负载实例的配置建议:
| 参数 | 建议值 | 说明 |
|---|---|---|
| innodb_buffer_pool_size | 24G | 适配 32G 内存(约 75%) |
| innodb_log_file_size | 1G | 提高写入性能 |
| innodb_flush_method | O_DIRECT | 避免 double buffering |
| max_connections | 500 | 支持并发 |
| query_cache_type | OFF | MySQL 8 默认取消查询缓存 |
在 /etc/mysql/mysql.conf.d/innodb.cnf 内添加:
innodb_buffer_pool_size=24G
innodb_log_file_size=1G
innodb_flush_method=O_DIRECT
max_connections=500
变更
innodb_log_file_size需先删除旧日志文件(参见 MySQL 官方文档步骤)。
八、性能验证与业务场景测试
8.1 测试工具
使用 sysbench 进行压力测试。
安装:
sudo apt install -y sysbench
8.2 读写测试方案
准备数据
sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host=MASTER_IP --mysql-user=root --mysql-db=test \
--threads=50 --tables=10 --table-size=100000 prepare
读写混合测试
sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host=MASTER_IP --mysql-user=root --mysql-db=test \
--threads=50 --tables=10 --table-size=100000 \
--time=300 run
Slave 读测试
sysbench /usr/share/sysbench/oltp_read_only.lua \
--mysql-host=SLAVE_IP --mysql-user=root --mysql-db=test \
--threads=50 --tables=10 --table-size=100000 \
--time=300 run
8.3 典型测试结果
| 测试项 | TPS | 平均延迟(ms) | 说明 |
|---|---|---|---|
| Master 读写混合 | 6,800 | 45 | 主库压力测试 |
| Slave 只读 | 14,500 | 22 | 从库读性能 |
| 复制延迟 | - | 0.5~1.2s | 有实际业务负载下延迟 |
说明:在 NVMe SSD、32GB 内存配置下,读写分离可显著提升只读吞吐。
九、高可用与故障恢复策略
9.1 自动故障检测
结合 Orchestrator、MHA 集群管理实现主库故障自动提升。
9.2 手动故障切换
当 Master 故障,可在 Slave 上执行:
STOP SLAVE;
RESET SLAVE ALL;
再配置其他 Slave 为新的 Master,并以 GTID 自动定位。
十、安全性与监控
10.1 SSL 复制(可选)
生成证书并在 Master/Slave 上配置:
require_secure_transport=ON
并为复制账号启用 REQUIRE SSL。
10.2 监控方案
- Prometheus + mysqld_exporter
- Grafana 可视化主从延迟、TPS、QPS、InnoDB 状态
十一、总结
A5数据基于 Ubuntu 22.04 与 MySQL 8 构建了一个稳定、性能可控的主从复制集群,从基础安装、安全设置、GTID 复制、性能优化、到实际负载测试全覆盖。适用于电商订单库、用户行为库等业务场景。结合香港低延迟带宽,可在跨境业务中提供高可用读写分离能力。
如需进一步扩展至多节点拓扑或 Proxy 层读写分离集成配置,可在此基础上继续构建。欢迎基于自身业务特性进一步调整参数配置与优化策略。

浙公网安备 33010602011771号