0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

mysql8で導入されたcloneプラグインについて

Posted at

cloneプラグインとは

ローカルまたはリモートサーバーから無停止で物理バックアップするツール。このプラグインが導入する前は無停止で物理バックアップする場合は「MySQL Enterprise Backup」などを使用する必要がありました。バックアップするのはinnodbのみが対象になります。

リモートのMySQLサーバーからcloneする手順について記載しています。MySQLのバージョンは8.0.17です。

  • clone先のサーバーのホスト名はmysql_target
  • clone元のサーバーのホスト名はmysql_source

とします

インストール

  1. clone先・元のMySQLサーバー双方にcloneプラグインをインストールします
mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
Query OK, 0 rows affected (0.02 sec)

INFORMATION_SCHEMA.PLUGINSをSELECTして以下のように表示されていればOKです

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| clone       | ACTIVE        |
+-------------+---------------+

ユーザ作成

  • clone元でBACKUP_ADMINを持ったユーザを作成します
mysql> CREATE USER 'source_user'@'mysql_source' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT BACKUP_ADMIN on *.* to 'source_user'@'mysql_source';
Query OK, 0 rows affected (0.01 sec)
  • clone先でCLONE_ADMINを持ったユーザを作成します
mysql> CREATE USER 'target_user'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT CLONE_ADMIN on *.* to 'target_user'@'localhost';
Query OK, 0 rows affected (0.01 sec)
  • clone先でclone_valid_donor_listにclone元の「ホスト:ポート名」を設定します
mysql> SET GLOBAL clone_valid_donor_list = 'mysql_source:3306';
Query OK, 0 rows affected (0.00 sec)

cloneの実行

mysql> CLONE INSTANCE FROM 'source_user'@'mysql_source':3306 IDENTIFIED BY 'password';
ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).

エラーが表示されていますが、cloneが実行されると再起動が走ります。今回実行した環境がmysqlを直接起動したので再起動が失敗しましたがsystemd経由で起動させると再起動は成功します

再起動させたくない場合は、DATA DIRECTORYで出力先ディレクトリーを指定します

mysql> CLONE INSTANCE FROM 'source_user'@'mysql_source':3306 IDENTIFIED BY 'password' DATA DIRECTORY = '/tmp/mysql_clone';
Query OK, 0 rows affected (1.08 sec)

まとめ

リモートにあるMySQLサーバーをcloneする例を書きましたが、今後のMySQLサーバーのバックアップのデフォルトスタンダードのソリューションになるかもしれないですね。内部的にどうゆう仕組みで動いているのかちょっと興味が湧いてきたのでその辺りも調べて分かったら記事にしたいと思っています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?