PageAdmin数据库读写分离配置

PageAdmin 默认使用单库读写,当站点访问量上涨后,数据库往往先成为瓶颈。
数据库读写分离是把写操作和读操作分发到不同数据库服务器,从而提升整体吞吐量。
下面从零开始,一步步完成 PageAdmin 的读写分离配置,适合有一定 Linux 基础但没接触过主从复制的站长。

动手前的环境确认

开始前需要准备两台(或以上)MySQL 服务器,一台作为主库(写库),一台作为从库(读库)。
如果只有一台物理机,可以用两个 MySQL 实例,端口区分,但生产环境建议独立服务器。

确认以下条件:

  • 主从服务器时间同步,建议启用 NTP。
  • 主从 MySQL 版本一致,避免复制兼容问题。
  • 主库开启 binlog,且 server-id 唯一。
  • 从库能通过网络访问主库的 3306 端口。
  • PageAdmin 使用 MySQL 数据库,并且你拥有数据库的 root 或等效权限。

本文以 MySQL 5.7 为例,其他版本命令可能略有差异,建议以官方文档为准。

搭建 MySQL 主从复制

读写分离的基础是主从复制,先让从库能实时同步主库数据。

主库配置

编辑主库配置文件 my.cnf(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf),在 [mysqld] 段添加:

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

保存后重启 MySQL:

systemctl restart mysqld

登录主库,创建用于复制的账号并授权:

CREATE USER 'repl'@'%' IDENTIFIED BY 'YourStrongPassword';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

查看主库状态,记录 File 和 Position 值:

SHOW MASTER STATUS;

从库配置

编辑从库配置文件,添加:

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

重启从库 MySQL。
然后在从库执行:

CHANGE MASTER TO
  MASTER_HOST='主库IP',
  MASTER_USER='repl',
  MASTER_PASSWORD='YourStrongPassword',
  MASTER_LOG_FILE='记录的主库File值',
  MASTER_LOG_POS=记录的主库Position值;
START SLAVE;

检查复制状态,确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes:

SHOW SLAVE STATUS\G

如果出现错误,检查网络、账号密码和防火墙。

修改 PageAdmin 数据库配置

PageAdmin 的数据库连接字符串通常在站点根目录的 web.config 或 appsettings.json 中。
不同版本位置可能不同,建议先搜索 connectionString。

方案一:利用连接字符串的读写分离

部分 PageAdmin 版本支持在连接字符串中指定多个服务器,但需要驱动支持。
更通用的做法是修改代码或使用中间件。

如果 PageAdmin 没有内置读写分离,可以尝试修改数据库连接字符串,让读操作走从库。
例如在 web.config 中:


  
  

但 PageAdmin 默认只读取一个连接字符串,所以需要进一步调整代码,让读操作使用 ReadConnection。
如果不想改代码,可以使用 MySQL 中间件(如 ProxySQL)来转发。

方案二:使用 MySQL Router 或 ProxySQL

对于不想改代码的用户,推荐使用 ProxySQL 或 MySQL Router 做透明读写分离。
以 ProxySQL 为例,在 PageAdmin 中仍然配置连接 ProxySQL 的地址,由 ProxySQL 根据 SQL 语句自动路由。

安装 ProxySQL 后,添加主从服务器,并配置查询规则:

INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, '主库IP', 3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, '从库IP', 3306);
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

然后设置读写分离规则,将 SELECT 语句发往 hostgroup 20(从库),其余发往 hostgroup 10(主库)。
具体规则可参考 ProxySQL 官方文档。

修改 PageAdmin 连接字符串指向 ProxySQL 的 IP 和端口(默认 6033),然后重启站点。

避坑指南

  • 主从复制延迟:从库同步有延迟,如果对实时性要求高,可以在关键读操作后强制走主库。
  • 从库只读:确保从库设置了 read-only,避免误写导致数据不一致。
  • 连接字符串权限:用于复制的账号和 PageAdmin 使用的账号要分开,遵循最小权限原则。
  • 防火墙:主从之间 3306 端口必须互通,云服务器安全组也要放行。
  • PageAdmin 缓存:开启读写分离后,如果 PageAdmin 有缓存机制,注意缓存更新时机,避免读到旧数据。

验证读写分离是否生效

完成配置后,通过以下方法验证:

  1. 在 PageAdmin 后台发布一篇新文章,然后在前台刷新查看。如果文章立即显示,说明写库正常,读库可能也有同步(但可能有延迟)。
  2. 直接连接从库,查询刚发布的数据,确认是否已同步。
  3. 查看 ProxySQL 的统计信息,确认 SELECT 语句被路由到从库。
  4. 使用 SHOW PROCESSLIST 在主从库观察连接来源。

如果发现所有查询都走主库,检查 ProxySQL 规则或 PageAdmin 代码是否正确。

常见疑问

读写分离后,PageAdmin 后台登录异常怎么办?
后台登录涉及写操作(记录会话),确保登录请求走主库。检查 ProxySQL 规则是否将 INSERT/UPDATE 正确路由。

从库同步失败如何排查?
在从库执行 SHOW SLAVE STATUS\G,查看 Last_Error 字段。常见原因包括主库 binlog 被清理、账号权限不足、网络中断。

必须用 ProxySQL 吗?
不是。如果熟悉代码,可以直接修改 PageAdmin 的数据库访问层,在读取时使用从库连接。ProxySQL 适合不想改代码的场景。

读写分离能提升多少性能?
取决于读写比例和从库数量。通常读多写少的站点提升明显,但也要考虑主从延迟和架构复杂度。

按照以上步骤操作后,你的 PageAdmin 站点应该能承受更高的并发访问。
如果遇到问题,优先检查主从复制状态和路由规则。

分享到:
上一篇
PageAdmin多语言站点搭建
下一篇
Discuz论坛手机版模板美化,移动端适配
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意