MySQL 8.0 : クローン機能を利用する2020/01/23 |
MySQL 8.0.17 で実装されたクローン機能を使用した MySQL データのバックアップです。
|
|
[1] | デフォルトではクローンプラグインは有効になっていないため、有効にしておきます。 |
# バージョン確認 [root@www ~]# /opt/rh/rh-mysql80/root/usr/libexec/mysqld --version /opt/rh/rh-mysql80/root/usr/libexec/mysqld Ver 8.0.17 for Linux on x86_64 (Source distribution)
[root@www ~]#
vi /etc/opt/rh/rh-mysql80/my.cnf.d/mysql-server.cnf # [mysqld] 内に追記 [mysqld] ..... .....
plugin-load=mysql_clone.so
[root@www ~]#
systemctl restart rh-mysql80-mysqld
# プラグイン確認 [root@www ~]# mysql -u root -p -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@www ~]# mkdir /home/mysql_backup [root@www ~]# chown mysql. /home/mysql_backup # クローン取得を実行 # 指定する取得先ディレクトリがすでに存在しているとエラーとなるため # 存在しないディレクトリ名を指定する [root@www ~]# mysql -u root -p -e "clone local data directory = '/home/mysql_backup/backup01/';"
ll /home/mysql_backup/backup01 total 166916 drwxr-x---. 2 mysql mysql 89 Jan 22 19:35 #clone -rw-r-----. 1 mysql mysql 3777 Jan 22 19:35 ib_buffer_pool -rw-r-----. 1 mysql mysql 12582912 Jan 22 19:35 ibdata1 -rw-r-----. 1 mysql mysql 50331648 Jan 22 19:35 ib_logfile0 -rw-r-----. 1 mysql mysql 50331648 Jan 22 19:35 ib_logfile1 drwxr-x---. 2 mysql mysql 6 Jan 22 19:35 mysql -rw-r-----. 1 mysql mysql 24117248 Jan 22 19:35 mysql.ibd drwxr-x---. 2 mysql mysql 28 Jan 22 19:35 sys drwxr-x---. 2 mysql mysql 28 Jan 22 19:35 test_database -rw-r-----. 1 mysql mysql 10485760 Jan 22 19:35 undo_001 -rw-r-----. 1 mysql mysql 10485760 Jan 22 19:35 undo_002 |
[3] | SELinux を有効にしている場合は、クローン取得先のディレクトリに応じてポリシーの変更が必要です。 当例のように [/home] 配下に取得する場合は、以下のようなポリシー変更をします。 |
[root@www ~]# restorecon -v /home/mysql_backup
[root@www ~]#
vi mysqld-clone.te # 以下の内容で新規作成 module mysqld-clone 1.0; require { type mysqld_t; type user_home_dir_t; class dir { add_name create remove_name write }; class file { create getattr open read unlink write }; } #============= mysqld_t ============== allow mysqld_t user_home_dir_t:dir { add_name create remove_name write }; allow mysqld_t user_home_dir_t:file { create getattr open read unlink write }; checkmodule -m -M -o mysqld-clone.mod mysqld-clone.te checkmodule: loading policy configuration from mysqld-clone.te checkmodule: policy configuration loaded checkmodule: writing binary representation (version 19) to mysqld-clone.mod [root@www ~]# semodule_package --outfile mysqld-clone.pp --module mysqld-clone.mod [root@www ~]# semodule -i mysqld-clone.pp |
[4] | [CLONE INSTANCE FROM] 句を使用して、リモートホスト間で直接データコピーすることも可能です。 公式ドキュメントでは、コピー元を ドナー (Donor)、コピー先を レシピエント (Recipient) と表記してあります。 |
# ドナー上でクローン用のユーザーを作成して [BACKUP_ADMIN] 権限付与 [root@www ~]# mysql -u root -p Enter password: mysql> create user 'clone_user'@'%' identified by 'password'; Query OK, 0 rows affected (0.09 sec) mysql> grant BACKUP_ADMIN on *.* to 'clone_user'@'%'; Query OK, 0 rows affected (0.10 sec) # レシピエント上でクローン用のユーザーを作成して [CLONE_ADMIN] 権限付与 [root@node01 ~]# mysql -u root -p Enter password: mysql> create user 'clone_user'@'%' identified by 'password'; Query OK, 0 rows affected (0.11 sec) mysql> grant CLONE_ADMIN on *.* to 'clone_user'@'%'; Query OK, 0 rows affected (0.04 sec) # レシピエント上でクローン実行 # 事前に [set global clone_valid_donor_list = (ドナーのIPアドレス:ポート)] をセット # データはデフォルトの [/var/opt/rh/rh-mysql80/lib/mysql] 配下にコピーされる mysql> set global clone_valid_donor_list = '10.0.0.31:3306'; Query OK, 0 rows affected (0.00 sec) mysql> clone instance from clone_user@10.0.0.31:3306 identified by 'password'; Query OK, 0 rows affected (2.64 sec) # クローン状況確認 # [Completed] であればコピー完了 mysql> select STATE from performance_schema.clone_status; +-----------+ | STATE | +-----------+ | Completed | +-----------+ 1 row in set (0.00 sec) # データコピー先ディレクトリを指定する場合は [data directory = '***'] を付与する # コピー先ディレクトリを変更する場合 [2], [3] に記載の通り、事前にディレクトリの作成や適切な権限の設定が必要 mysql> clone instance from clone_user@10.0.0.31:3306 identified by 'password' data directory = '/home/mysql_backup/backup01/'; |
Sponsored Link |