sql >> Database >  >> RDS >> Mysql

Een MySQL 8.0-replicatieslave opnieuw opbouwen met een kloonplug-in

Met MySQL 8.0 heeft Oracle een nieuwe benadering van ontwikkeling aangenomen. In plaats van functies te pushen met hoofdversies, wordt bijna elke kleine MySQL 8.0-versie geleverd met nieuwe functies of verbeteringen. Een van deze nieuwe functies is waar we ons in deze blogpost op willen richten.

Historisch gezien kwam MySQL niet met goede hulpmiddelen voor het inrichten. Natuurlijk had je mysqldump, maar het is gewoon een logische back-uptool, niet echt geschikt voor grotere omgevingen. MySQL enterprise-gebruikers kunnen profiteren van MySQL Enterprise Backup, terwijl community-gebruikers xtrabackup kunnen gebruiken. Geen van beide kwam echter met schone MySQL Community-implementaties. Het was best vervelend, aangezien provisioning een taak is die je vaak doet. Mogelijk moet u een nieuwe slave bouwen, een mislukte opnieuw opbouwen - dit alles vereist een soort gegevensoverdracht tussen afzonderlijke knooppunten.

MySQL 8.0.17 introduceerde een nieuwe manier om MySQL-gegevens te leveren:kloonplug-in. Het was bedoeld met MySQL Group Replication in gedachten om een ​​manier te introduceren voor automatische provisioning en het opnieuw opbouwen van defecte nodes, maar het nut ervan is niet beperkt tot dat gebied. We kunnen het net zo goed gebruiken om een ​​slave-knooppunt opnieuw op te bouwen of een nieuwe server in te richten. In deze blogpost willen we je laten zien hoe je de MySQL Clone-plug-in instelt en hoe je een replicatieslave opnieuw opbouwt.

Allereerst moet de plug-in zijn ingeschakeld omdat deze standaard is uitgeschakeld. Zodra u dit doet, blijft het ingeschakeld door opnieuw op te starten. In het ideale geval doet u dit op alle knooppunten in de replicatietopologie.

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

Query OK, 0 rows affected (0.00 sec)

Kloon-plug-in vereist MySQL-gebruiker met de juiste rechten. Bij donor moet het het recht "BACKUP_ADMIN" hebben, terwijl het bij de schrijnwerker het recht "CLONE_ADMIN" moet hebben. Ervan uitgaande dat u de kloonplug-in uitgebreid wilt gebruiken, kunt u gewoon een gebruiker met beide privileges maken. Doe het op de master zodat de gebruiker ook op alle slaves wordt aangemaakt. Je weet immers nooit welk knooppunt in de toekomst een master zal zijn, daarom is het handiger om alles van tevoren te hebben voorbereid.

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)

De plug-in voor MySQL Clone heeft enkele vereisten, dus er moeten gezondheidschecks worden uitgevoerd. U moet ervoor zorgen dat zowel donor als deelnemer dezelfde waarden hebben in de volgende configuratievariabelen:

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)

Vervolgens, op de master, moeten we controleren of de ongedaan maken-tabelruimten unieke namen hebben:

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)

Standaard breedsprakigheidsniveau toont niet te veel gegevens over het kloonproces, daarom raden we aan om het te verhogen om beter inzicht te krijgen in wat er gebeurt:

mysql> SET GLOBAL log_error_verbosity=3;

Query OK, 0 rows affected (0.00 sec)

Om het proces op onze joiner te kunnen starten, moeten we een geldige donor configureren:

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)

Als het eenmaal op zijn plaats is, kunnen we het gebruiken om de gegevens te kopiëren van:

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

Query OK, 0 rows affected (18.30 sec)

Dat is het, de voortgang kan worden gevolgd in het MySQL-foutlogboek op de joiner. Zodra alles klaar is, hoeft u alleen nog maar de replicatie in te stellen:

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)

Houd er rekening mee dat de Clone-plug-in een aantal beperkingen heeft. Om te beginnen worden alleen InnoDB-tabellen overgedragen, dus als u andere opslagengines gebruikt, moet u deze ofwel naar InnoDB converteren of een andere inrichtingsmethode gebruiken. Het interfereert ook met Data Definition Language - ALTER's zullen blokkeren en worden geblokkeerd door kloonbewerkingen.

Standaard is klonen niet versleuteld, dus het kan alleen in een beveiligde omgeving worden gebruikt. Indien nodig kunt u SSL-codering voor het kloonproces instellen door ervoor te zorgen dat de donor SSL heeft geconfigureerd en vervolgens de volgende variabelen op de joiner te definiëren:

clone_ssl_ca=/path/to/ca.pem

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

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

Vervolgens moet u "SSL VEREIST;" toevoegen aan het einde van het CLONE-commando en het proces wordt uitgevoerd met SSL-codering. Houd er rekening mee dat dit de enige methode is om databases te klonen met data-at-rest-codering ingeschakeld.

Zoals we in het begin al zeiden, was klonen hoogstwaarschijnlijk ontworpen met MySQL Group Replication/InnoDB Cluster in gedachten, maar zolang de beperkingen geen specifieke use-case beïnvloeden, kan het worden gebruikt als een native manier om een ​​MySQL-instantie in te richten. We zullen zien hoe breed de adoptie zal zijn - de mogelijkheden zijn talrijk. Wat al geweldig is, is dat we nu een andere hardware-agnostische methode hebben die we kunnen gebruiken om servers in te richten naast Xtrabackup. Concurrentie is altijd goed en we kijken uit naar wat de toekomst in petto heeft.


  1. Android Sqlite onupgrade verwijder tabel uit database

  2. Records filteren met de aggregatiefunctie AVG

  3. SQL ALTER DATABASE-syntaxis - weergegeven door DBMS

  4. Hoe u alle tabellen in Oracle kunt weergeven