🐕
MySQL のデータを生ファイルから復元
背景
EC2 のステータスチェックが「インスタンスの接続性チェックに失敗しました」となり、サーバーに接続できなくなっていた。
システムログに OSError: [Errno 28] No space left on device
というエラーが出ていた。
ボリュームの容量を増やしたり、インスタンスタイプを上げてみたがだめだった。
ほとんど使っていないサーバーだったので MySQL のデータだけ取り出して廃棄することに。
手順
この記事を参考にボリュームをデタッチし、新しく作った調査用インスタンスにアタッチ。
以下をローカル環境にダウンロード:
-
/var/lib/mysql/some_database/
復元対象のデータベース /var/lib/mysql/ibdata1
/var/lib/mysql/ib_logfile0
/var/lib/mysql/ib_logfile1
廃棄サーバと同バージョンの MySQL 5.7.17 を docker で立てる:
version: "3"
services:
mysql:
image: mysql:5.7.17
container_name: mysql5717
ports:
- 3306:3306
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
MYSQL_ROOT_PASSWORD: ''
TZ: 'Asia/Tokyo'
volumes:
- ./data:/var/lib/mysql
docker-compose up -d
で起動。
docker exec -it mysql5717 bash
でコンテナに入り、mysql -u root -p
でログイン出来ることを確認。一旦 docker を終了。
ダウンロードしていたファイル群を ./data にコピーし、データが select 出来ることを確認。
最後に mysqldump -u root some_database > /var/lib/mysql/some_database.sql
でデータをダンプ。
Discussion