バックアップは戻せてこそ華!
「MySQLバックアップ(MySQL Shellによる論理バックアップ編)」で DBのバックアップができましたので、これを使って MySQLの障害復旧をしてみます。
先の論理バックアップで取得したファイルはこれらのものになっています。
subro@UbuntuServer2404-2:~$ ls -l mysqlbackup
合計 52
-rw-r----- 1 subro subro 372 5月 7 19:20 @.done.json
-rw-r----- 1 subro subro 877 5月 7 19:20 @.json
-rw-r----- 1 subro subro 237 5月 7 19:20 @.post.sql
-rw-r----- 1 subro subro 237 5月 7 19:20 @.sql
-rw-r----- 1 subro subro 2599 5月 7 19:20 @.users.sql
-rw-r----- 1 subro subro 315 5月 7 19:20 subrotest.json
-rw-r----- 1 subro subro 578 5月 7 19:20 subrotest.sql
-rw-r----- 1 subro subro 578 5月 7 19:20 subrotest@subrotesttable.json
-rw-r----- 1 subro subro 652 5月 7 19:20 subrotest@subrotesttable.sql
-rw-r----- 1 subro subro 16 5月 7 19:20 subrotest@subrotesttable@0.tsv.zst
-rw-r----- 1 subro subro 8 5月 7 19:20 subrotest@subrotesttable@0.tsv.zst.idx
-rw-r----- 1 subro subro 9 5月 7 19:20 subrotest@subrotesttable@@1.tsv.zst
-rw-r----- 1 subro subro 8 5月 7 19:20 subrotest@subrotesttable@@1.tsv.zst.idx
MySQLから一旦 [subrotest]データベースを削除して、このバックアップから復活させてみます。
では削除から。
せっかくですからこれも MySQL Shellでやりましょうか。
subro@UbuntuServer2404-2:~$ mysqlsh -h localhost -u root -p
Please provide the password for 'root@localhost':MySQLの[root]ユーザーのパスワードを入れる
ave password for 'root@localhost'? [Y]es/[N]o/Ne[v]er (default No): N ← パスワードは覚えさせませんでした。
MySQL Shell 8.4.0
Copyright (c) 2016, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.
Type '\help' or '\?' for help; '\quit' to exit.
Creating a session to 'root@localhost'
Fetching global names for auto-completion... Press ^C to stop.
Your MySQL connection id is 9 (X protocol)
Server version: 8.4.0 MySQL Community Server - GPL
No default schema selected; type \use to set one.
MySQL localhost:33060+ ssl SQL > drop database subrotest;
Query OK, 1 row affected (0.0493 sec)
MySQL localhost:33060+ ssl SQL > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.0010 sec)
[subrotest]データベースが無くなりましたんで、引き続きリカバリをします。
MySQL localhost:33060+ ssl SQL > SET GLOBAL local_infile=on; ← ローカルファイルを読むのにこのグローバル変数を[ON]にしておく必要があるようです。
Query OK, 0 rows affected (0.0004 sec)
MySQL localhost:33060+ ssl SQL > \py
MySQL localhost:33060+ ssl Py > util.load_dump('mysqlbackup') ← ['mysqlbackup']で[./mysqlbackup/@.json]ファイルを読むようです。
Loading DDL and Data from 'mysqlbackup' using 4 threads.
Opening dump...
Target is MySQL 8.4.0. Dump was produced from MySQL 8.4.0
Scanning metadata - done
Checking for pre-existing objects...
Executing common preamble SQL
Executing DDL - done
Executing view DDL - done
Starting data load
Executing common postamble SQL
100% (7 bytes / 7 bytes), 0.00 B/s (0.00 rows/s), 1 / 1 tables done
Recreating indexes - done
2 chunks (1 rows, 7 bytes) for 1 tables in 1 schemas were loaded in 0 sec (avg throughput 7.00 B/s, 1.00 row/s)
2 DDL files were executed in 0 sec.
Data load duration: 0 sec
Total duration: 0 sec
0 warnings were reported during the load.
リカバリできてそうですね。
[subrotest]データベースができているか見てみます。
MySQL localhost:33060+ ssl Py > \sql
MySQL localhost:33060+ ssl SQL > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| subrotest |
| sys |
+--------------------+
5 rows in set (0.0008 sec)
ありました。
[subrotesttable]テーブルがあるか見てみます。
MySQL localhost:33060+ ssl SQL > use subrotest;
MySQL localhost:33060+ ssl subrotest SQL > select * from subrotesttable;
+--------+
| name |
+--------+
| Tanaka |
+--------+
1 row in set (0.0007 sec)
テーブルも戻っていますね。
MySQL Shellから出ます。
MySQL localhost:33060+ ssl subrotest SQL > \quit
Bye!
終わりました。
==========
とりあえず戻すことはできましたが「インスタンスバックアップからその一部であるデータベースだけを戻すのはこれで良いのかな?」って疑問は残りましたね。
load_dump関数の使い方はマニュアルにしっかり買いてあって、別のインスタンスに持っていったり、1つのテーブルだけ単品で戻したりとかできそうですが、まだまだお勉強が必要だなって想いました。
MySQL Shellの使用に慣れてくると、SQL実行と Python関数の実行を交互にやるのもそんなに苦ではない感じもしました。
MySQL Shellがどうのというより、こなれた新機能が PythonとJavaScriptで提供されて、MySQL Shellを使わざるを得ないんじゃないの?選択肢はないんじゃない?って印象もあります。
2024年5月になってもインターネットには「MySQL Shellをやってみた」系のブログポストも少なく、ノウハウが積み上がっていくのはこれからなのかな〜と思います。
(だけどお勉強は待った無しの感じ)
Amazonや楽天で書籍を探してみてはいるんですが、MySQL Shell単体のってないですね。
今の所 Ver.8.4のオフィシャルドキュメントは英語のしかないし、それが結構難解だしで、結構大変ですわ、コレ。