Thứ tư, 25/07/2012 | 00:00 GMT+7

Cách thiết lập Master Slave Replication trong MySQL

Nhân bản MySQL là một quá trình cho phép bạn dễ dàng duy trì nhiều bản sao của một dữ liệu MySQL bằng cách sao chép chúng tự động từ một database chính sang database phụ.

Điều này có thể hữu ích vì nhiều lý do, bao gồm tạo thuận lợi cho việc backup dữ liệu, một cách để phân tích nó mà không cần sử dụng database chính hoặc đơn giản là một phương tiện để mở rộng quy mô.

Hướng dẫn này sẽ bao gồm một ví dụ rất đơn giản về sao chép mysql — một chủ sẽ gửi thông tin đến một slaver duy nhất. Để quá trình hoạt động, bạn cần hai địa chỉ IP: một của server chính và một của server phụ.

Hướng dẫn này sẽ sử dụng các địa chỉ IP sau:

12.34.56.789- Database chính

12.23.34.456- Database slaver

Cài đặt

Bài viết này giả định bạn có user có quyền sudo và đã cài đặt MySQL. Nếu bạn không có mysql, bạn có thể cài đặt nó bằng lệnh sau:

sudo apt-get install mysql-server mysql-client

Bước một — Cấu hình database chính

Mở file cấu hình mysql trên server chính.

sudo nano /etc/mysql/my.cnf

Khi ở bên trong file đó, ta cần thực hiện một vài thay đổi.

Bước đầu tiên là tìm phần trông giống như sau, liên kết server với server local :

bind-address            = 127.0.0.1

Thay thế địa chỉ IP tiêu chuẩn bằng địa chỉ IP của server .

bind-address            = 12.34.56.789 

Thay đổi cấu hình tiếp theo đề cập đến server-id, nằm trong phần [mysqld]. Bạn có thể chọn bất kỳ số nào cho vị trí này (có thể dễ dàng hơn khi bắt đầu bằng 1), nhưng số phải là duy nhất và không thể trùng với bất kỳ id server nào khác trong group sao chép của bạn. Tôi sẽ tiếp tục và gọi cái này là 1.

Đảm bảo dòng này không có chú thích.

server-id               = 1

Chuyển sang dòng log_bin. Đây là nơi lưu giữ các chi tiết thực sự của bản sao. Slaver sẽ sao chép tất cả các thay đổi đã được đăng ký trong log . Đối với bước này, ta chỉ cần bỏ comment tham chiếu đến log_bin:

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

Cuối cùng, ta cần chỉ định database sẽ được sao chép trên server slaver . Bạn có thể bao gồm nhiều hơn một database bằng cách lặp lại dòng này cho tất cả các database bạn cần .

binlog_do_db            = newdatabase

Sau khi bạn thực hiện tất cả các thay đổi, hãy tiếp tục và lưu và thoát ra khỏi file cấu hình.

Làm mới MySQL.

sudo service mysql restart

Các bước tiếp theo sẽ diễn ra trong MySQL shell.

Mở MySQL shell.

mysql -u root -p

Ta cần trao quyền cho slaver . Bạn có thể sử dụng dòng này để đặt tên cho slaver của bạn và cài đặt password của họ. Lệnh phải ở định dạng sau:

GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';

Theo dõi với:

FLUSH PRIVILEGES;

Phần tiếp theo là một chút phức tạp. Để hoàn thành nhiệm vụ, bạn cần phải mở một cửa sổ hoặc tab mới ngoài cửa sổ hoặc tab mà bạn đã sử dụng một vài bước xuống dòng.

Trong tab hiện tại của bạn, hãy chuyển sang “newdatabase”.

USE newdatabase;

Sau đó, khóa database để ngăn bất kỳ thay đổi mới nào:

FLUSH TABLES WITH READ LOCK;

Sau đó, nhập:

SHOW MASTER STATUS;

Bạn sẽ thấy một bảng trông giống 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)

Đây là vị trí mà từ đó database slaver sẽ bắt đầu sao chép. Ghi lại những con số này, chúng sẽ hữu ích sau này.

Nếu bạn thực hiện bất kỳ thay đổi mới nào trong cùng một cửa sổ, database sẽ tự động mở khóa. Vì lý do này, bạn nên mở tab hoặc cửa sổ mới và tiếp tục các bước tiếp theo ở đó.

Tiếp tục với database vẫn bị khóa, hãy xuất database của bạn bằng mysqldump trong cửa sổ mới (đảm bảo bạn đang gõ lệnh này trong bash shell, không phải trong MySQL).

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

Bây giờ, quay trở lại cửa sổ ban đầu của bạn, mở khóa database (làm cho chúng có thể ghi lại). Hoàn thành bằng cách thoát khỏi vỏ.

UNLOCK TABLES;
QUIT;

Đến đây bạn đã hoàn tất việc cấu hình database chính.

Bước hai — Cấu hình database slaver

Khi bạn đã cấu hình database chính. Bạn có thể đặt nó sang một bên, và bây giờ ta sẽ bắt đầu cấu hình database slaver .

Đăng nhập vào server slaver của bạn, mở MySQL shell và tạo database mới mà bạn sẽ sao chép từ server (sau đó thoát):

CREATE DATABASE newdatabase;
EXIT;

Nhập database mà bạn đã xuất trước đó từ database chính.

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

Bây giờ ta cần phải cấu hình cấu hình phụ theo cách giống như ta đã làm với chủ:

sudo nano /etc/mysql/my.cnf

Ta phải đảm bảo ta đã cài đặt một số thứ trong cấu hình này. Đầu tiên là id server . Con số này, như đã đề cập trước đây cần phải là duy nhất. Vì nó được đặt ở chế độ mặc định (vẫn là 1), hãy đảm bảo thay đổi nó khác đi.

server-id               = 2

Sau đó, hãy đảm bảo bạn đã điền đầy đủ ba tiêu chí sau đây một cách thích hợp:

relay-log               = /var/log/mysql/mysql-relay-bin.log
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_do_db            = newdatabase

Bạn cần thêm vào dòng log chuyển tiếp: nó không có ở đó theo mặc định. Khi bạn đã thực hiện tất cả các thay đổi cần thiết, hãy lưu và thoát ra khỏi file cấu hình slaver .

Khởi động lại MySQL :

sudo service mysql restart

Bước tiếp theo là kích hoạt sao chép từ bên trong MySQL shell.

Mở MySQL shell và nhập các chi tiết sau, thay thế các giá trị để trùng với thông tin của bạn:

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;

Lệnh này thực hiện một số việc cùng một lúc:

  1. Nó chỉ định server hiện tại là server của server chính .
  2. Nó cung cấp cho server thông tin đăng nhập chính xác
  3. Cuối cùng, nó cho phép server slaver biết bắt đầu sao chép từ đâu; file log chính và vị trí log đến từ các số mà ta đã viết trước đó.

Với điều đó — bạn đã cấu hình một server chính và server phụ.

Kích hoạt server slaver :

START SLAVE;

Bạn có thể xem chi tiết của bản sao slaver bằng lệnh lệnh này. \ G sắp xếp lại văn bản để làm cho nó dễ đọc hơn.

SHOW SLAVE STATUS\G

Nếu có sự cố khi kết nối, bạn có thể thử khởi động slaver bằng lệnh để bỏ qua:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; SLAVE START; 

Tất cả đã được làm xong.

Xem thêm

MySQL replication có rất nhiều tùy chọn khác nhau và đây chỉ là một cái nhìn tổng quan ngắn gọn.

Nếu bạn có câu hỏi nào khác về các khả năng cụ thể của MySQL, vui lòng đăng câu hỏi của bạn trong Diễn đàn Hỏi & Đáp của ta và ta sẽ sẵn lòng giải đáp.

Bởi Etel Sverdlov

Tags:

Các tin liên quan

Cách nhập và xuất database và đặt lại mật khẩu gốc trong MySQL
2012-06-12
Hướng dẫn MySQL Cơ bản
2012-06-12
Hướng dẫn MySQL Cơ bản
2012-06-12