Linux下MySQL 1036错误码解决:Table is read only只读修复

清欢
清欢
发布时间:2026-10-15 | 5人浏览过
原创

在进行Linux服务器网站搬家或数据迁移时,直接将/usr/local/mysql/var下的数据目录上传并解压后,常会遇到#1036 – Table 'xxxx' is read only(表只读)的错误。该错误主要由操作系统文件权限不足或MySQL进程无法识别新文件的属主引起。

问题原因分析

MySQL服务通常需要以特定用户(如mysql)运行来访问数据文件。迁移后的文件往往保留了源服务器的权限设置(可能属于root或其他用户),或者权限位未被设置为允许MySQL读写。此外,由于数据是在线拷贝的,MySQL实例可能仍持有旧表的结构缓存或锁。

操作步骤

第1步:检查并修正文件权限

目的:确保MySQL进程具有对所有数据文件的完整读写操作权。
入口:SSH终端。
动作:使用chmod命令递归设置文件夹及内部文件的权限。
参数说明:此处以赋予最高权限0777为例,生产环境建议根据安全规范设置更严格的权限(如0750配合正确的属主)。
假设数据库名为admin,路径为/usr/local/mysql/var/admin/。

# 替换路径中的 admin 为你的实际数据库文件夹名
chmod -R 0777 /usr/local/mysql/var/admin/

第2步:修改目录属主与属组

目的:让操作系统确认这些文件现在归MySQL服务用户管理,这是解决1036错误的核心步骤。
入口:SSH终端。
动作:使用chown命令更改所有权。
参数:将所有者和组均设为mysql。

# 进入数据库目录所在层级(示例中已在var目录下操作)
# 如果脚本直接指定了绝对路径,请调整对应位置
cd /usr/local/mysql/var/
chown -R mysql:mysql admin

第3步:刷新MySQL表锁定状态

目的:告知正在运行的MySQL实例重新加载文件状态,清除可能的只读标记或锁。
入口:SSH终端,需知道mysqladmin的位置。
动作:执行flush-tables命令。
注意:通常mysqladmin位于/usr/bin/mysqladmin或安装目录下的bin子目录(如/usr/local/mysql/bin)。

# 如果不在默认PATH下,需写全路径
/usr/local/mysql/bin/mysqladmin -u root -p flush-tables

输入root用户的密码后,若无报错提示即表示成功。随后再次尝试插入或更新数据,表应恢复正常读写。

完成判断

执行完上述三步后,通过客户端执行一条简单的测试写入语句(如INSERT或UPDATE),若不再提示1036 Table '...' is read only,则修复成功。

排错补充

  • 权限未生效:如果修改属主后依然报只读,请检查/etc/my.cnf中是否有read-only参数配置,或通过ps aux | grep mysql查看当前运行的MySQL进程所属用户是否正确。
  • 磁盘空间:确认/usr/local/mysql/var所在分区没有满,空间满有时也会表现为无法写入。

以上就是针对Linux环境下MySQL #1036 Table is read only错误的详细修复方案,更多关于MySQL权限管理与Linux运维的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表