web-dev-qa-db-ja.com

テーブルは「読み取り専用」です

テーブルでupdateクエリを実行しようとすると、次のエラーが表示されます。

1036-テーブルdataは読み取り専用です。

どうすれば修正できますか?

/var/db/mysqlのテーブル属性は777に設定されます。

「テーブルの修復」機能は役に立たないようです。

それで何かできることはありますか?

25
Cyclone

/ var/db/mysqlの所有者と所属グループは、mysql:mysqlである必要があります。また、変更を有効にするにはmysqlを再起動する必要があります

また、現在ログインしているユーザーに更新のためのGRANTアクセス権があることを確認します

27
ncremins

私の場合、mysql構成ファイルにはinnodb_force_recovery = 1が含まれていました。コメントアウトすると問題が解決しました。それが誰かを助けることを願っています。

29
Rahi

所有者をMYSQL:MYSQLに変更する必要があります。

次のコマンドを使用します:chown -Rf mysql:mysql /var/lib/mysql/DBNAME

6
kamranonline

(この回答は見出しに関連していますが、元の質問には関連していません。)

(私のように)MySQL Workbenchインターフェースを介して一時的にデータを変更しようとしている場合:

  • テーブルに主キーがない場合、MySQL Workbenchには変更しようとしている行を識別する方法がないため、変更できません。

  • その場合の解決策は、別のルートを介してデータを変更するか、単にテーブルに主キーを追加することです。

いずれにしても、私はそれが誰かを助けることを願っています:)

4
Fom

私の状況は、mysqlを強制的に起動するためにmy.iniの「innodb_force_recovery = 1」を編集する必要があるたびであり、エラーログには次のようなエラーが示されました。

以前に開いたテーブルスペースを開こうとしました。以前のテーブルスペースmysql/innodb_table_statsはスペースID:1を使用します。ファイルパス:。\ mysql\innodb_table_stats.ibd。ファイルパス:。\ profile\profile_commentmeta.ibdでスペースID:1を使用するテーブルスペースprofile/profile_commentmetaを開けません。

このファイルを開けなかった理由がわかりませんでした。また、他のデータベースにも多くの「テーブル読み取り専用」問題が発生しました。

そこで、他のファイルを傷つけることなく、この問題を簡単な方法で修正した方法を次に示します。

1まず、my.iniファイルでinnodb_force_recovery = 1以下を[mysqld]に追加し、パスの下で機能していることを確認します:X :\ xampp\mysql\bin\my.ini

2次に、次のステップで、exportタブの下のlocalhost/phpmyadminからすべてのデータベースをエクスポートし、次のように保存します。

export .sql databases somewhere

3dataファイルフォルダーをdata-bakにコメントアウトしてから、新しいdataファイルフォルダーを作成し、

enter image description here

4次のステップでは、すべての.sqlデータベースをphpmyadminパネルから戻し、pleasealso copyphpmyadmin古いdata-bakファイルフォルダーから新しいdataファイルフォルダーへのファイルフォルダー。ファイルが必要な場合は、data-bakファイルフォルダーに戻ってコピーして貼り付けてください。

enter image description here

これですべて修正および完了しました。毎回mysqlを強制的に起動する必要はありません。これがあなたにも役立つことを願っています。

2
hong cai

MySQLには、データベースファイルへの書き込みアクセス権がありません。ファイルの許可と所有者を確認してください。

1
Borodin

アプリを編集して同じ問題を解決しました。アーマー構成ファイル。ここで答えを見つけました: https://stackoverflow.com/a/14563327/31755661

0
eddy85br

Windowsでは、Xamppサーバーを使用しますmy.iniinnodb_force_recovery = 1から#innodb_force_recovery = 1問題は解決しました

0
vpgodara