sql >> Databáze >  >> RDS >> Mysql

Přebudování MySQL 8.0 Replication Slave pomocí klonovacího pluginu

S MySQL 8.0 Oracle přijal nový přístup k vývoji. Namísto prosazování funkcí s hlavními verzemi přichází téměř každá menší verze MySQL 8.0 s novými funkcemi nebo vylepšeními. Jednou z těchto nových funkcí je to, na co bychom se rádi zaměřili v tomto příspěvku na blogu.

MySQL historicky nepřicházelo s dobrými nástroji pro zřizování. Jistě, měli jste mysqldump, ale je to pouze logický nástroj pro zálohování, který není vhodný pro větší prostředí. Podnikoví uživatelé MySQL by mohli těžit z MySQL Enterprise Backup, zatímco uživatelé z komunity mohou využívat xtrabackup. Ani jeden z nich však nepřišel s čistým nasazením komunity MySQL. Bylo to docela nepříjemné, protože zajišťování je úkol, který děláte poměrně často. Možná budete muset postavit nového slave, přestavět nefunkční – to vše bude vyžadovat nějaký druh přenosu dat mezi samostatnými uzly.

MySQL 8.0.17 představil nový způsob poskytování dat MySQL – klonovací plugin. Bylo zamýšleno s ohledem na replikaci MySQL Group Replication zavést způsob automatického zřizování a přestavby neúspěšných uzlů, ale jeho užitečnost není omezena na tuto oblast. Můžeme jej také použít k přestavbě podřízeného uzlu nebo k zajištění nového serveru. V tomto příspěvku na blogu bychom vám rádi ukázali, jak nastavit plugin MySQL Clone a jak znovu sestavit replikační slave.

Nejprve musí být plugin povolen, protože je ve výchozím nastavení zakázán. Jakmile to uděláte, zůstane aktivní i po restartování. V ideálním případě to uděláte na všech uzlech v topologii replikace.

mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';

Query OK, 0 rows affected (0.00 sec)

Klonovací plugin vyžaduje uživatele MySQL se správnými oprávněními. Na dárci musí mít oprávnění „BACKUP_ADMIN“, zatímco na spojujícím musí mít oprávnění „CLONE_ADMIN“. Za předpokladu, že chcete klonovací plugin široce používat, stačí vytvořit uživatele s oběma oprávněními. Udělejte to na masteru, takže uživatel bude vytvořen i na všech slave. Koneckonců, nikdy nevíte, který uzel bude někdy v budoucnu master, proto je výhodnější mít vše připraveno předem.

mysql> CREATE USER [email protected]'%' IDENTIFIED BY 'clonepass';

Query OK, 0 rows affected (0.01 sec)

mysql> GRANT BACKUP_ADMIN, CLONE_ADMIN ON *.* to [email protected]'%';

Query OK, 0 rows affected (0.00 sec)

Zásuvný modul MySQL Clone má určité předpoklady, proto by měly být prováděny kontroly zdravého rozumu. Měli byste se ujistit, že dárce i spojení budou mít stejné hodnoty v následujících konfiguračních proměnných:

mysql> SHOW VARIABLES LIKE 'innodb_page_size';

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| innodb_page_size | 16384 |

+------------------+-------+

1 row in set (0.01 sec)

mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';

+-----------------------+-------------------------+

| Variable_name         | Value   |

+-----------------------+-------------------------+

| innodb_data_file_path | ibdata1:100M:autoextend |

+-----------------------+-------------------------+

1 row in set (0.01 sec)

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';

+--------------------+-----------+

| Variable_name      | Value |

+--------------------+-----------+

| max_allowed_packet | 536870912 |

+--------------------+-----------+

1 row in set (0.00 sec)

mysql> SHOW GLOBAL VARIABLES LIKE '%character%';

+--------------------------+--------------------------------+

| Variable_name            | Value       |

+--------------------------+--------------------------------+

| character_set_client     | utf8mb4       |

| character_set_connection | utf8mb4                        |

| character_set_database   | utf8mb4       |

| character_set_filesystem | binary                         |

| character_set_results    | utf8mb4       |

| character_set_server     | utf8mb4       |

| character_set_system     | utf8       |

| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |

+--------------------------+--------------------------------+

8 rows in set (0.00 sec)



mysql> SHOW GLOBAL VARIABLES LIKE '%collation%';

+-------------------------------+--------------------+

| Variable_name                 | Value |

+-------------------------------+--------------------+

| collation_connection          | utf8mb4_0900_ai_ci |

| collation_database            | utf8mb4_0900_ai_ci |

| collation_server              | utf8mb4_0900_ai_ci |

| default_collation_for_utf8mb4 | utf8mb4_0900_ai_ci |

+-------------------------------+--------------------+

4 rows in set (0.00 sec)

Potom bychom na hlavním serveru měli znovu zkontrolovat, že tabulkové prostory mají jedinečné názvy:

mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES

    ->        WHERE FILE_TYPE LIKE 'UNDO LOG';

+-----------------+------------+

| TABLESPACE_NAME | FILE_NAME  |

+-----------------+------------+

| innodb_undo_001 | ./undo_001 |

| innodb_undo_002 | ./undo_002 |

+-----------------+------------+

2 rows in set (0.12 sec)

Výchozí úroveň výřečnosti neukazuje příliš mnoho dat týkajících se procesu klonování, proto doporučujeme zvýšit ji, abyste měli lepší přehled o tom, co se děje:

mysql> SET GLOBAL log_error_verbosity=3;

Query OK, 0 rows affected (0.00 sec)

Abychom mohli zahájit proces na našem spojení, musíme nakonfigurovat platného dárce:

mysql> SET GLOBAL clone_valid_donor_list ='10.0.0.101:3306';

Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'clone_valid_donor_list';

+------------------------+-----------------+

| Variable_name          | Value |

+------------------------+-----------------+

| clone_valid_donor_list | 10.0.0.101:3306 |

+------------------------+-----------------+

1 row in set (0.00 sec)

Jakmile je na místě, můžeme jej použít ke kopírování dat z:

mysql> CLONE INSTANCE FROM 'clone_user'@'10.0.0.101':3306 IDENTIFIED BY 'clonepass';

Query OK, 0 rows affected (18.30 sec)

To je vše, pokrok lze sledovat v protokolu chyb MySQL na spojovateli. Jakmile je vše připraveno, vše, co musíte udělat, je nastavit replikaci:

mysql> CHANGE MASTER TO MASTER_HOST='10.0.0.101', MASTER_AUTO_POSITION=1;

Query OK, 0 rows affected (0.05 sec)

mysql> START SLAVE USER='rpl_user' PASSWORD='afXGK2Wk8l';

Query OK, 0 rows affected, 1 warning (0.01 sec)

Mějte prosím na paměti, že plugin Clone má řadu omezení. Pro začátek přenáší pouze tabulky InnoDB, takže pokud náhodou používáte jiné úložné stroje, museli byste je buď převést na InnoDB, nebo použít jinou metodu zřizování. Zasahuje také do jazyka Data Definition Language – ALTER budou blokovány a budou blokovány operacemi klonování.

Ve výchozím nastavení není klonování šifrováno, takže jej lze použít pouze v zabezpečeném prostředí. V případě potřeby můžete pro proces klonování nastavit šifrování SSL tím, že zajistíte, že dárce má nakonfigurované SSL, a poté na spojovacím prvku definujte následující proměnné:

clone_ssl_ca=/path/to/ca.pem

clone_ssl_cert=/path/to/client-cert.pem

clone_ssl_key=/path/to/client-key.pem

Potom musíte přidat „VYŽADOVAT SSL;“ na konci příkazu CLONE a proces bude proveden se šifrováním SSL. Mějte prosím na paměti, že toto je jediný způsob klonování databází s povoleným šifrováním dat v klidu.

Jak jsme zmínili na začátku, klonování bylo s největší pravděpodobností navrženo s ohledem na MySQL Group Replication/InnoDB Cluster, ale pokud omezení neovlivňují konkrétní případ použití, lze jej použít jako nativní způsob poskytování jakékoli instance MySQL. Uvidíme, jak široké přijetí bude mít – možností je mnoho. Už teď je skvělé, že nyní máme další hardwarově agnostickou metodu, kterou můžeme použít k poskytování serverů kromě Xtrabackup. Konkurence je vždy dobrá a těšíme se, co přinese budoucnost.


  1. OBJEDNAT PODLE seznamu hodnot IN

  2. Zkontrolujte, zda je na propojeném serveru povolen RPC Out

  3. Vytvoření sekvence PostgreSQL do pole (které není ID záznamu)

  4. Jak vytvořím kontrolní omezení pro více tabulek?