MySQL Replication là gì? Ưu Điểm và Các Trường Hợp Sử Dụng

MySQL Replication là quy trình trong đó dữ liệu từ một cơ sở dữ liệu (master) được sao chép sang một hoặc nhiều cơ sở dữ liệu khác (replica hoặc slave),...Tìm hiểu chi tiết về ưu điểm và các trường hợp sử dụng tính năng sao chép này trong MySQL nhé!

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.

MySQL Replication là gì? Ưu Điểm và Các Trường Hợp Sử Dụng
MySQL Replication là gì?

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é!

Nguyễn Đức Hòa

Xin chào, mình là Nguyễn Đức Hoà, hiện đang đảm nhận vị trí Trưởng phòng kỹ thuật tại LANIT. Với 8 năm kinh nghiệm trong mảng System, Network , Security; mình luôn hướng đến việc tìm kiếm và áp dụng các giải pháp kỹ thuật tiên tiến nhất cho mọi dự án. Công việc của mình không chỉ dừng lại ở việc quản lý mà còn mang đến cho khách hàng những giải pháp lưu trữ dữ liệu tốt nhất hiện nay. Rất hy vọng những kinh nghiệm và chia sẻ của mình sẽ mang lại nhiều giá trị hữu ích cho các bạn.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!