外贸站宝塔面板数据库读写分离配置教程

外贸站宝塔面板数据库读写分离配置教程

当外贸站流量增长时,单台数据库容易成为瓶颈。
读写分离将查询请求分散到从库,写操作仍在主库,能有效降低主库负载。
本文以宝塔面板为例,从零开始完成配置,即使没接触过主从复制也能跟着做。

准备工作:你需要什么?

  • 两台Linux服务器(主库+从库),均已安装宝塔面板,且MySQL版本一致(推荐5.7或8.0)。
  • 域名或IP能互相访问,确认防火墙放行MySQL端口(默认3306)。
  • 外贸站程序以WordPress为例,其他CMS原理类似。
注意:如果只有一台服务器,可在云服务商处购买最低配实例作为从库,成本很低。

第一步:配置MySQL主从复制

在主库和从库的宝塔面板中分别进入“数据库”->“MySQL管理”->“配置修改”。

主库设置

找到my.cnf文件,在[mysqld]段追加以下内容:

server-id = 1
log-bin = mysql-bin
binlog-format = ROW
expire_logs_days = 7

保存后重启MySQL。

然后在主库中创建复制用户:

CREATE USER 'repl'@'%' IDENTIFIED BY '你的密码';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

记录当前二进制日志位置:执行SHOW MASTER STATUS;,记下File和Position值。

从库设置

同样修改my.cnf,追加:

server-id = 2
relay-log = mysql-relay-bin
read-only = 1

重启MySQL。
然后执行以下命令连接主库(将MASTER_LOG_FILE和MASTER_LOG_POS换成上一步记录的值):

CHANGE MASTER TO
  MASTER_HOST='主库IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='你的密码',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=123;

START SLAVE;

查看从库状态:SHOW SLAVE STATUS\G;,确认Slave_IO_RunningSlave_SQL_Running均为Yes。

第二步:在WordPress中启用读写分离

外贸站若使用WordPress,有三种常见方式实现读写分离:

方法一:使用插件WPSCHOOL或HyperDB(推荐新手)

  1. 安装并启用“HyperDB”插件(WPSCHOOL也有类似功能)。
  2. 在插件设置中添加主库和从库连接信息,注意从库可设置多个。
  3. 保存后,WordPress会自动将查询请求分发到从库。

方法二:手动编辑wp-config.php(更可控)

wp-config.php中添加以下代码(放在注释/* That's all, stop editing!
*/
之前):

$wpdb->add_database(array(
    'host'     => '从库IP',
    'port'     => 3306,
    'user'     => '数据库用户',
    'password' => '数据库密码',
    'name'     => '数据库名',
));

该方法仅将所有查询发到从库,写操作可能出错。
更严谨的方式是配合define('DB_HOST', '主库IP');并安装HyperDB。

推荐初学者直接使用HyperDB插件,它的官网文档详细且稳定。

第三步:避坑与常见问题

主从同步延迟导致前台显示旧数据

  • 检查从库Seconds_Behind_Master是否持续增大,若大于0说明延迟。
  • 优化主库慢查询,使用pt-query-digest分析日志。
  • 在WordPress中,可将重要查询强制走主库:使用$wpdb->query()代替$wpdb->get_results()

防火墙未放行端口

宝塔安全组需添加Mysql端口规则:点击左侧“安全”->“防火墙”->“添加端口规则”,放行3306,来源写主/从库IP。

用户密码或权限错误

创建复制用户时尽量使用'repl'@'%',确保从库能用IP直接连接。
测试连接命令:mysql -h 主库IP -u repl -p

第四步:验证读写分离是否生效

方法一:查看从库查询日志

在从库MySQL中执行:

SET GLOBAL general_log = ON;
SET GLOBAL log_output = 'TABLE';
SELECT * FROM mysql.general_log ORDER BY event_time DESC LIMIT 10;

如果看到频繁的SELECT查询(来自外贸站),说明读写分离正在工作。

方法二:通过WordPress Debug日志

wp-config.php中启用调试:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);

访问前台页面后,查看/wp-content/debug.log,日志中会显示查询来源(如果插件记录了)。

方法三:在宝塔面板观察连接数

分别登录主库和从库的宝塔数据库管理页面,查看“实时连接数”。
如果从库连接数明显增加,说明查询已分流。

总结

读写分离并非一步到位,配置后要持续关注主从延迟和查询分布。
如果你遇到同步中断或数据不一致,可先在从库上STOP SLAVE;然后重新CHANGE MASTER。
本文仅针对WordPress外贸站,其他CMS(如Magento、Shopify)方法类似,核心是让应用程序识别多数据库。
希望这篇教程能帮你的外贸站扛住流量高峰。

分享到:
上一篇
跨境独立站宝塔面板防火墙拦截恶意IP访问
下一篇
家用住宅主机Linux容器自启动服务器重启恢复
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意