表是'只读'

问题描述 投票:24回答:9

当我想在我的桌子上执行update查询时,我收到一条错误消息:

1036 - 表data是只读的。

我该如何解决这个问题?

/var/db/mysql中的表属性设置为777

'修复表'功能似乎没有帮助。

有什么我可以做的吗?

mysql freebsd sql-update
9个回答
26
投票

谁拥有/ var / db / mysql以及它们属于哪个组,应该是mysql:mysql。你还需要重新启动mysql才能使更改生效

还要检查当前登录的用户是否具有GRANT访问权限


27
投票

在我的情况下,mysql配置文件有innodb_force_recovery = 1.评论说出来解决了这个问题。希望它可以帮助某人。


6
投票

您应该将所有者更改为MYSQL:MYSQL。

使用此命令:chown -Rf mysql:mysql /var/lib/mysql/DBNAME


4
投票

(这个答案与标题有关,但与原始问题无关。)

如果您(像我一样)试图通过MySQL Workbench界面临时更改数据:

  • 如果表没有主键,MySQL Workbench无法识别您尝试更改的行,因此您无法更改它。
  • 在这种情况下,解决方案是通过另一个路由更改数据,或者只是向表中添加主键。

在任何情况下,我希望它有助于某人:)


2
投票

我的情况是每次我需要在my.ini中编辑“innodb_force_recovery = 1”来强制mysql启动,并且错误日志显示一些错误说:

试图打开以前打开的表空间。以前的表空间mysql / innodb_table_stats在文件路径中使用空格ID:1:。\ mysql \ innodb_table_stats.ibd。无法打开在文件路径中使用空格ID:1的表空间profile / profile_commentmeta:。\ profile \ profile_commentmeta.ibd

我不知道为什么这个文件无法打开,它也导致其他数据库出现这么多其他“表只读”问题。

所以这里是我如何以一种简单的方式解决这个问题,而不会伤害其他文件。

1首先,确保在my.ini文件中的[mysqld]下添加innodb_force_recovery = 1,并且它在路径下运行:X:\ xampp \ mysql \ bin \ my.ini

2然后,下一步,通过导出选项卡下的localhost / phpmyadmin导出所有数据库,并将它们存储在某处,如下所示:

export .sql databases somewhere

3注释掉数据文件夹到数据后退,然后创建一个新的数据文件夹,

enter image description here

4下一步,从phpmyadmin面板导入所有.sql数据库,也请将phpmyadmin文件夹从旧的data-bak文件夹复制到新的数据文件夹。如果需要任何文件,请返回data-bak文件夹进行复制和粘贴。

enter image description here

现在所有修复完成,不需要强制mysql每次启动。希望这也适合你。


1
投票

MySQL没有对数据库文件的写访问权。检查权限和文件的所有者。


0
投票

在Windows上我使用Xampp服务器我将my.ini innodb_force_recovery = 1 中的行注释到#innodb_force_recovery = 1问题已解决


0
投票

我通过编辑应用程序解决了同样的问题。装甲配置文件。在这里找到答案:https://stackoverflow.com/a/14563327/31755661


-2
投票

另一种接收此错误的方法是使用“Like”语句创建表,并将合并表用作源。这样,新创建的表是只读的,不能“接收”任何新记录。

所以

CREATE TABLE ic.icdrs_kw37 LIKE ic.icdrs ... #<- a merged table.

然后:

REPLACE INTO ic.icdrs_kw37 ...  # -> "Table is read-only"

错误或功能?

© www.soinside.com 2019 - 2024. All rights reserved.