FreeBSD 14
Sponsored Link

MySQL 8.0 : クローン機能を利用する2024/09/03

 

クローン機能を使用した MySQL データのバックアップです。

[1] デフォルトではクローンプラグインは有効になっていないため、有効にしておきます。
root@dlp:~ #
vi /usr/local/etc/mysql/my.cnf
# [mysqld] 内に追記

[mysqld]
.....
.....
plugin-load=mysql_clone.so
# 13行目 : 他ホスト間でクローンする場合はリスンする範囲を変更

bind-address            = 0.0.0.0

root@dlp:~ #
service mysql-server restart

# プラグイン確認

root@dlp:~ #
mysql -e "select plugin_name, plugin_status, plugin_type from information_schema.plugins where plugin_name = 'clone';"

Enter password:
+-------------+---------------+-------------+
| plugin_name | plugin_status | plugin_type |
+-------------+---------------+-------------+
| clone       | ACTIVE        | CLONE       |
+-------------+---------------+-------------+
[2] ローカルホスト上の任意のディレクトリにクローンを取得します。
# クローンを取得するディレクトリを任意のパスに作成

root@dlp:~ #
mkdir /home/mysql_backup

root@dlp:~ #
chown mysql:mysql /home/mysql_backup

# クローン取得を実行
# 指定する取得先ディレクトリがすでに存在しているとエラーとなるため
# 存在しないディレクトリ名を指定する

root@dlp:~ #
mysql -e "clone local data directory = '/home/mysql_backup/backup01/';"
root@dlp:~ #
ls -l /home/mysql_backup/backup01

total 3469
drwxr-x---  2 mysql mysql         6 Sep  3 12:58 #clone
drwxr-x---  2 mysql mysql         3 Sep  3 12:58 #innodb_redo
-rw-r-----  1 mysql mysql      5815 Sep  3 12:58 ib_buffer_pool
-rw-r-----  1 mysql mysql 134217728 Sep  3 12:58 ibdata1
drwxr-x---  2 mysql mysql         2 Sep  3 12:58 mysql
-rw-r-----  1 mysql mysql  27262976 Sep  3 12:58 mysql.ibd
drwxr-x---  2 mysql mysql         3 Sep  3 12:58 sys
drwxr-x---  2 mysql mysql         3 Sep  3 12:58 test_database
-rw-r-----  1 mysql mysql  16777216 Sep  3 12:58 undo_001
-rw-r-----  1 mysql mysql  16777216 Sep  3 12:58 undo_002
[3] [CLONE INSTANCE FROM] 句を使用して、リモートホスト間で直接データコピーすることも可能です。
公式ドキュメントでは、コピー元を ドナー (Donor)、コピー先を レシピエント (Recipient) と表記してあります。
# ドナー上でクローン用のユーザーを作成して [BACKUP_ADMIN] 権限付与

root@dlp:~ #
mysql


root@localhost [(none)]> create user 'clone_user'@'%' identified by 'password';
Query OK, 0 rows affected (0.09 sec)

root@localhost [(none)]> grant BACKUP_ADMIN on *.* to 'clone_user'@'%';
Query OK, 0 rows affected (0.10 sec)

# レシピエント上でクローン用のユーザーを作成して [CLONE_ADMIN] 権限付与

root@node01:~ #
mysql


root@localhost [(none)]> create user 'clone_user'@'%' identified by 'password';
Query OK, 0 rows affected (0.11 sec)

root@localhost [(none)]> grant CLONE_ADMIN on *.* to 'clone_user'@'%';
Query OK, 0 rows affected (0.04 sec)


# レシピエント上でクローン実行
# 事前に [set global clone_valid_donor_list = (ドナーの IP アドレス:ポート)] をセット
# データはデフォルトの [/var/lib/mysql] 配下にコピーされる
root@localhost [(none)]> set global clone_valid_donor_list = '10.0.0.30:3306';
Query OK, 0 rows affected (0.00 sec)

root@localhost [(none)]> clone instance from clone_user@10.0.0.30:3306 identified by 'password';
Query OK, 0 rows affected (0.36 sec)

# クローン状況確認
# [Completed] であればコピー完了
root@localhost [(none)]> select STATE from performance_schema.clone_status;
+-----------+
| STATE     |
+-----------+
| Completed |
+-----------+
1 row in set (0.00 sec)


# データコピー先ディレクトリを指定する場合は [data directory = '***'] を付与する
# コピー先ディレクトリを変更する場合 [2] に記載の通り、事前にディレクトリの作成や適切な権限の設定が必要
root@localhost [(none)]> clone instance from clone_user@10.0.0.30:3306 identified by 'password' data directory = '/home/mysql_backup/backup01/';
関連コンテンツ