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:
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:
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:
Trong đó:
REPLICATION_USER
là username sẽ được tạoREPLICATION_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:
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:
Trong đó:
REPLICATION_USER
là username đã được tạo ở source nodeREPLICATION_PASSWORD
là password của username bên trênMASTER_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:
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:
Ta đã thấy current position binlog ở cả source & destination node đã bằng nhau (1921) thông qua giá trị Master_Log_File
, Read_Master_Log_Pos
& Exec_Master_Log_Pos
Thực hiện shutdown trên source node với command:
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:
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> & option
sẽ đả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:
Thay đổi new master thành destination node với command:
Kiểm tra trạng thái đồng bộ với destination node với command:
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