8

私は走っています:

MariaDB 10.0.5
Ubuntu 12.04 LTS
Both up to the latest patch level as per last Friday

私は以前の問題でかなりのピクルスになりました:

http://stackoverflow.com/questions/19910996/mysql-connect-headers-and-client-library-minor-version-mismatch-library10000

上記の問題の症状を解決するために、ibdata1、ib_logfile0、および ib_logfile1 をコピーして削除したため、これにより大規模な破損が発生しました。この問題は、次に mariadb サービスを開始したときに始まったと思います。影響を受けるテーブルの 1 つを選択するか、mysqldump を実行しようとすると、次のようになります。

mysqldump -u backupusr -p'somepass' --all-databases > dump.sql

mysqldump: Got error: 1932: "Table 'some_db.dw_commentmeta' doesn't exist in engine" when using LOCK TABLES

幸いなことに(非常に幸運なことに)、私の大規模な本番クライアントの Web サイトのデータはそのままで、サイトはオンラインになっています。そのDBにも少なくとも1つの破損したテーブルがありますが。次に、他のすべての Web サイトのデータベースを復元します。

元の ibdata1、ib_logfile0、および ib_logfile1 ファイルがまだ残っています。これらのファイルを /var/lib/mysql/ に戻すと、mariaDB サービスの開始に失敗します。

私が試したことの 1 つは、次のように InnoDB の回復を強制することです。

http://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html

しかし、それは効果がありません。その後、Mysql アップグレード ツールを強制的に使用して、テーブルを修復できるかどうかを確認しました。

mysql_upgrade --password --force
FATAL ERROR: Upgrade failed

だから、それは私に何も教えてくれません。次に、REPAIR TABLE および ALTER TABLE ENGINE コマンドを使用しました。

http://dev.mysql.com/doc/refman/5.0/en/rebuilding-tables.html

エンジンの変更:

MariaDB [sictnl_db]> ALTER TABLE si_users ENGINE = MyISAM;
ERROR 1932 (42S02): Table 'sictnl_db.si_users' doesn't exist in engine

修理表:

MariaDB [sictnl_db]> REPAIR TABLE si_users;
+--------------------+--------+----------+----------------------------------------------------+
| Table              | Op     | Msg_type | Msg_text                                           |
+--------------------+--------+----------+----------------------------------------------------+
| sictnl_db.si_users | repair | Error    | Table 'sictnl_db.si_users' doesn't exist in engine |
| sictnl_db.si_users | repair | status   | Operation failed                                   |
+--------------------+--------+----------+----------------------------------------------------+
2 rows in set (0.00 sec)

つまり、これは要約すると、テーブル情報をエンジンのテーブルに戻すことになります。https://mariadb.com/kb/en/mariadb-storage-engines/のドキュメントには、デフォルトで使用している 2 つのストレージ エンジンがあると記載されています。

Aria
MyISAM

破損していないテーブルの 1 つで SHOW CREATE TABLE 関数を実行すると、次のようになります。

ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 |

つまり、MyISAM です。「mysql repair myisam」をグーグルで検索すると、次のサイトに移動します。

Note: Would Aria have protected me against this issue?

http://dev.mysql.com/doc/refman/5.0/en/myisamchk.html

これにより、次のようにテーブルのローカル ストレージを指す必要がある myisamchk コマンドが生成されます。

myisamchk /var/lib/mysql/sictnl_db/*


myisamchk: error: '/var/lib/mysql/sictnl_db/db.opt' is not a MyISAM-table
---------
myisamchk: error: '/var/lib/mysql/sictnl_db/si_commentmeta.frm' is not a MyISAM-table
---------
myisamchk: error: '/var/lib/mysql/sictnl_db/si_commentmeta.ibd' is not a MyISAM-table

そのため、ツールに .MYI ファイルがないように見えますが、これらのファイルはシェルに存在しません。

有益なコメントがあるかどうかを確認するために、これを投稿しています。それまでの間、分析を続け、さらに情報が得られたら投稿を更新します.

前もって感謝します!

4

1 に答える 1