Bỏ qua đến nội dung
KhaiziNam Blog KhaiziNam Blog
Quay lại
Read in English

Giới thiệu về MySQL Replication Master-Slave

Giới thiệu về MySql Replication

Khái niệm Replication

MySQL Replication là một quá trình cho phép bạn dễ dàng duy trì nhiều bản sao của dữ liệu MySQL bằng cách cho họ sao chép tự động từ một master tạo ra một cơ sở dữ liệu slave. Điều này rất hữu ích vì nhiều lý do bao gồm việc tạo điều kiện cho sao lưu cho dữ liệu, một cách để phân tích nó mà không sử dụng các cơ sở dữ liệu chính, hoặc chỉ đơn giản là một phương tiện để mở rộng ra.

Replication mặc định là không đồng bộ, slave không cần phải kết nối vĩnh viễn để nhận được cập nhật từ master. Tùy thuộc vào cấu hình, bạn có thể sao chép tất cả các cơ sở dữ liệu, cơ sở dữ liệu đã chọn, hoặc thậm chí bảng được lựa chọn trong một cơ sở dữ liệu. Thật vậy, Replication có ý nghĩa là “nhân bản”, là có một phiên bản giống hệt phiên bản đang tồn tại, đang sử dụng. Với một cơ sở dữ liệu có nhu cầu lưu trữ lớn, thì đòi hỏi cơ sở dữ liệu phải toàn vẹn, không bị mất mát trước những sự cố ngoài dự đoán là rất cao. Vì vậy, người ta nghĩ ra khái niệm (slave) “nhân bản”, tạo một phiên bản cơ sở dữ liệu giống hệt cơ sở dữ liệu đang tồn tại, và lưu trữ ở một nơi khác, đề phòng có sự cố.

Server master lưu trữ phiên bản cơ sở dữ liệu phục vụ ứng dụng. Server slave lưu trữ phiên bản cơ sở dữ liệu “nhân bản”. Quá trình nhân bản từ master sang slave gọi là replication.

Tất cả các thay đổi trên cơ sở dữ liệu master sẽ được ghi lại dưới dạng file log binary, slave đọc file log đó, thực hiện những thao tác trong file log, việc ghi, đọc và thực thi trong file log này dưới dạng binary được thực hiện rất nhanh.

Ưu điểm của replication trong mysql

Mô hình MySQL Replication và cách thức hoạt động

Mô hình MySQL Replication và cách thức hoạt động

Mô hình MySQL Replication và cách thức hoạt động

Replication dựa trên các con master lưu giữ theo dõi tất cả những thay đổi cơ sở dữ liệu của nó (cập nhật, xóa, vv) trong bản ghi nhị phân của nó. Các bản ghi nhị phân phục vụ như là các record của tất cả các sự kiện làm thay đổi cấu trúc cơ sở dữ liệu hoặc nội dung (dữ liệu) từ thời điểm các máy chủ đã bắt đầu thực thi. Thông thường, câu SELECT không được ghi lại bởi vì chúng không phải thay đổi cấu trúc cũng như nội dung của cơ sở dữ liệu.

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. Đó là, nó kéo các dữ liệu từ các master, chứ không phải là master đẩy dữ liệu đến các slave. 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. Quá trình này lặp đi lặp lại những thay đổi ban đầu cũng giống như nó đã được thực hiện trên master. Bảng được tạo ra hoặc cấu trúc thay đổi và dữ liệu đã chèn hay đã xóa và kể cả cập nhật thì đều giống hệt theo những thay đổi mà ban đầu đã được thực hiện trên master.

Chi tiết quá trình thực thi trong Replication như sau:

Cách cài đặt MySQL Slave Replication

Bước 1: Cấu hình Master Database

sudo nano /etc/mysql/my.cnf

Bước đầu tiên phải tìm đến phần trông như sau để binding server master localhost chẳng hạn:

bind-address            = 127.0.0.1

Thay thế địa chỉ IP local thành địa chỉ của server. Ví dụ:

bind-address            = 12.34.56.789

Thay đổi tiếp theo đề cập đến các server-id, nằm trong phần [mysqlId]. Bạn có thể chọn bất kì số nào, ví dụ đơn giản nhất có thể đặt là 1.

server-id               = 1

Tiếp theo đặt đường dẫn file log cho mysql, tất cả các sự kiện của slave được lưu trữ trong đường dẫn này. Tìm đến dòng log_bin:

log_bin                 = /var/log/mysql/mysql-bin.log

Cuối cùng chúng ta cần phải chỉ định cơ sở dữ liệu sẽ được nhân bản trên các máy slave. Bạn có thể chỉ định thay vì một mà là nhiều các slave bằng cách lặp lại dòng này cho tất cả các cơ sở dữ liệu mà bạn cần:

binlog_do_db            = newdatabase

Sau khi chỉnh sửa xong chúng ta cần lưu lại file cấu hình và khởi động lại mysql

sudo service mysql restart

Bước tiếp theo chúng ta cần phải mở MySQL mà cấp quyền cho các slave, bạn có thể đặt tên, mật khẩu cho các slave tùy ý:

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
Sau đó kiểm tra bằng cách:
FLUSH PRIVILEGES;

Một điều quan trọng nữa, bạn cần phải mở 1 tab mới và lựa chọn cơ sở dữ liệu của bạn.

USE newdatabase;

Sau đó, quan trọng nhất là bạn cần phải 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 chúng ta gõ câu 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)

Position ở đây có nghĩa là vị trí mà 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, chúng ta export cơ sở dữ liệu ra 1 file sql để tiện dùng cho bước 2.

mysqldump -u root -p --opt newdatabase > newdatabase.sql

Bây giờ quay trở lại cửa sổ ban đầu và mở khóa cơ sở dữ liệu của bạn:

UNLOCK TABLES;
QUIT;

Về cơ bản cấu hình máy chủ đã tạm ổn

Bước 2: Cấu hình cơ sở dữ liệu slave

Đăng nhập vào server slave, mở mysql là tạo cơ sở dữ liệu với tên giống hệt cơ sở dữ liệu master:

CREATE DATABASE newdatabase;
EXIT;

Import cơ sở dữ liệu mà đã export ở bước 1.

mysql -u root -p newdatabase < /path/to/newdatabase.sql

Chúng ta cần cấu hình những con slave giống hệt như cách mà chúng ta cấu hình con master. Tuy nhiên cũng cần chỉnh sửa một số thông số cho phù hợp như 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 con slave:

sudo service mysql restart

Bước tiếp theo chúng ta cần phải cấp quyền và cho phép nhân bản ở 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;

Nội dung command trên được hiểu như sau:

  1. Chỉ định các máy chủ hiện tại như là slave của server master
  2. Cung cấp thông tin đăng nhập chuẩn cho các máy chủ
  3. Cuối cùng chỉ định cho các máy slave biết rằng cần phải sao lưu từ file log nào và đăng nhập từ vị trí mà đã định nghĩa trong position nào.

Sau đó chúng ta active server slave:

START SLAVE;

// Kiểm tra bằng cách:
SHOW SLAVE STATUS\G

// Nếu có vấn đề trong kết nối bạn có thể thử start slave bằng cách:
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START;

Trên đây là tất cả những gì tôi tìm hiểu được về MySQL Replication. Nó còn nhiều các góc cạnh khác nhau, đây chỉ là một trong những khía cạnh tôi tìm hiểu một cách khái quát.

Tài liệu tham khảo

Mysql replication

How To Set Up Master Slave Replication in MySQL

MySQL Replication – Creating a New Master/Slave Topology with or without Virtual Machines


Chia sẻ bài viết:

Bài viết liên quan

Tổng hợp mức lương IT theo level tại TP.HCM và Hà Nội năm 2025 - 2026

Ngành IT tại Việt Nam tiếp tục giữ mặt bằng lương cao so với nhiều ngành khác, đặc biệt tập trung tại TP.HCM và Hà Nội. Hai thành phố này hiện là trung tâm tuyển dụng công nghệ lớn nhất cả nước, nơi tập trung nhiều công ty outsourcing, product, fintech, AI và startup quốc tế.

Top 5 web đọc truyện tranh miễn phí vẫn còn hoạt động hiện nay

Top 5 web đọc truyện tranh miễn phí vẫn còn hoạt động hiện nay 1. NetTruyen — Cái tên lâu đời không thể bỏ qua NetTruyen là một trong những nền tảng đọc truyện tranh online lâu đời và quen thuộc nhất với cộng đồng Việt Nam.

Cách đàm phán lương khi mới ra trường — fresher IT không nên bỏ qua

Đàm phán lương fresher IT là quá trình thương lượng mức lương với nhà tuyển dụng sau khi nhận được offer — một bước mà hầu hết sinh viên mới ra trường bỏ qua hoàn toàn vì nghĩ "fresher thì không có quyền mặc cả." Thực tế ngược lại: hầu hết công ty đều chừa ra biên độ thương lượng ngay cả với fresher, và không đàm phán nghĩa là bạn đang tự để lại tiền trên bàn mà không biết.

Bị từ chối phỏng vấn IT — tôi đã làm gì để pass lần sau

Bị từ chối phỏng vấn IT là trải nghiệm mà hầu như mọi fresher và junior developer đều trải qua ít nhất một lần — thường là nhiều hơn thế. Cú từ chối đầu tiên có thể khiến bạn nghi ngờ năng lực bản thân, nhưng thực tế phần lớn các trường hợp thất bại đều có nguyên nhân cụ thể, có thể xác định và có thể khắc phục trong vòng vài tuần nếu bạn biết nhìn đúng chỗ.

CV IT 1 Trang Hay 3 Trang: Bài Học Đắt Giá Khi Để AI Build CV Giúp Bạn

CV IT 1 trang hay nhiều trang — đây là câu hỏi tưởng đơn giản nhưng lại quyết định xem bạn có được HR gọi điện hay chỉ lặng lẽ bị cho vào thùng rác. Bài viết này chia sẻ trải nghiệm thực tế từ một developer sau khi rebuild CV bằng AI, nhận ra sự thật phũ phàng về cách HR thực sự đọc hồ sơ năm 2026.

Cảnh báo chiêu trò lừa đảo "Black MMO PayinApp" 2026

Trong thời đại số, khi các nền tảng mạng xã hội như Facebook, Telegram trở thành nơi giao thương nhộn nhịp, thì cũng là lúc những "con mồi" tiềm năng bị đưa vào tầm ngắm của những kẻ lừa đảo. Chưa bao giờ, những lời mời chào về một công việc "việc nhẹ lương cao", "ngồi nhà kiếm tiền triệu", hay "không cần kinh nghiệm, được đào tạo từ A-Z" lại xuất hiện dày đặc như hiện nay.

Chứng Chỉ NVSP: Giải Pháp Việc Làm Thông Minh Cho Sinh Viên IT Thời AI 2026

Tìm hiểu chứng chỉ Nghiệp vụ Sư phạm (NVSP) là gì, điều kiện đăng ký, chi phí, và tại sao con đường trở thành giảng viên — dạy tại trường đại học, cao đẳng hoặc trung tâm đào tạo IT — lại là lựa chọn việc làm ổn định và có giá trị lâu dài cho developer Việt Nam giữa làn sóng AI 2026.

Cách Tạo CV IT Cho Fresher Bằng LaTeX Và AI

Bạn vừa tốt nghiệp, cầm tấm bằng IT trên tay nhưng gửi hàng chục CV đi mà chỉ nhận lại sự im lặng? Tôi cũng từng như bạn, loay hoay với Microsoft Word, cố gắng căn chỉnh từng dòng kẻ để rồi khi xuất PDF, định dạng lại nhảy lung tung. Nỗi đau lớn nhất của dân kỹ thuật không phải là thiếu kỹ năng, mà là không biết cách "đóng gói" giá trị bản thân vào một bản CV chuyên nghiệp.

Cơn Ác Mộng Lập Trình: Mất Sạch Index Google Chỉ Trong 1 Đêm Vì Một Dòng Code Chat Widget!

Web bạn đột nhiên bốc hơi khỏi Google không rõ lý do? Khám phá ngay case study thực tế từ một đoạn mã chat widget chặn Googlebot và cách fix triệt để. Đọc ngay!

Hướng dẫn Cấu hình Nginx: HTTP, HTTPS, Proxy Pass

Khám phá cách cấu hình Nginx hiệu quả cho HTTP, HTTPS, Proxy Pass và chặn URL. Tối ưu website của bạn ngay hôm nay!


Bài trước
Cảnh báo chiêu trò lừa đảo "Black MMO PayinApp" 2026
Bài tiếp theo
Chứng Chỉ NVSP: Giải Pháp Việc Làm Thông Minh Cho Sinh Viên IT Thời AI 2026