根本原因是MySQL实例的read_only或super_read_only为ON,phpMyAdmin据此主动禁用写入;需执行SELECT @@global.read_only, @@global.super_read_only;确认真实状态,二者均为1才表明数据库层真正只读。
phpmyadmin 连接远程从库时显示只读警告,根本原因不是 phpmyadmin 本身限制了写入,而是它检测到 mysql 实例的 read_only 或 super_read_only 系统变量为 on(即值为 1),于是主动禁用写操作入口并弹出提示。这个行为是合理的,但容易让人误以为是 phpmyadmin 配置问题。
确认 MySQL 实例是否真处于只读状态
别信界面提示,先连进远程从库查真实值:
- 用命令行或 MySQL 客户端连接该从库:
mysql -h remote_ip -uroot -p - 执行:
SELECT @@global.read_only, @@global.super_read_only; - 若返回结果含
1,说明 MySQL 层面已设为只读;若都是0,问题在别处(比如用户权限、SQL 线程卡死、磁盘满)
SET GLOBAL read_only = OFF 不生效?重点查三件事
即使你用 root 执行了 SET GLOBAL read_only = OFF,查出来还是 1,大概率是以下原因之一:
-
my.cnf或my.ini配置文件里写了read_only = 1(或super_read_only = 1),且该配置在启动时被加载——这种写死的设置会覆盖运行时修改,必须删掉或注释后重启 MySQL 进程(不是 phpMyAdmin 重载,是杀掉 mysqld 再启) - 你当前登录的账号没有
SUPER权限:执行SELECT super_priv FROM mysql.user WHERE user='root' AND host='%';,确认返回Y;否则需用更高权限账号修复,或重装/重配 MySQL - MySQL 版本低于 5.7.8:不支持
super_read_only,但若配置中误加了该参数,MySQL 会忽略它,而read_only仍按配置生效——优先盯死read_only
phpMyAdmin 显示只读,但你其实想读写主库?注意连接目标别搞错
很多用户误把 phpMyAdmin 的「同步」功能当成「连接」功能,结果连的是从库地址却想改数据:
- 检查 phpMyAdmin 的
config.inc.php中$cfg['Servers'][$i]['host']是否指向了从库 IP(如192.168.1.10:3307),而不是主库 - 如果确需对主库操作,请单独配置一个新服务器条目,
host指向主库,且确保该账号有写权限(GRANT INSERT, UPDATE, DELETE ON `db`.* TO 'user'@'%'...) - phpMyAdmin 的「数据库同步」功能本身不改变连接目标,它只是发起导出+导入动作,底层仍走你当前选中的那个服务器连接
最常被忽略的一点:从库的 read_only = 1 是 MySQL 复制机制的默认保护策略,强行关掉可能破坏主从一致性。如果你真需要临时写入,务必确认这是运维侧明确允许的操作,而非开发随手关闭。
立即学习“PHP免费学习笔记(深入)”;



















