LVMシンとVM 130ボリューム/ dev/pve/vm-130-disk-0を内部に持つスタンドアロンProxmoxノードを用意します。VM 130誤って削除されました。MysqlデータベースがVMで失われました。1日で発見された後、このノード上のすべてのVMが停止され、/ dev/pveへの書き込みが阻止されました。新しいバックアップも削除されました。リカバリの可能性はありません。新しい削除後VMは作成されませんでした。
失われたボリューム(以前は/ dev/pve/vm-130-disk-0と呼ばれていました)からデータベーステーブルを回復するにはどうすればよいですか?
私が試したこと(運がない):
Vm130のLVMメタデータを削除の瞬間にロールバックします。コマンド「lvs」の出力の結果、ボリューム/ dev/pve/vm-130-disk-0が表示されますが、その非アクティブであり、エラー:device-mapper:reload ioctl on(253:7)が失敗したためアクティブ化できません:利用可能なデータがありません復元中に、ここのようにLVMを損傷する「lvconvert--repair」を使用することを余儀なくされました https://bugs.launchpad.net/ubuntu/+source/lvm2/+bug/1625201 リンクからの回避策は、pve/dataをアクティブ化するのに役立ちますが、/ dev/pve/vm-130-disk-0はアクティブ化しません。
テストディスクでVM物理ディスク/ dev/sda3上のパーティションが見つかりました。18個のパーティションが見つかりましたが、VM 103からの既知のテスト文字列はありません。bgrepでテスト済み。これらのパーティションは、物理ディスク全体をカバーしているわけではないことに注意してください。
VM 130から/ dev/sda3テキスト文字列をbgrepで検索します。testdiskによって確立されたVMパーティションの外側のディスクに配置された2つの異なる文字列で見つかった文字列。
'undrop-for-innodb'がディスク全体/ dev/sda3を検索するリカバリmysqlテーブル。私が探しているDBを含め、さまざまなデータベース用に12GBのページを取得しました。しかし、dictionary/SYS_TABLES.sqlは、5643947289462206311のような巨大なテーブルIDと奇妙なシンボル\ 0を生成します!テーブル名:
2020203D2020 4E414D455F434F SYS_TABLES "\ 0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0std\n\0\0!\ 0!\ 0 !\ 0database_name\0INSERT INTO tbl_log_\n SET log_id "5643947289462206311 NULL NULL NULL 1600742439" "741488441
また、dictionary/SYS_INDEXES.sqlは、これらの巨大なテーブルIDを使用して何も見つけることができません。ここで最初の答えの良いハウツー: https://dba.stackexchange.com/questions/23251/is-there-a-way-to-recover-a-dropped-mysql-database
/ dev/pve/vm-130-disk-0内:
# fdisk -l
Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x65ab60ca
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 64286719 64284672 30.7G 83 Linux
/dev/sda2 64288766 67106815 2818050 1.4G 5 Extended
/dev/sda5 64288768 67106815 2818048 1.4G 82 Linux swap / Solaris
Above /dev/sda1 is ext4 with mysql database files.
mysql
- mysql-server-5.5 5.5.47-0+deb8u1 AMD64
- tables stored in innoDB format.
- tables stored in separate files (my.cnf):
innodb_file_per_table = 1
- binary log forced enabled, but it rotated very othen:
expire_logs_days = 7
Proxmoxの詳細:
# uname -a
Linux wz020 4.15.18-12-pve #1 SMP PVE 4.15.18-35 (Wed, 13 Mar 2019 08:24:42 +0100) x86_64 GNU/Linux
# pveversion
pve-manager/5.4-3/0a6eaa62 (running kernel: 4.15.18-12-pve)
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 pve lvm2 a-- 1.64t 6.00g
# vgs
VG #PV #LV #SN Attr VSize VFree
pve 1 26 0 wz--n- 1.64t 6.00g
アドバイスやアイデアをいただければ幸いです。ありがとう!
'undrop-for-innodb'がディスク全体/ dev/sda3を検索するリカバリmysqlテーブル。私が探しているDBを含め、さまざまなデータベース用に12GBのページを取得しました。しかし、dictionary/SYS_TABLES.sqlは、5643947289462206311のような巨大なテーブルIDと奇妙なシンボル\ 0を生成します!テーブル名:
テーブル名でインデックスを検索するには、SYS_TABLES
/SYS_INDEXES
が必要です。 SYS_ *が破損しているようです(または、stream_parser
が属していないページを誤って見つけた可能性があります)。
したがって、SYS_ *テーブルはありませんが、できればこれらの12G相当のページのどこかにデータがあります。何をすべきか? grep
を試してください。たとえば、テーブルに文字列[email protected]
が必要であることがわかっている場合は、それを含むインデックスを見つけて、それが本当に探しているテーブルであるかどうかをc_parser
で確認します。
これは非常に手動で、複雑で時間のかかるプロセスです。それ以外の場合はデータベースを回復してから、事後分析でバックアッププロセスを確認します。
最初はLVMを復元する必要があると思います。そして、ファイルシステムでmysqldbファイルを復元する方法を考えてください。