如何在 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 层读写分离集成配置,可在此基础上继续构建。欢迎基于自身业务特性进一步调整参数配置与优化策略。

posted @ 2026-01-15 11:02  A5IDC  阅读(10)  评论(0)    收藏  举报