sql >> Database teknologi >  >> RDS >> Mysql

Genopbygning af en MySQL 8.0-replikeringsslave ved hjælp af et klonplugin

Med MySQL 8.0 adopterede Oracle en ny tilgang til udvikling. I stedet for at skubbe funktioner med større versioner, kommer næsten alle mindre MySQL 8.0-versioner med nye funktioner eller forbedringer. En af disse nye funktioner er, hvad vi gerne vil fokusere på i dette blogindlæg.

Historisk set kom MySQL ikke med gode værktøjer til klargøring. Sikker på, du havde mysqldump, men det er bare et logisk sikkerhedskopieringsværktøj, der ikke rigtig er egnet til større miljøer. MySQL enterprise-brugere kunne drage fordel af MySQL Enterprise Backup, mens community-brugere kunne bruge xtrabackup. Ingen af ​​dem kom dog med en ren MySQL Community-implementering. Det var ret irriterende, da klargøring er en opgave, du udfører ret ofte. Du skal muligvis bygge en ny slave, genopbygge en mislykket - alt dette vil kræve en form for dataoverførsel mellem separate noder.

MySQL 8.0.17 introducerede en ny måde at klargøre MySQL-data på - klon-plugin. Det var hensigten med MySQL Group Replication i tankerne at introducere en måde til automatisk klargøring og genopbygning af mislykkede noder, men dens anvendelighed er ikke begrænset til dette område. Vi kan lige så godt bruge det til at genopbygge en slavenode eller klargøre en ny server. I dette blogindlæg vil vi gerne vise dig, hvordan du opsætter MySQL Clone-plugin, og hvordan du genopbygger en replikeringsslave.

Først og fremmest skal plugin'et være aktiveret, da det er deaktiveret som standard. Når du gør dette, forbliver det aktiveret gennem genstart. Ideelt set vil du gøre det på alle noderne i replikationstopologien.

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

Query OK, 0 rows affected (0.00 sec)

Klon-plugin kræver en MySQL-bruger med de rette rettigheder. På donor skal det have "BACKUP_ADMIN"-privilegium, mens det på joiner skal have "CLONE_ADMIN"-privilegium. Hvis du antager, at du vil bruge klon-pluginet i vid udstrækning, kan du bare oprette bruger med begge privilegier. Gør det på masteren, så brugeren også bliver oprettet på alle slaverne. Når alt kommer til alt, ved du aldrig, hvilken node der bliver en mester i fremtiden, derfor er det mere bekvemt at have alt forberedt på forhånd.

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)

MySQL Clone plugin har nogle forudsætninger, derfor bør sundhedstjek udføres. Du bør sikre dig, at både donor og joiner har de samme værdier i følgende konfigurationsvariable:

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)

Så skal vi på masteren dobbelttjekke, at fortryd tablespaces har unikke navne:

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)

Standard verbosity-niveau viser ikke for mange data vedrørende kloningsprocessen, derfor vil vi anbefale at øge det for at få bedre indsigt i, hvad der sker:

mysql> SET GLOBAL log_error_verbosity=3;

Query OK, 0 rows affected (0.00 sec)

For at kunne starte processen på vores joiner, skal vi konfigurere en gyldig donor:

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)

Når den er på plads, kan vi bruge den til at kopiere data fra:

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

Query OK, 0 rows affected (18.30 sec)

Det er det, fremskridtet kan spores i MySQL-fejlloggen på joineren. Når alt er klar, skal du blot konfigurere replikeringen:

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)

Husk venligst, at Clone-plugin kommer med et sæt begrænsninger. Til at begynde med overfører den kun InnoDB-tabeller, så hvis du tilfældigvis bruger andre lagermotorer, skal du enten konvertere dem til InnoDB eller bruge en anden klargøringsmetode. Det forstyrrer også Data Definition Language - ALTERs vil blokere og blive blokeret af kloningsoperationer.

Som standard er kloning ikke krypteret, så det kan kun bruges i et sikkert miljø. Hvis det er nødvendigt, kan du konfigurere SSL-kryptering til kloningsprocessen ved at sikre, at donoren har SSL konfigureret og derefter definere følgende variabler på joineren:

clone_ssl_ca=/path/to/ca.pem

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

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

Derefter skal du tilføje "REQUIRE SSL;" i slutningen af ​​CLONE-kommandoen, og processen vil blive udført med SSL-kryptering. Husk venligst, at dette er den eneste metode til at klone databaser med data-at-rest-kryptering aktiveret.

Som vi nævnte i begyndelsen, var kloning højst sandsynligt designet med MySQL Group Replication/InnoDB Cluster i tankerne, men så længe begrænsningerne ikke påvirker bestemte anvendelsestilfælde, kan den bruges som en indbygget måde at klargøre enhver MySQL-instans på. Vi vil se, hvor bred adoption det vil have - mulighederne er mange. Hvad der allerede er fantastisk er, at vi nu har en anden hardware-agnostisk metode, vi kan bruge til at klargøre servere ud over Xtrabackup. Konkurrence er altid godt, og vi glæder os til at se, hvad fremtiden bringer.


  1. ORACLE 11g ufølsom overfor store og små bogstaver som standard

  2. Sådan fungerer Abs() i PostgreSQL

  3. Hvorfor får jeg denne SQLSyntaxErrorException:ORA-00933:SQL-kommando blev ikke afsluttet korrekt, når jeg forsøger at udføre denne JDBC-forespørgsel?

  4. Installation af Ubuntu 18.04 til SQL Server 2019 på virtuel maskine ved hjælp af VMware Workstation