MySQL Replication là gì?
MySQL Replication là một quá trình cho phép chuyển dữ liệu từ một máy chủ MySQL chính (Master) sang một hoặc nhiều máy chủ MySQL khác (Slave) thông qua mạng để đồng bộ hóa với dữ liệu chính giữa các máy chủ MySQL.
Tính năng này rất tiện lợi vì nó cho phép mở rộng bằng cách phân bổ quyền truy cập đọc cho nhiều máy chủ, tạo điều kiện sao lưu dữ liệu và cho phép phân tích dữ liệu trên Slave mà không cần truy cập vào máy chủ Master.
Cách thức hoạt động của MySQL Replication
Replication hoạt động dựa trên các master lưu giữ theo dõi tất cả những thay đổi cơ sở dữ liệu của nó trong nhật ký. Nó sử dụng bin-logs cho mục đích này. Có các tệp nhị phân chứ các hướng dẫn mà máy chủ chính đã thực hiện.
Mỗi slave kết nối đến các master yêu cầu một bản sao của bạn ghi nhị phân, các slave cũng thực hiện các sự kiện từ các bản ghi nhị phân mà nó nhận được. Kết quả của công việc này là hai cơ sở dữ liệu giống hệt nhau.
Cơ chế Replication sẽ khởi chạy các luồng bổ sung ở phía máy chủ. Mỗi luồng sẽ xuất hiện trên máy chủ chính (cho mỗi máy chủ phụ) và chịu trách nhiệm gửi Bin-logs đến các máy chủ phụ.
Chi tiết cách thực thi trong Replication như sau:
Luồng Binlog dump: Các master tạo 1 luồng và gửi nội dung Binary log đến Slave, khi Slave kết nối với Master. Luồng này có thể được xác định trong đầu ra trên master. Các Binary Log trên bản ghi nhị phân của Master đọc các sự kiện đó và gửi đến Slave. Sau khi được đọc, khóa được phát hành khi sự kiện được gửi tới Slave.
Luồng Slave I/O: Khi thông báo Slave được phát trên Slave Server, các Slave sẽ tạo một luồng I/O để đọc sự thay đổi trên luồng Binlog Dump của master gửi và sao chép chúng.
Luồng Slave SQL: Các slave tạo ra một luồng SQL để đọc cái log trễ và sẽ được ghi vào luồng slave I/O, rồi thực thi sự kiện trong đó.
Ưu điểm của tính năng Replication trong MySQL
- Tăng hiệu suất hệ thống: Giảm tải cho cơ sở dữ liệu Server Master, tải trọng của Server được giảm tải cho các Slave, giúp cải thiện hiệu năng cho toàn hệ thống. Quá trình ghi và cập nhật đều diễn tra trên Server master và quá trình đọc diễn ra trên một hoặc nhiều Slave nên giúp tăng đáng kể hiệu năng cho toàn hệ thống.
- Tính bảo mật cao: Dữ liệu được sao chép đến các Slave và Slave có thể tạm dừng việc sao chép, nó có thể chạy các dịch vụ sao lưu trên các Slave mà không làm ảnh hưởng đến dữ liệu tổng thể.
- Tăng khả năng chịu lỗi: Trong trường hợp máy chủ chính gặp sự cố, các bản sao trên máy chủ phụ vẫn đáp ứng yêu cầu người dùng.
- Phân phối dữ liệu từ xa: Bạn có thể sử dụng replication để tạo một bản sao của dữ liệu cho một web từ xa để sử dụng mà không cần truy cập thường xuyên vào Master.
Các trường hợp sử dụng MySQL Replication
Sau đây là các trường hợp sử dụng Replication phổ biến để cải thiện hiệu suất như: Kết nối chỉ đọc, sao lưu, phân tích, nâng cấp theo kế hoạch.
Kết nối chỉ đọc
Một cụm MySQL có thể chứa nhiều máy chủ cơ sở dữ liệu đang hoạt động thì Replication thường được cấu hình theo cấu hình chủ động/thụ động.
Tại đây, máy chủ “chủ động” là máy chủ mà tất cả các yêu cầu sẽ được gửi đến theo mặc định và máy chủ “thụ động” là bản sao chứa bản sao chỉ đọc của cơ sở dữ liệu.
Sao lưu
Việc sao lưu cơ sở dữ liệu là việc làm rất quan trọng. Nếu chẳng may dữ liệu của bạn bị hỏng hoặc bị thay đổi ngoài ý muốn, các bản sao lưu tốt có thể giúp bạn giảm thời gian ngừng hoạt động hoặc giảm thiệt hại cho doanh nghiệp của bạn.
Khối lượng công việc phân tích
Ở các giải pháp phân tích, dữ liệu từ cơ sở dữ liệu thường được quét tại một thời điểm cụ thể và chuyển đến kho dữ liệu. Trong quá trình này, người dùng có thể nhận thấy sự giảm hiệu suất trong khi dữ liệu đang được phân tích cú pháp vào kho dữ liệu. Do đó, bản sao là giải pháp hoàn hảo để hạn chế sự cố về hiệu suất này. Bằng cách định cấu hình các giải pháp phân tích để đọc các bản sao, người dùng sẽ không bị ảnh hưởng bởi việc này.
Tính khả dụng cao
Một môi trường sao chép được thiết kế tốt có thể giúp ứng dụng của bạn hoạt động trực tuyến tốt nhất. Bạn sẽ không tránh khỏi việc tất cả phần cứng sẽ hỏng vào một thời điểm nào đó. Ngay cả khi bạn có bản sao lưu tốt, cơ sở dữ liệu của bạn ngừng hoạt động và mất nhiều thời gian để thiết lập máy chủ mới, khôi phục dữ liệu, bạn sẽ phải đối mặt với tình trạng mất điện kéo dài.
Tuy nhiên, việc sử dụng tính năng dụng Replication, bạn chỉ cần thực hiện thay đổi cấu hình trên bản sao để nâng cấp máy chủ chính mới, cho phép ghi dữ liệu. Và khi kết hợp với giải pháp cân bằng tải tốt, sẽ giúp cơ sở dữ liệu của bạn hoạt động trở lại nhanh chóng.
Nâng cấp theo kế hoạch
Khi các phiên bản MySQL mới được phát hành, doanh nghiệp nên có chiến lược để cập nhật máy chủ của mình lên phiên bản mới nhất. Nếu bạn đã cấu hình sao chép, bạn có thể thực hiện kiểm tra và xác thực các bản nâng cấp trên bản sao của mình để giảm thiểu sự cố khi nâng cấp. Giúp tạo điều kiện cho việc nâng cấp liên tục.
Hướng dẫn thực hiện MySQL Replication
Bước 1: Cấu hình Master Database
sudo nano /etc/mysql/my.cnf
Đầu tiên, bạn tìm đến phần dạng như dưới đây để Binding server master localhost:
bind-address = 127.0.0.1
Tiến hành thay thế địa chỉ IP local thành địa chỉ Server.
Tiếp theo, thay đổi các server-id, nằm trong phần [mysqlId]. Bạn có thể chọn bất kì số nào, ví dụ như 1.
server-id = 1
Tiếp theo, bạn đặt đường dẫn file log cho MySQL. Các sự kiện của Slave được lưu trữ tại đây. Tìm đến dòng log_bin:
log_bin = /var/log/mysql/mysql-bin.log
Chỉ định cơ sở dữ liệu sẽ được sao chép trên các Slave. Bạn có thể chỉ định một hoặc nhiều Slave bằng cách lặp lại dòng này cho các cơ sở dữ liệu:
binlog_do_db = newdatabase
Sau khi xong, bạn cần lưu lại file cấu hình và khởi động lại MySQL
sudo service mysql restart
Tiếp theo, bạn mở MySQL và cấp quyền cho các Slave, có thể đặt tên, mật khẩu cho chúng.
Ngoài ra, bạn cần mở 1 tab mới và lựa chọn cơ sở dữ liệu của bạn.
USE newdatabase;
Và cần tiến hành khóa cơ sở dữ liệu mà sau này các slave để ở chế độ chỉ đọc
FLUSH TABLES WITH READ LOCK;
Để kiểm tra cơ sở dữ liệu, bạn sử dụng lệnh sau:
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | newdatabase | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Trong đó: Position là vị trí bắt đầu các slave sao lưu dữ liệu.
Căn cứ vào cơ sở dữ liệu đã bị khóa, ta cần Export cơ sở dữ liệu ra 1 file SQL để sử dụng cho bước 2.
mysqldump -u root -p --opt newdatabase > newdatabase.sql
Quay lại cửa sổ ban đầu và mở khóa cơ sở dữ liệu của bạn:
UNLOCK TABLES;
QUIT;
Bước 2: Cấu hình cơ sở dữ liệu slave
Đăng nhập vào Server Slave, mở MySQL để tạo cơ sở dữ liệu với tên gống hệt với cơ sở dữ liệu của Master:
CREATE DATABASE newdatabase;
EXIT;
Import cơ sở dữ liệu đã export ở bước 1.
mysql -u root -p newdatabase < /path/to/newdatabase.sql
Cấu hình các Slave giống hệt như việc cấu hình Master. Tuy nhiên, bạn cần thay đổi một số thông tin cho phù hợp với Server-id:
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = newdatabase
Khởi động lại MySQL của Slave:
sudo service mysql restart
Sau đó, cấp quyền và cho phép sao chép bên trong MySQL Shell. Bật lại MySQL Shell và thay thế các thông tin như sau:
CHANGE MASTER TO MASTER_HOST='12.34.56.789',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;
Giải thích:
- Chỉ định các máy chủ hiện tại là Slave của Server Master
- Cung cấp thông tin đăng nhập chính xác cho máy chủ
- Chỉ định cho các Slave biết là cần sao lưu từ file log nào và đăng nhập từ vị trí đã được định nghĩa trong position nào.
Sau đó, tiến hành Active Server Slave
Lời kết
Trên đây, LANIT đã chia sẻ chi tiết về MySQL Replication – tính năng sao chép hữu ích trên MySQL, giúp hệ thống có tính sẵn sàng cao, cải thiện hiệu suất và mở rộng linh hoạt. Nếu bạn còn thắc mắc nào khi tìm hiểu về MySQL cũng như có nhu cầu thuê VPS để phát triển các dự án trên MySQL liên hệ ngay LANIT để được tư vấn chi tiết nhé!