外贸站宝塔面板数据库读写分离配置教程
外贸站宝塔面板数据库读写分离配置教程
当外贸站流量增长时,单台数据库容易成为瓶颈。
读写分离将查询请求分散到从库,写操作仍在主库,能有效降低主库负载。
本文以宝塔面板为例,从零开始完成配置,即使没接触过主从复制也能跟着做。
准备工作:你需要什么?
- 两台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_Running和Slave_SQL_Running均为Yes。
第二步:在WordPress中启用读写分离
外贸站若使用WordPress,有三种常见方式实现读写分离:
方法一:使用插件WPSCHOOL或HyperDB(推荐新手)
- 安装并启用“HyperDB”插件(WPSCHOOL也有类似功能)。
- 在插件设置中添加主库和从库连接信息,注意从库可设置多个。
- 保存后,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)方法类似,核心是让应用程序识别多数据库。
希望这篇教程能帮你的外贸站扛住流量高峰。