Migrate data giữa các MariaDB/ MySQL server

759
03-06-2023
Migrate data giữa các MariaDB/ MySQL server

Vấn đề

Việc migrate data giữa các server từ môi trường này đến môi trường khác vẫn luôn là vấn đề cần được quan tâm.

Để migrate data của MariaDB/ MySQL giữa các server trong thời gian downtime ngắn nhất, chúng ta có thể setup server cần migrate data thành một replica server sau đó demote server ở môi trường không dùng thành replica server và ngược lại. Thực hiện như này sẽ giúp chúng ta có thể rollback lại dễ dàng trong trường hợp cần thiết mà không cần phải lo lắng quá nhiều về việc mất dữ liệu.

Yêu cầu cần có trước khi thực hiện cấu hình

Để có thể thực hiện cấu hình thì cần cài đặt các database node và bin log đã được enable:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 1.

Trên node replica sẽ cần thêm cấu hình sau read>

Thông thường, đối với việc sử dụng DBaaS trên các Cloud Provider, chúng ta không cần phải thực hiện việc này. Tuy nhiên, chúng ta cần phải làm như sau khi không sử dụng DBaaS. Dưới đây là cách thực hiện trên hệ điều hành Ubuntu 22.04 & MariaDB version 10.4 cùng mô hình: 

Migrate data giữa các MariaDB/ MySQL server - Ảnh 2.

Trong đó:

  • Node MariaDB (bên trái) là source node và đang có dữ liệu
  • Node MariaDB (bên phải) là destination node và chưa có dữ liệu.

Chúng ta sẽ thực hiện migrate data từ source node sang destination node.

Yêu cầu thực hiện cấu hình

1. Thực hiện công việc chuẩn bị cho cấu hình

Trên source node, để có thể cấu hình replica giữa các node và đồng bộ dữ liệu, chúng ta cần phải tạo ra một user cho phép thực hiện điều này như sau:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 3.

Trong đó:

  • REPLICATION_USER là username sẽ được tạo 
  • REPLICATION_PASSWORD là password của username bên trên

Thực hiện dump database để có thể import vào destination node: 

mysqldump --databases <databasename> > <databasename>.sql

Trong đó:

  • Databasename là tên database mà bạn muốn dữ liệu được di chuyển sang destination node. Tuy nhiên thì bạn cũng có thể thực hiện dump toàn bộ dữ liệu trên destination node nếu như muốn di chuyển toàn bộ database.

Trên destination node, thực hiện import data đã dump ở trên vào destination node:

mysql --user=root --password < <databasename>.sql

Tại thời điểm này, chúng ta cần thay đổi config server-id để destination node có thể là unique trong cluster:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 4.

 Thực hiện restart lại database service để đọc cấu hình mới với command:

systemctl restart mysql

2. Thực hiện cấu hình

Tại thời điểm này, trên destination node chúng ta cần phải chỉ định source node là source data để có thể đồng bộ dữ liệu với nhau. Thực hiện kết nối vào database trên destination node, sau đó chỉ định với command sau:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 5.

Trong đó:

  • REPLICATION_USER là username đã được tạo ở source node REPLICATION_PASSWORD là password của username bên trên 
  • MASTER_IP_ADDRESS là IP của source node (10.26.235.156)

Bắt đầu replica dữ liệu với command:

START SLAVE;

Kiểm tra lại trạng thái replica với command:

SHOW SLAVE STATUS\G;

Nếu bạn nhìn thấy text Waiting for master to send event thì có nghĩa là đã cấu hình thành công.

Thực hiện chuyển đổi destination node thành master node

Trên source node, chúng ta thực hiện lock không cho ghi dữ liệu mới vào bằng cách kết nối đến source node và sử dụng command sau:

FLUSH TABLES WITH READ LOCK;

Kiểm tra current position binlog trên source node với command:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 6.

Sau khi chờ cho tất cả các dữ liệu đã được đồng bộ xong từ source node, chúng ta có thể thực hiện và kiểm tra với command:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 7.

 Ta đã thấy current position binlog ở cả source & destination node đã bằng nhau (1921) thông qua giá trị Master_Log_FileRead_Master_Log_Pos & Exec_Master_Log_Pos

Thực hiện shutdown trên source node với command:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 8.

 Trên destination node, thực hiện bỏ config read_only đã thêm ban đầu và thực hiện reset master như sau:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 9.

Lúc này, chúng ta thực hiện reconect tất cả các kết nối cũ sang node destination để có thể tiếp tục đọc ghi dữ liệu.

3. Reconect source node

Để giảm thiếu rủi ro về dữ liệu xảy ra trong quá trình chuyển đổi, chúng ta có thể thực hiện reconect các replica của source node ban đầu tới destination node. Sau đó, thực hiện connect source node tiếp tục đồng bộ dữ liệu với destination node.

Thực hiện re-start MariaDB trên source node với config read> & option sau:  

mysqld --with-skip-slave-start <other options>

Config read> & optionsẽ đảm bảo khi source node được re-start sẽ không có bất kỳ sự cố nào xảy ra. Connect đến source node và sử dụng command sau:  

Migrate data giữa các MariaDB/ MySQL server - Ảnh 10.

Thay đổi new master thành destination node với command:

Migrate data giữa các MariaDB/ MySQL server - Ảnh 11.

Kiểm tra trạng thái đồng bộ với destination node với command: 

Migrate data giữa các MariaDB/ MySQL server - Ảnh 12.

 Như vậy, chúng ta đã thành công trong việc migrate dữ liệu giữa 2 server database MariaDB.

>> Có thể bạn quan tâm: Migrate data giữa các MongoDB servers

SHARE