phpMyAdmin不感知主从拓扑,仅通过config.inc.php中连续索引的$cfg['Servers'][$i]手动配置多个独立节点,如主库设为[1]、从库分别设为2,并需在MySQL侧启用read_only、授予REPLICATION CLIENT权限才能正确显示复制状态。

phpMyAdmin 本身不支持主从拓扑感知,也不能自动路由读写请求——它只是个单实例连接界面。所谓“配置多个节点”,本质是手动添加多个独立服务器条目,分别指向主库、从库,彼此完全隔离。
如何在 config.inc.php 中添加多个 MySQL 服务器入口
phpMyAdmin 通过 $cfg['Servers'][$i] 数组定义每个可选连接,$i 是递增索引(从 1 开始)。你要连主库和两个从库,就配三项:
- 主库条目:
$cfg['Servers'][1]['host'] = '192.168.88.53'; $cfg['Servers'][1]['port'] = 3306;,并设$cfg['Servers'][1]['verbose'] = 'Master (Write)'; - 从库1条目:
$cfg['Servers'][2]['host'] = '192.168.88.54'; $cfg['Servers'][2]['port'] = 3306;,$cfg['Servers'][2]['verbose'] = 'Slave-1 (Read)'; - 从库2条目:
$cfg['Servers'][3]['host'] = '192.168.88.55'; $cfg['Servers'][3]['port'] = 3307;(若端口不同),$cfg['Servers'][3]['verbose'] = 'Slave-2 (Read)';
注意:所有 server-id、log-bin 等必须在 MySQL 自身的 my.cnf 里配好,phpMyAdmin 不参与复制协议配置。
为什么连上从库后还能执行 INSERT?
这是最常被忽略的安全漏洞:从库的 read_only 没真正生效。常见原因有三个:
立即学习“PHP免费学习笔记(深入)”;
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
-
SET GLOBAL read_only = ON是临时设置,MySQL 重启即失效;必须写进my.cnf的[mysqld]段并重启服务 - 账号有
SUPER权限,会绕过read_only限制;需显式回收:REVOKE SUPER ON *.* FROM 'your_user'@'%'; - MySQL 5.7.8+ 建议启用
super_read_only = ON,它连SUPER用户也禁止写入
验证是否生效:在 phpMyAdmin 的 SQL 标签页执行 SELECT @@read_only;,返回 1 才算成功。
如何让“复制”标签页显示从库状态?
phpMyAdmin 的“复制”页面依赖 SHOW SLAVE STATUS,但它不会自动给你授权。即使你勾选了 UI 里的“复制客户端”权限,也不会生成对应 GRANT 语句。
- 必须在从库的命令行或 phpMyAdmin SQL 标签页中手动执行:
GRANT REPLICATION CLIENT ON *.* TO 'your_user'@'%'; FLUSH PRIVILEGES; - 只给
REPLICATION SLAVE不够,REPLICATION CLIENT是单独权限 - 这个授权只需在从库上做,不需要在主库重复授予
授完权后刷新 phpMyAdmin 页面,点顶部“复制”标签,才能看到 Seconds_Behind_Master 等关键指标。
真正容易被忽略的是:phpMyAdmin 的多服务器配置只是“列表展示”,它不会帮你判断哪个节点延迟高、哪个不可用,也不会在主库宕机时自动切到从库——这些逻辑必须由中间件(如 ProxySQL)或应用层兜底。靠 phpMyAdmin 管理主从,仅适合人工巡检和临时调试。


















