前回の記事 で起動できなくなった MySQL を起動できるようにしたのですが、
どうやらそれだけでは不足だったみたいで、サイトにアクセスすると 500 エラーがでるという状態が続いていました。
いろいろ対応をしたので正直どれが正しい解決方法だったのかはわかりませんが、
実際に行ったことを覚えている限り書き出してみます↓
/var/lib/mysql/ 以下にデータベース名のディレクトリがあるはずなので、そこに .ibd, .frm ファイルが有ることを確認します。
以下一部隠蔽しています。
$ sudo ls -l /var/lib/mysql/your_database_name
合計 52932
-rw-r----- 1 mysql mysql 8586 11月 20 20:24 2018 auth_group.frm
-rw-r----- 1 mysql mysql 114688 11月 20 20:34 2018 auth_group.ibd
-rw-r----- 1 mysql mysql 8642 11月 20 20:24 2018 auth_group_permissions.frm
-rw-r----- 1 mysql mysql 131072 11月 20 20:45 2018 auth_group_permissions.ibd
-rw-r----- 1 mysql mysql 8676 11月 20 20:24 2018 auth_permission.frm
-rw-r----- 1 mysql mysql 114688 11月 20 20:34 2018 auth_permission.ibd
-rw-r----- 1 mysql mysql 8956 11月 20 20:24 2018 auth_user.frm
-rw-r----- 1 mysql mysql 114688 11月 23 15:14 2018 auth_user.ibd
-rw-r----- 1 mysql mysql 8630 11月 20 20:24 2018 auth_user_groups.frm
-rw-r----- 1 mysql mysql 131072 11月 20 20:45 2018 auth_user_groups.ibd
-rw-r----- 1 mysql mysql 8640 11月 20 20:24 2018 auth_user_user_permissions.frm
-rw-r----- 1 mysql mysql 131072 11月 20 20:45 2018 auth_user_user_permissions.ibd
-rw-r----- 1 mysql mysql 61 11月 20 20:24 2018 db.opt
-rw-r----- 1 mysql mysql 8866 11月 23 16:49 2018 django_admin_log.frm
-rw-r----- 1 mysql mysql 278528 11月 23 16:49 2018 django_admin_log.ibd
-rw-r----- 1 mysql mysql 8628 11月 23 13:20 2018 django_content_type.frm
-rw-r----- 1 mysql mysql 114688 11月 23 13:20 2018 django_content_type.ibd
-rw-r----- 1 mysql mysql 8650 11月 20 20:24 2018 django_migrations.frm
-rw-r----- 1 mysql mysql 98304 11月 20 20:45 2018 django_migrations.ibd
-rw-r----- 1 mysql mysql 8664 11月 20 20:24 2018 django_session.frm
-rw-r----- 1 mysql mysql 147456 11月 23 15:14 2018 django_session.ibd
-rw-r----- 1 mysql mysql 8620 11月 20 20:24 2018 django_site.frm
-rw-r----- 1 mysql mysql 98304 11月 20 20:45 2018 django_site.ibd
データ自体はありそうで、ちゃんとファイルサイズもそれっぽいので一安心。ε-(´∀`*)ホッ
バックアップ
$ sudo cp -r /var/lib/mysql/your_database_name ~/
データベースの削除
$ sudo rm -rf /var/lib/mysql/your_database_name
データベースの再作成
$ mysql -uroot -p
mysql> create database your_database_name;
データのリストア
$ sudo cp ~/your_database_name/* /var/lib/mysql/your_database_name/
参考サイト:
参考サイト:
例えば以下のような感じで、全テーブルに適用します。
alter table auth_group DISCARD TABLESPACE;
alter table auth_group_permissions DISCARD TABLESPACE;
ここでもう一度退避させていたデータからコピーします。
$ sudo cp ~/your_database_name/* /var/lib/mysql/your_database_name/
alter table auth_group IMPORT TABLESPACE;
alter table auth_group_permissions IMPORT TABLESPACE;
これがうまくいくと、 select できるようになります。
参考サイト:
すごく重いクエリを投げると接続が切られることはあるけど、レコード数も少ないしクエリ実行後即座にコネクションを切られてる感じ。
困り果てたので、ローカルで同じ環境を作ってこれまでの対応をやってみることにしましたが、ローカルでは再現せず、無事に
select * from table することができました。腑に落ちないけど、データ復旧が先なので考えるのは後回し…w
$ mysql -uuser_name -p your_database_name table_name > ~/`date "+%Y%m%d"`_table_name.dump
これを rsync などでサーバーにアップロードして、インポートします。
$ mysql -uuser_name -p your_database_name < ~/20181125_table_name.dump
これで復元できました。
新しい記事へ
CentOS6 系でのプロセスの自動起動の設定
mac に pip をインストールする
mac は標準で python が入っていますが、パッケージ管理の pip がインストールされていないので入れてみました。
2017/05/26 09:00
[GAS] Google Drive の特定フォルダ配下のフォルダ・ファイルの権限を一括で移譲する
Google Drive の特定フォルダ配下のファイル・フォルダの権限を一括で移譲するツールを Google Apps Script で作りました。
2018/11/10 15:54
[Windows] Ophcrack を使ってユーザーパスワードを解析する方法
家族で使っていた Windows7 のログインパスワードを忘れたため、Ophcrack を使って解析したときの記録です。
2017/09/30 21:00
[shell] フォルダ内にある大量の ZIP ファイルをまとめて解凍する
とある ZIP を解凍すると中に大量の ZIP が居たときに幸せになれるコマンドを紹介します
2018/06/19 23:45
[MySQL] データファイルから DB を復元する
先日 MySQL が再起動できなくなる問題が発生し、急遽データファイル(.frm, .ibd)から復元しました
2018/11/25 12:44