MySQL 报错 Error 1290?LOCK_WRITE_GROWTH 导致无法写入的解决姿势
最近在折腾数据库或者迁移服务的时候,有没有突然碰上这种报错?
提示 LOCK_WRITE_GROWTH 导致无法写入的报错信息
Error 1290 (HY000): The MySQL server is running with the LOCK_WRITE_GROWTH option so it cannot execute this statement
看到这行报错,尤其是那句“LOCK_WRITE_GROWTH”,很多新手朋友可能会瞬间懵圈:我是谁?我在哪?我的数据库怎么突然把自己锁死了?
别急,这不是数据库坏了,也不是中了病毒。这其实是 MySQL 的一个自我保护机制。今天就来聊聊这个错误到底是个啥,以及我们该如何快速优雅地解决它。
LOCK_WRITE_GROWTH 是个什么鬼?
简单来说,这个选项就像是给数据库挂了一把“只读锁”。当 MySQL 启动时带上了 --read-only 或者特定的系统变量被设置时,为了防止数据被意外篡改,服务器会拒绝写入操作(比如 INSERT、UPDATE、CREATE TABLE 等)。
通常我们在维护数据库、进行主从切换或者做全量备份恢复时,为了保证数据一致性,会故意开启这种“只读模式”。但如果维护完忘了关,或者你是从别处导出的数据导入到了一个新的环境里,这个锁的状态可能就被继承下来了,导致你以为能随便写,结果却一写入就报 1290 错误。
常见掉坑场景
- 从备份恢复数据:你用
mysqldump备份出来的文件里,可能包含了一些设置系统变量的语句。如果备份时数据库处于“防止写入增长”的状态,恢复时这些设置可能也会被带过来。 - 主从复制异常:在从库上,有时候为了防止误操作,默认会开启只读。如果你试图在从库写入数据,就会收到这个“大善人的劝退”。
- 云数据库快照:某些云厂商的只读实例或者快照恢复后的实例,默认开启写保护,需要手动解除。
三步极速修复教程
既然知道了原因,解决办法就很简单了:我们要告诉 MySQL,“安全了,可以打开写入权限了”。
第一步:登录数据库
使用你的管理员账号(通常是 root)登录 MySQL 客户端:
mysql -u root -p
第二步:检查当前状态(可选)
你可以先看看当前的 read_only 变量是不是开着:
SHOW VARIABLES LIKE 'read_only';
如果是 ON,那就没跑了。
第三步:解锁写入权限
直接执行以下 SQL 语句,重新激活写入能力:
SET GLOBAL read_only = OFF;
执行完这条命令后,再去试试你的 INSERT 或者 UPDATE 语句,通常就能顺滑通过了。
注意:如果是因为
super_read_only导致的(常见于主从架构中的从库),你可能还需要顺便把它也关掉:SET GLOBAL super_read_only = OFF;
总结
Error 1290 其实是个很常见的“假故障”,它不是数据库挂了,而是数据库为了你的数据安全太“尽职”了。遇到这个报错,只要检查一下全局读写锁的设置,一句 SQL 就能搞定。
下次再看到“大善人”锁库,记得先别慌,看看是不是忘了关 read_only!

评论已关闭