表是'只读'

时间:2012-03-05 23:50:58

标签: mysql freebsd sql-update

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

  

1036 - 表data是只读的。

我该如何解决?

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

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

我有什么可以做的吗?

10 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:26)

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

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

答案 2 :(得分:6)

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

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

答案 3 :(得分:4)

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

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

  • 如果表没有主键,MySQL Workbench无法识别您尝试更改的行,因此您无法更改它。

  • 在这种情况下,解决方案是通过其他路由更改数据,或者只是将主键添加到表中。

无论如何,我希望它可以帮助别人:)

答案 4 :(得分:2)

我的情况是每次需要在 my.ini 中编辑“ innodb_force_recovery = 1 ”以强制mysql启动时,错误日志显示了一些错误: / p>

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

中使用空间ID:1的表空间配置文件/ profile_commentmeta

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

所以这是我以一种简单的方式解决此问题而又不损害其他文件的方式。

1 首先,请确保是否添加 innodb_force_recovery = 1 位于my.ini文件中的 [mysqld] 下方,并且可以正常运行,位于以下路径:X:\ xampp \ mysql \ bin \ my.ini

2 然后下一步,通过 export 标签下的 localhost / phpmyadmin 导出所有数据库,并将它们存储在某个位置,如下所示:

export .sql databases somewhere

3将 data 文件文件夹注释为 data-bak ,然后创建一个新的 data 文件文件夹

enter image description here

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

enter image description here

现在所有问题都已解决,无需强制mysql每次都启动。 希望这对您也有用。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

在Windows上,我使用Xampp服务器,对 my.ini 中的行进行注释 <div class="flex-container"> <div class="flex-content"> <div class="left-side"></div> <div class="right-side"> <div class="inner-content"> Abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz </div> </div> </div> </div>innodb_force_recovery = 1 问题已解决

答案 7 :(得分:0)

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

答案 8 :(得分:0)

也许您从表存储引擎中获得了只读错误。
检查您的存储引擎,也许是MRG_MYISAM,将其更改为MyISAM,然后重试。

答案 9 :(得分:-2)

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

所以

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

然后:

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

错误或功能?