Mysql, Server linux

Cấu hình replication mysql ubuntu

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;