Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Membangun kembali Budak Replikasi MySQL 8.0 Menggunakan Plugin Klon

Dengan MySQL 8.0 Oracle mengadopsi pendekatan baru untuk pengembangan. Alih-alih mendorong fitur dengan versi utama, hampir setiap versi minor MySQL 8.0 hadir dengan fitur atau peningkatan baru. Salah satu fitur baru ini adalah apa yang ingin kami fokuskan dalam posting blog ini.

Secara historis MySQL tidak datang dengan alat yang baik untuk penyediaan. Tentu, Anda memiliki mysqldump, tetapi itu hanya alat pencadangan logis, tidak terlalu cocok untuk lingkungan yang lebih besar. Pengguna perusahaan MySQL dapat memanfaatkan MySQL Enterprise Backup sementara pengguna komunitas dapat menggunakan xtrabackup. Tak satu pun dari mereka datang dengan penyebaran Komunitas MySQL yang bersih. Itu cukup mengganggu karena penyediaan adalah tugas yang cukup sering Anda lakukan. Anda mungkin perlu membuat slave baru, membangun kembali slave yang gagal - semua ini akan memerlukan semacam transfer data antara node yang terpisah.

MySQL 8.0.17 memperkenalkan cara baru dalam menyediakan data MySQL - plugin kloning. Itu dimaksudkan dengan Replikasi Grup MySQL dalam pikiran untuk memperkenalkan cara penyediaan otomatis dan pembangunan kembali node yang gagal, tetapi kegunaannya tidak terbatas pada area itu. Kita juga dapat menggunakannya untuk membangun kembali node budak atau menyediakan server baru. Dalam posting blog ini kami ingin menunjukkan kepada Anda cara menyiapkan plugin MySQL Clone dan cara membangun kembali budak replikasi.

Pertama-tama, plugin harus diaktifkan karena dinonaktifkan secara default. Setelah Anda melakukan ini, itu akan tetap diaktifkan melalui restart. Idealnya, Anda akan melakukannya di semua node dalam topologi replikasi.

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

Query OK, 0 rows affected (0.00 sec)

Plugin klon membutuhkan pengguna MySQL dengan hak istimewa yang tepat. Pada donor ia harus memiliki hak istimewa "BACKUP_ADMIN" sedangkan pada joiner ia harus memiliki hak istimewa "CLONE_ADMIN". Dengan asumsi Anda ingin menggunakan plugin klon secara ekstensif, Anda bisa membuat pengguna dengan kedua hak istimewa. Lakukan pada master sehingga pengguna akan dibuat juga pada semua budak. Lagi pula, Anda tidak pernah tahu node mana yang akan menjadi master di masa mendatang, oleh karena itu, lebih mudah untuk menyiapkan semuanya terlebih dahulu.

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)

Plugin MySQL Clone memiliki beberapa prasyarat sehingga pemeriksaan kewarasan harus dilakukan. Anda harus memastikan bahwa donor dan joiner akan memiliki nilai yang sama dalam variabel konfigurasi berikut:

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)

Kemudian, pada master, kita harus memeriksa ulang bahwa undo tablespace memiliki nama yang unik:

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)

Tingkat verbositas default tidak menunjukkan terlalu banyak data terkait proses kloning, oleh karena itu kami sarankan untuk meningkatkannya agar memiliki wawasan yang lebih baik tentang apa yang terjadi:

mysql> SET GLOBAL log_error_verbosity=3;

Query OK, 0 rows affected (0.00 sec)

Untuk dapat memulai proses pada joiner kita, kita harus mengonfigurasi donor yang valid:

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)

Setelah ditempatkan, kita dapat menggunakannya untuk menyalin data dari:

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

Query OK, 0 rows affected (18.30 sec)

Itu saja, kemajuannya dapat dilacak di log kesalahan MySQL pada joiner. Setelah semuanya siap, Anda hanya perlu menyiapkan replikasi:

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)

Harap diingat bahwa plugin Clone hadir dengan serangkaian batasan. Sebagai permulaan, ini hanya mentransfer tabel InnoDB jadi jika Anda menggunakan mesin penyimpanan lain, Anda harus mengonversinya ke InnoDB atau menggunakan metode penyediaan lain. Ini juga mengganggu Bahasa Definisi Data - ALTER akan memblokir dan diblokir oleh operasi kloning.

Secara default, kloning tidak dienkripsi sehingga hanya dapat digunakan di lingkungan yang aman. Jika diperlukan, Anda dapat mengatur enkripsi SSL untuk proses kloning dengan memastikan bahwa donor telah mengonfigurasi SSL dan kemudian menentukan variabel berikut pada joiner:

clone_ssl_ca=/path/to/ca.pem

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

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

Kemudian, Anda perlu menambahkan “REQUIRE SSL;” di akhir perintah CLONE dan proses akan dijalankan dengan enkripsi SSL. Harap diingat bahwa ini adalah satu-satunya metode untuk mengkloning database dengan enkripsi data-at-rest diaktifkan.

Seperti yang kami sebutkan di awal, kloning kemungkinan besar dirancang dengan mempertimbangkan MySQL Group Replication/InnoDB Cluster tetapi, selama batasannya tidak memengaruhi kasus penggunaan tertentu, itu dapat digunakan sebagai cara asli untuk menyediakan instance MySQL apa pun. Kita akan melihat seberapa luas adopsinya - kemungkinannya sangat banyak. Apa yang sudah hebat adalah kami sekarang memiliki metode agnostik perangkat keras lain yang dapat kami gunakan untuk menyediakan server selain Xtrabackup. Persaingan selalu baik dan kami menantikan untuk melihat apa yang akan terjadi di masa depan.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menulis REST API?

  2. Bagaimana cara mencocokkan email atau telepon dengan Elasticsearch?

  3. Banyak Hitungan dengan Kondisi Berbeda dalam satu permintaan MySQL

  4. PDO MySQL:Gunakan PDO::ATTR_EMULATE_PREPARES atau tidak?

  5. Cara mengecilkan/membersihkan file ibdata1 di MySQL