mita2 database life

主にMySQLに関するメモです

MySQL Clone Plugin を利用してスレーブが簡単に作れた

お題

  • MySQL 8.0 で導入された、Clone Plugin を利用してスレーブを作ってみる dev.mysql.com

やってみる

Clone プラグインをマスターとスレーブ、両方に設定しておきます。

MySQL 8.0 から plugin-load-add という書き方がサポートされました。従来のplugin-loadと比較して設定ファイルが見やすく書けますね。

$ sudo vi /etc/my.cnf
plugin_load_add                     = mysql_clone.so

SHOW PLUGINSプラグインがインストールできたことが確認できる。

mysql> pager grep -i clone
PAGER set to 'grep -i clone'

mysql> SHOW PLUGINS;
| clone                           | ACTIVE   | CLONE              | mysql_clone.so     | GPL     |
47 rows in set (0.01 sec)

clone用のユーザを作ります。BACKUP_ADMIN権限が必要です。

mysql> CREATE USER clone_user IDENTIFIED BY 'Password123!';
Query OK, 0 rows affected (0.05 sec)

mysql> GRANT BACKUP_ADMIN ON *.* TO clone_user;
Query OK, 0 rows affected (0.03 sec)

マスターの gtid_executed は以下です。CLONE INSTANCE でデータを正しくコピーできれば、スレーブの gtid_executedも以下になるはずです。

mysql> SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
+---------------+------------------------------------------+
| Variable_name | Value                                    |
+---------------+------------------------------------------+
| gtid_executed | e9ec3499-62a3-11ea-8abd-901b0e97e768:1-3 |
+---------------+------------------------------------------+
1 row in set (0.00 sec)

スレーブでCLONE INSTANCEを実行しマスターのデータをコピーします。

mysql> SET GLOBAL clone_valid_donor_list = '192.168.10.3:3306';
Query OK, 0 rows affected (0.00 sec)

mysql> CLONE INSTANCE FROM clone_user@192.168.10.3:3306 IDENTIFIED BY 'Password123!';
Query OK, 0 rows affected (9.60 sec)

データがコピーされ、gtid_executed も一致しました。

mysql> SHOW GLOBAL VARIABLES LIKE 'gtid_executed';
+---------------+------------------------------------------+
| Variable_name | Value                                    |
+---------------+------------------------------------------+
| gtid_executed | e9ec3499-62a3-11ea-8abd-901b0e97e768:1-3 |
+---------------+------------------------------------------+
1 row in set (0.00 sec)

あとは、いつもどおり、CHANGE MASTER するだけ。

mysql> CHANGE MASTER TO MASTER_HOST='master', MASTER_PORT=3306,
MASTER_USER='repl', MASTER_PASSWORD='replpassword', MASTER_AUTO_POSITION=1, 
MASTER_HEARTBEAT_PERIOD=2, 
MASTER_CONNECT_RETRY=2, 
MASTER_RETRY_COUNT=86400,
MASTER_SSL=1;

mysqldump したり、手で物理コピーするのに比べて遥かに簡単にスレーブが作れてしまいました。ぱちぱちぱち。