Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Xây dựng lại MySQL 8.0 Replication Slave bằng cách sử dụng một plugin nhân bản

Với MySQL 8.0, Oracle đã áp dụng một cách tiếp cận mới để phát triển. Thay vì thúc đẩy các tính năng với các phiên bản chính, hầu hết mọi phiên bản MySQL 8.0 nhỏ đều đi kèm với các tính năng hoặc cải tiến mới. Một trong những tính năng mới này là những gì chúng tôi muốn tập trung vào trong bài đăng trên blog này.

MySQL trước đây không đi kèm với các công cụ tốt để cung cấp. Chắc chắn, bạn đã có mysqldump, nhưng nó chỉ là một công cụ sao lưu logic, không thực sự phù hợp với các môi trường lớn hơn. Người dùng MySQL Enterprise có thể được hưởng lợi từ MySQL Enterprise Backup trong khi người dùng cộng đồng có thể sử dụng xtrabackup. Tuy nhiên, cả hai đều không đi kèm với triển khai Cộng đồng MySQL sạch. Nó khá khó chịu vì cung cấp là một nhiệm vụ bạn làm khá thường xuyên. Bạn có thể cần phải tạo một nô lệ mới, xây dựng lại một nô lệ bị lỗi - tất cả những điều này sẽ yêu cầu một số loại truyền dữ liệu giữa các nút riêng biệt.

MySQL 8.0.17 đã giới thiệu một cách mới để cung cấp dữ liệu MySQL - plugin nhân bản. Mục đích của MySQL Group Replication là giới thiệu một cách cung cấp tự động và xây dựng lại các nút bị lỗi, nhưng tính hữu ích của nó không chỉ giới hạn ở khu vực đó. Chúng tôi cũng có thể sử dụng nó để xây dựng lại một nút nô lệ hoặc cung cấp một máy chủ mới. Trong bài đăng trên blog này, chúng tôi muốn hướng dẫn bạn cách thiết lập plugin MySQL Clone và cách xây dựng lại nô lệ sao chép.

Trước hết, plugin phải được bật vì nó bị tắt theo mặc định. Sau khi bạn làm điều này, nó sẽ vẫn được kích hoạt thông qua các lần khởi động lại. Lý tưởng nhất là bạn sẽ làm điều đó trên tất cả các nút trong cấu trúc liên kết sao chép.

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

Query OK, 0 rows affected (0.00 sec)

Plugin sao chép yêu cầu người dùng MySQL có các đặc quyền thích hợp. Đối với nhà tài trợ, nó phải có đặc quyền “BACKUP_ADMIN” trong khi ở người tham gia, nó phải có đặc quyền “CLONE_ADMIN”. Giả sử bạn muốn sử dụng rộng rãi plugin nhân bản, bạn có thể tạo người dùng có cả hai đặc quyền. Làm điều đó trên master để người dùng cũng sẽ được tạo trên tất cả các nô lệ. Rốt cuộc, bạn không bao giờ biết nút nào sẽ là nút chính trong tương lai, do đó sẽ thuận tiện hơn nếu bạn chuẩn bị trước mọi thứ.

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 có một số điều kiện tiên quyết, do đó cần thực hiện kiểm tra sự tỉnh táo. Bạn nên đảm bảo rằng cả nhà tài trợ và người tham gia sẽ có cùng giá trị trong các biến cấu hình sau:

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)

Sau đó, trên trang cái, chúng ta nên kiểm tra kỹ để đảm bảo không gian bảng hoàn tác có tên duy nhất:

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)

Mức độ chi tiết mặc định không hiển thị quá nhiều dữ liệu liên quan đến quá trình nhân bản, do đó chúng tôi khuyên bạn nên tăng mức đó để có cái nhìn sâu sắc hơn về những gì đang xảy ra:

mysql> SET GLOBAL log_error_verbosity=3;

Query OK, 0 rows affected (0.00 sec)

Để có thể bắt đầu quá trình trên trình kết hợp của chúng tôi, chúng tôi phải định cấu hình nhà tài trợ hợp lệ:

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)

Khi nó ở đúng vị trí, chúng tôi có thể sử dụng nó để sao chép dữ liệu từ:

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

Query OK, 0 rows affected (18.30 sec)

Vậy là xong, tiến trình có thể được theo dõi trong nhật ký lỗi MySQL trên trình kết hợp. Khi mọi thứ đã sẵn sàng, tất cả những gì bạn phải làm là thiết lập bản sao:

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)

Xin lưu ý rằng plugin Clone đi kèm với một số hạn chế. Đối với người mới bắt đầu, nó chỉ chuyển các bảng InnoDB vì vậy nếu bạn tình cờ sử dụng bất kỳ công cụ lưu trữ nào khác, bạn sẽ phải chuyển đổi chúng sang InnoDB hoặc sử dụng phương pháp cung cấp khác. Nó cũng can thiệp vào Ngôn ngữ Định nghĩa Dữ liệu - ALTERs sẽ chặn và bị chặn bởi các hoạt động sao chép.

Theo mặc định, bản sao không được mã hóa nên chỉ có thể được sử dụng trong môi trường an toàn. Nếu cần, bạn có thể thiết lập mã hóa SSL cho quá trình sao chép bằng cách đảm bảo rằng nhà tài trợ đã định cấu hình SSL và sau đó xác định các biến sau trên trình kết hợp:

clone_ssl_ca=/path/to/ca.pem

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

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

Sau đó, bạn cần thêm “YÊU CẦU SSL;” ở cuối lệnh CLONE và quá trình sẽ được thực hiện với mã hóa SSL. Xin lưu ý rằng đây là phương pháp duy nhất để sao chép cơ sở dữ liệu có bật mã hóa dữ liệu lúc nghỉ.

Như chúng ta đã đề cập ở phần đầu, rất có thể, nhân bản được thiết kế với MySQL Group Replication / InnoDB Cluster nhưng, miễn là các hạn chế không ảnh hưởng đến trường hợp sử dụng cụ thể, nó có thể được sử dụng như một cách tự nhiên để cung cấp bất kỳ phiên bản MySQL nào. Chúng ta sẽ thấy nó sẽ có khả năng áp dụng rộng rãi như thế nào - có rất nhiều khả năng. Điều tuyệt vời đã xảy ra là giờ đây chúng tôi có một phương pháp bất khả tri phần cứng khác mà chúng tôi có thể sử dụng để cung cấp máy chủ ngoài Xtrabackup. Cạnh tranh luôn tốt và chúng tôi đang mong chờ xem tương lai sẽ như thế nào.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giới hạn điều kiện MySQL IN

  2. Hiểu về BẢNG TRUNCATE của MySQL bằng các ví dụ thực tế

  3. Sự khác biệt giữa bảng mã utf8mb4 và utf8 trong MySQL là gì?

  4. MIN () - Tìm giá trị nhỏ nhất trong một cột trong MySQL

  5. Các bước cài đặt MySQL8 trên CentOS