MySQL 8.0 : クローン機能を利用する2024/06/03 |
クローン機能を使用した MySQL データのバックアップです。
|
|
[1] | デフォルトではクローンプラグインは有効になっていないため、有効にしておきます。 |
root@dlp:~#
vi /etc/mysql/mysql.conf.d/mysqld.cnf # [mysqld] 内に追記 [mysqld] ..... .....
plugin-load=mysql_clone.so
# 31行目 : 他ホスト間でクローンする場合はリスンする範囲を変更
bind-address = 0.0.0.0
mysqlx-bind-address = 127.0.0.1
root@dlp:~#
systemctl restart mysql
# プラグイン確認 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 # 以下のようにクローン取得先ディレクトリを追記してアクセス許可
/usr/sbin/mysqld {
.....
.....
/home/mysql_backup/ r,
/home/mysql_backup/** rwk,
}
root@dlp:~#
systemctl restart apparmor
# クローン取得を実行 # 指定する取得先ディレクトリがすでに存在しているとエラーとなるため # 存在しないディレクトリ名を指定する root@dlp:~# mysql -e "clone local data directory = '/home/mysql_backup/backup01/';"
ll /home/mysql_backup/backup01 total 70688 drwxr-x--- 2 mysql mysql 4096 Jun 3 01:12 '#clone'/ drwxr-x--- 2 mysql mysql 4096 Jun 3 01:12 '#innodb_redo'/ drwxr-x--- 7 mysql mysql 4096 Jun 3 01:12 ./ drwxr-xr-x 3 mysql mysql 4096 Jun 3 01:12 ../ -rw-r----- 1 mysql mysql 3940 Jun 3 01:12 ib_buffer_pool -rw-r----- 1 mysql mysql 12582912 Jun 3 01:12 ibdata1 drwxr-x--- 2 mysql mysql 4096 Jun 3 01:12 mysql/ -rw-r----- 1 mysql mysql 26214400 Jun 3 01:12 mysql.ibd drwxr-x--- 2 mysql mysql 4096 Jun 3 01:12 sys/ drwxr-x--- 2 mysql mysql 4096 Jun 3 01:12 test_database/ -rw-r----- 1 mysql mysql 16777216 Jun 3 01:12 undo_001 -rw-r----- 1 mysql mysql 16777216 Jun 3 01:12 undo_002 |
[3] | [CLONE INSTANCE FROM] 句を使用して、リモートホスト間で直接データコピーすることも可能です。 公式ドキュメントでは、コピー元を ドナー (Donor)、コピー先を レシピエント (Recipient) と表記してあります。 |
# ドナー上でクローン用のユーザーを作成して [BACKUP_ADMIN] 権限付与 root@dlp:~# mysql 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 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/lib/mysql] 配下にコピーされる mysql> set global clone_valid_donor_list = '10.0.0.30:3306'; Query OK, 0 rows affected (0.00 sec) mysql> clone instance from clone_user@10.0.0.30:3306 identified by 'password'; Query OK, 0 rows affected (0.45 sec) # クローン状況確認 # [Completed] であればコピー完了 mysql> select STATE from performance_schema.clone_status; +-----------+ | STATE | +-----------+ | Completed | +-----------+ 1 row in set (0.00 sec) # データコピー先ディレクトリを指定する場合は [data directory = '***'] を付与する # コピー先ディレクトリを変更する場合 [2] に記載の通り、事前にディレクトリの作成や適切な権限の設定が必要 mysql> clone instance from clone_user@10.0.0.30:3306 identified by 'password' data directory = '/home/mysql_backup/backup01/'; |
Sponsored Link |