Cái này mới cài đặt được, tuy kinh nghiệm không có nhiều nhưng cũng có xảy ra 1 lỗi nhỏ nhặt.
Trước tiên cần có 2 server ubuntu. Ở đây mình dùng 12.04, các phiên bản mới hơn tương tự.
Server Master có địa chỉ: 192.168.0.1
Server Slave có địa chỉ: 192.168.0.2
1. Ta cài mysql-server và mysql-client cho cả server master và server client:
sudo apt-get install -y mysql-server mysql-client
B2: Trên Server Master
B1: * edit file /etc/mysql/my.cnf
Xóa bỏ comment dòng:
#bind-address = 127.0.0.1
Chuyển thành
bind-address = 127.0.0.1
Thêm vào các dòng sau vào cuối file:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
Ở đây: example là tên database muốn replication.
* Vẫn trên server master, restart mysql:
sudo service mysql restart
* Vẫn trên server master, Access commandline mysql (phần này tùy user của bạn là user nào, ở đây mình là root)
sudo mysql -u root -p
* Tạo user cho việc replication:
create user ‘replicator’@’%’ identified by ‘password’;
Ở đây tên user là replicator, password cho nó là password.
%: là truy cập từ mọi máy
* Gắn quyền cho user.
grant replication slave on *.* to ‘replicator’@’%’;
* Đưa ra thông tin master:
show master status;
* Thông tin đưa ra dạng này:
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | 107 | example | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)
Xong các bước trên server master
B2: Trên server slave 192.168.0.2
* Edit file /etc/mysql/my.cnf
sudo nano /etc/mysql/my.cnf
Thêm dòng sau:
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
# bind-address = 127.0.0.1
Cũng comment dòng bind-address = 127.0.0.1 như trên
* Restar mysql
sudo service mysql restart
* Access mysql ở slave
mysql -u root -p
* Tạo user giống hệt ở master
create user ‘replicator’@’%’ identified by ‘password’;
* create database:
create database example;
* Gán quyền replication
grant replication slave on *.* to ‘replicator’@’%’;
* Cấp quyền truy cập vào master server để lấy dữ liệu về:
slave stop;
CHANGE MASTER TO MASTER_HOST = ‘192.168.0.1’, MASTER_USER = ‘replicator’, MASTER_PASSWORD = ‘password’, MASTER_LOG_FILE = ‘mysql-bin.000001’, MASTER_LOG_POS = 107;
slave start;
Ở đây:
master-host: địa chỉ ip của server master
master_user: tên user có quyền replication
master_password: password bên server master
master_log_file: file chúng ta đã dùng lệnh show master status ở trên
master_log_pos: position trong lệnh show master status
* Nếu như bạn chạy lệnh slave start bị lỗi.
ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO
Nguyên nhân do server slave không set server-id.
Chúng ta sẽ dùng thêm lệnh gán trước khi chạy start slave:
SET GLOBAL server_id=’2′;
* Xem thông tin slave:
SHOW SLAVE STATUS \G
B3: Test lại:
Bên master, bạn tạo ra 1 bảng. Ví dụ như:
$>mysql -u root -p
mysql>CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
);
Bên slave:
$>mysql -u root -p
mysql>use example;
mysql>show tables;
mysql>describe MyGuests;