Mysql
 sql >> база данни >  >> RDS >> Mysql

Възстановяване на MySQL 8.0 Slave за репликация с помощта на Clone Plugin

С MySQL 8.0 Oracle възприе нов подход към разработката. Вместо да прокарват функции с основните версии, почти всяка второстепенна версия на MySQL 8.0 идва с нови функции или подобрения. Една от тези нови функции е това, върху което бихме искали да се съсредоточим в тази публикация в блога.

Исторически MySQL не идваше с добри инструменти за обезпечаване. Разбира се, имахте mysqldump, но това е просто инструмент за логично архивиране, който не е подходящ за по-големи среди. Корпоративните потребители на MySQL могат да се възползват от MySQL Enterprise Backup, докато потребителите в общността могат да използват xtrabackup. Нито едно от тях обаче не дойде с чисти разгръщания на MySQL Community. Беше доста досадно, тъй като осигуряването е задача, която вършите доста често. Може да се наложи да изградите нов подчинен, да възстановите неуспешен – всичко това ще изисква някакъв вид трансфер на данни между отделни възли.

MySQL 8.0.17 въведе нов начин за предоставяне на MySQL данни - плъгин за клониране. Имаше предвид MySQL Group Replication, за да въведе начин за автоматично осигуряване и възстановяване на неуспешни възли, но неговата полезност не се ограничава до тази област. Можем да го използваме и за възстановяване на подчинен възел или за осигуряване на нов сървър. В тази публикация в блога бихме искали да ви покажем как да настроите MySQL Clone плъгин и как да изградите отново роб за репликация.

Първо, плъгинът трябва да бъде активиран, тъй като е деактивиран по подразбиране. След като направите това, той ще остане активиран чрез рестартиране. В идеалния случай ще го направите на всички възли в топологията на репликация.

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

Query OK, 0 rows affected (0.00 sec)

Плъгинът за клониране изисква потребител на MySQL с подходящи привилегии. На донор трябва да има привилегия „BACKUP_ADMIN“, докато на присъединителя трябва да има привилегия „CLONE_ADMIN“. Ако приемем, че искате да използвате широко приставката за клониране, можете просто да създадете потребител с двете привилегии. Направете го на главния, така че потребителят ще бъде създаден и на всички подчинени. В крайна сметка никога не знаете кой възел ще бъде главен в бъдеще, затова е по-удобно всичко да е подготвено предварително.

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 има някои предпоставки, така че трябва да се извършат проверки за здравина. Трябва да се уверите, че и donor, и joiner ще имат еднакви стойности в следните конфигурационни променливи:

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)

След това, на главния, трябва да проверим отново дали пространствата за отмяна на таблици имат уникални имена:

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)

Нивото на подробност по подразбиране не показва твърде много данни относно процеса на клониране, затова бихме препоръчали да го увеличите, за да имате по-добра представа за случващото се:

mysql> SET GLOBAL log_error_verbosity=3;

Query OK, 0 rows affected (0.00 sec)

За да можем да стартираме процеса на нашия съединител, трябва да конфигурираме валиден донор:

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)

След като е на място, можем да го използваме, за да копираме данните от:

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

Query OK, 0 rows affected (18.30 sec)

Това е, напредъкът може да бъде проследен в дневника за грешки на MySQL на стола. След като всичко е готово, всичко, което трябва да направите, е да настроите репликацията:

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)

Моля, имайте предвид, че плъгинът Clone идва с набор от ограничения. Като за начало, той прехвърля само InnoDB таблици, така че ако случайно използвате други машини за съхранение, ще трябва или да ги конвертирате в InnoDB, или да използвате друг метод за осигуряване. Освен това пречи на езика за дефиниране на данни – ALTER ще блокират и ще бъдат блокирани от операции за клониране.

По подразбиране клонирането не е криптирано, така че може да се използва само в защитена среда. Ако е необходимо, можете да настроите SSL криптиране за процеса на клониране, като се уверите, че донорът е конфигурирал SSL и след това дефинирате следните променливи на съединителя:

clone_ssl_ca=/path/to/ca.pem

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

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

След това трябва да добавите „ИЗИСКВА SSL;“ в края на командата CLONE и процесът ще бъде изпълнен със SSL криптиране. Моля, имайте предвид, че това е единственият метод за клониране на бази данни с активирано криптиране на данни в покой.

Както споменахме в началото, клонирането най-вероятно е проектирано с MySQL Group Replication/InnoDB Cluster в ума, но доколкото ограниченията не засягат конкретен случай на употреба, то може да се използва като роден начин за предоставяне на всеки MySQL екземпляр. Ще видим колко широко приемане ще има - възможностите са многобройни. Това, което вече е страхотно, е, че вече имаме друг хардуерно-агностичен метод, който можем да използваме за осигуряване на сървъри в допълнение към Xtrabackup. Конкуренцията винаги е добра и с нетърпение очакваме да видим какво ни носи бъдещето.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Еквивалент на varchar(max) в MySQL?

  2. MySQL REPLACE() – Заменете всички екземпляри на подниз с друг низ

  3. Как да покажа дата като iso 8601 формат с PHP

  4. Python SQL – Как да използвате SQLite, MySQL и PostgreSQL бази данни с Python

  5. Как да премахнете всички MySQL таблици от командния ред без DROP разрешения за база данни?