皆さんはMySQLからデータを論理バックアップする際にどんなコマンドを使っているでしょうか?
5.
今回は、
検証環境
今回は、
テスト用のデータとして、
mysql> create database test;
mysql> create table test.user(name text, index name_index(name));
mysql> INSERT INTO test.user values ('kimura'),('kk2170');
mysql> SELECT * FROM test.user;
+--------+
| name |
+--------+
| kimura |
| kk2170 |
+--------+
2 rows in set (0.00 sec)
mysqlpumpをおすすめしたい理由
個人的ににmysqlpumpを使ってて、
- mysqldumpの設定と互換性がある
(8. 0.20以降では非推奨) - リストア後にindexの構築してくれるSQLが出力される
- バックアップを並列で行える
それぞれについて解説をしていきます。
mysqldumpのmy.cnfの設定と互換性がある(8.0.20以降では非推奨)
いきなり非推奨となってしまった機能の紹介で申し訳ないのですが、
試してみる際には、
リストア後にindexの構築してくれるSQLが出力される
こちらも地味ですが、
indexの構築が後回しになると何が嬉しいかと言うと、
この機能はmysqlpumpのデフォルトでONになっているので、
mysqlpumpで実際どうなっているか確認してみましょう。ちょっと結果が長いので、
$ mysqlpump -uroot test > backup.sql
$ cat backup.sql
〈中略〉
CREATE TABLE `test`.`user` (
`name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
;
INSERT INTO `test`.`user` VALUES ("kimura"),("kk2170");
USE `test`;
ALTER TABLE `test`.`user` ADD KEY `name_index` (`name`);
〈省略〉
INSERT INTOが終わった後で、
バックアップが並列で行える
mysqlpumpでは、
さらにCPUやストレージに余裕がある場合に、--default-parallelismオプションを使用することで、--default-parallelism=2になってます。
逆にシングルスレッドで動いてほしい場合は、--default-parallelism=0を指定して、--parallel-schemasオプションを指定しない場合、
キューをデータベースごとに分けたい場合には、--parallel-schemasオプションを使用します。--parallel-schemas=[スレッド数:]データベース名,データベース名…とすることで、--default-parallelismオプションの値が設定されます。
複数のキューを使用したい場合には、--parallel-schemasオプションを必要なだけ指定をしましょう。
使う上での注意
5.--single-transactionを使用しても、--default-parallelism=0を指定して、--parallel-schemasを使わないようにしましょう。
まとめ
さて、
MySQLで論理バックアップしたくなったら、