[4] MySQL – Klonowanie
27 stycznia 2022Użyjemy klonowanie, które zostało wprowadzone od wersji MySQL 8.0.17.
[1] Usługa klonowanie, nie jest domyślnie włączona – dlatego włącz ją na wszystkich hostach, na których ma być usługa klonowania.
#sprawdźmy wersję MySQL [root@vlsr01 ~]# /usr/libexec/mysqld --version /usr/libexec/mysqld Ver 8.0.26 for Linux on x86_64 (Source distribution) [root@vlsr01 ~]# mcedit /etc/my.cnf.d/mysql-server.cnf #dodaj do sekcji [mysqld] [mysqld] plugin-load=mysql_clone.so [root@vlsr01 ~]# systemctl restart mysqld #pokaż załadowane pluginy [root@vlsr01 ~]# mysql -u root -p -e "select plugin_name, plugin_status, plugin_type from information_schema.plugins where plugin_name = 'clone';" Enter password: #wpisz haslo +-------------+---------------+-------------+ | plugin_name | plugin_status | plugin_type | +-------------+---------------+-------------+ | clone | ACTIVE | CLONE | +-------------+---------------+-------------+
[2] Przygotuj katalogi na lokalnym hoście.
#utwórz katalog na sklonowane dane [root@vlsr01 ~]# mkdir /home/mysql_backup [root@vlsr01 ~]# chown mysql. /home/mysql_backup
[3] Jeśli SELinux jest uruchomiony potrzebna jest zmiana polityki dla katalogu docelowego. Jeśli robisz klonowanie w katalogu [/home] wykonaj poniższe czynności.
[root@vlsr01 ~]# mcedit mysqld-clone.te #stwórz nowy 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 }; [root@vlsr01 ~]# checkmodule -m -M -o mysqld-clone.mod mysqld-clone.te [root@vlsr01 ~]# semodule_package --outfile mysqld-clone.pp --module mysqld-clone.mod [root@vlsr01 ~]# semodule -i mysqld-clone.pp
[4] Uruchom klonowanie
#jeśli wpiszesz katalog już istniejący, system zgłosi błąd #dlatego też wpisz nowy katalog w sekcji [directory = ] [root@vlsr01 ~]# mysql -u root -p -e "clone local data directory = '/home/mysql_backup/backup01/';" Enter password: [root@vlsr01 ~]# ll /home/mysql_backup/backup01/ razem 180228 drwxr-x---. 2 mysql mysql 89 01-27 15:42 '#clone' -rw-r-----. 1 mysql mysql 3877 01-27 15:41 ib_buffer_pool -rw-r-----. 1 mysql mysql 12582912 01-27 15:41 ibdata1 -rw-r-----. 1 mysql mysql 50331648 01-27 15:42 ib_logfile0 -rw-r-----. 1 mysql mysql 50331648 01-27 15:42 ib_logfile1 drwxr-x---. 2 mysql mysql 6 01-27 15:41 mysql -rw-r-----. 1 mysql mysql 25165824 01-27 15:41 mysql.ibd drwxr-x---. 2 mysql mysql 28 01-27 15:41 sys -rw-r-----. 1 mysql mysql 16777216 01-27 15:41 undo_001 -rw-r-----. 1 mysql mysql 16777216 01-27 15:41 undo_002
[5] Aby użyć [CLONE INSTANCE FROM], możliwe jest pobranie klonu bezpośrednio ze zdalnego hosta. W oficjalnych dokumentach źródło klonu nazywa się [Donor], a cel klonu nazywa się [Recipient].
#na hoście [Donor (vlsr01.zicher.lab)] stwórz użytkownika i dodaj uprawnienia [BACKUP_ADMIN] dla wykonania kopii zapasowych [root@vlsr01 ~]# mysql -u root -p Enter password: #wpisz hasło Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 8.0.26 Source distribution Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create user 'clone_user'@'%' identified by 'TajneHasło'; Query OK, 0 rows affected (0,00 sec) mysql> grant BACKUP_ADMIN on *.* to 'clone_user'@'%'; Query OK, 0 rows affected (0,00 sec) #na hoście odbiorcy [Recipient (vlsr02.zicher.lab)] stwórz użytkownika i dodaj prawa do klonowania [CLONE_ADMIN] [root@vlsr02 ~]# mysql -u root -p Enter password: #wpisz hasło Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 Server version: 8.0.26 Source distribution Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create user 'clone_user'@'%' identified by 'TajneHasło'; Query OK, 0 rows affected (0,01 sec) mysql> grant CLONE_ADMIN on *.* to 'clone_user'@'%'; Query OK, 0 rows affected (0,00 sec) # na hoście odbiorcy, uruchom zadanie klonowania # przed klonowaniem ustaw [set global clone_valid_donor_list = (adres IP dawcy:port)] # dane klonu są kopiowane do [/var/lib/mysql] [root@vlsr02 ~]# mysql -u root -p Enter password: #wpisz hasło Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.26 Source distribution Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> set global clone_valid_donor_list = '192.168.100.101:3306'; Query OK, 0 rows affected (0,00 sec) mysql> clone instance from clone_user@192.168.100.101:3306 identified by 'TajneHasło'; Query OK, 0 rows affected (1,56 sec) #potwierdź status klonowania #wszystko w porządku gdy [STATE] jest [Completed] mysql> select STATE from performance_schema.clone_status; +-----------+ | STATE | +-----------+ | Completed | +-----------+ 1 row in set (0,00 sec) mysql> exit Bye # jeśli określisz sklonowany katalog docelowy, dodaj [data directory = '*'] # ale potem musisz ustawić odpowiednie uprawnienia do katalogu docelowego jak w [2], [3] mysql> clone instance from clone_user@192.168.100.101:3306 identified by 'TajneHasło' data directory = '/home/mysql_backup/backup01/';