Hướng dẫn cài đặt và cấu hình cơ bản MySQL Replication

(Ngày: 09/10/2019)
MySQL Replication là một giải pháp scale out mà ta có thể dùng nó trong nhiều trường hợp nhằm đảm bảo cơ sở dữ liệu được toàn vẹn. Bài viết này sẽ hướng dẫn cài đặt và cấu hình cơ bản MySQL Replication.

Giới thiệu về MySQL Replication

Để mở rộng một hệ thống cũng như để đảm bảo một cơ sở dữ liệu toàn vẹn, không bị mất mát trước những sự cố thì ta có 2 cách là Scale up và  Scale out. Trong đó:

Scale up là với một máy chủ ta mà ta tìm cách để nó đáp ứng nhiều hơn số lượng kết nối, truy vấn. Chẳng hạn:

  • Tăng phần cứng lên cho máy chủ.
  • Optimize các phần mềm, ứng dụng giúp tăng tốc độ truy vấn lấy, nhập dữ liệu.

Scale out là giải pháp tăng số lượng server hoặc dùng các giải pháp load-balancer để phân phố các kết nối, truy vấn ra nhiều server.

MySQL Replication là một giải pháp scale out và có thể dùng trong các trường hợp sau:

  • Trường hợp các ứng dụng mà có số truy vấn đọc dữ liệu nhiều hơn ghi (chẳng hạn trang báo, tin tức).
  • Trường hợp cần backup real-time.

Hoạt động của MySQL Replication

Có 2 giải pháp cho việc replication:

  • Master – Slave: Là dạng replication mà trong đó data được ghi trên Master server và đôngg bộ sang Slave server.
  • Master – Master: Là dạng replication, trong đó dữ liệu có thể ghi trên cả các MySQL server chạy replication.

Master - Slave

Hình

Trong mô hình trên, Master database phục vụ cho việc ghi dữ liệu. Các ứng dụng sẽ được kết nối cả vào Master lẫn Slave, tuy nhiên với các tác vụ ghi dữ liệu thì sẽ được trỏ đến Master, còn đối với các tác vụ đọc dữ liệu thì trỏ đến Slave. Khi có một thay đổi trên Master server, thay đổi đó sẽ được ghi lại vào binlog và Slave server sẽ đọc binlog và ghi lại cac thông tin thay đổi vào relay log, sau đó sẽ dựa vào relay log để cập nhật dữ liệu.

Master - Master

Hình

Trong mô hình trên thì toàn bộ dữ liệu đã được lưu trên một nhóm server và được cập nhật bởi bất kỳ server Master nào của nhóm. Tất cả Master server có nhiệm vụ phản hồi ại các truy vấn dữ liệu của người dùng và đồng bộ, cập nhật những thay đổi về dữ liệu từ các Master server khác trong nhóm.

Hướng dẫn cài đặt cơ bản MySQL replication

Ở đây mình sẽ cài đặt trên hệ điều hành centos 6.5, sử dụng 2 server với ip: Master server: 192.168.2.159 Slave server: 192.168.2.231

Mysql replication Master - Slave

Bước 1: Cài đặt mysql server

Trên server Master chạy các câu lệnh sau: [root@Viet-Centos-1 ~]# yum install -y mysql-server

Để chạy Mysql server [root@Viet-Centos-1 ~]# service mysql start

Cài đặt các thông số ban đầu cho Mysql [root@Viet-Centos-1 ~]# mysql_secure_installation

Thực hiện tương tự các bước trên đối với Mysql slave

Bước 2: Cấu hình Master-Slave Ở đây mình chỉ hướng dẫn cách cấu hình cơ bản nhất, chưa tối ưu cấu hình cho Mysql.

Trên Master server

Cấu hình file my.cnf: [root@Viet-Centos-1 ~]# vim /etc/my.cnf

Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]:

server-id=1 log_bin=/var/log/mysql/mysql-bin.log binlog_do_db=replication_database`

Trong đó:

  • server-id để xác định các mysql server, nếu không khai báo thông số này mysql server sẽ mặc định server-id là 0 hay nếu đặt server-id trên các mysql server giống nhau thì sẽ không nhận các kết nối từ các server mysql khác.
  • log_bin để khai báo file log ghi lại các thay đổi dữ liệu.
  • binlog_do_db để xác định database sẽ được replication.

Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-1 ~]# service mysqld restart

Giờ ta cần tạo user replication [root@Viet-Centos-1 ~]# mysql -uroot -ppassword

mysql> grant replication slave on *.* to mysql@'%' identified by 'mysql';

mysql> flush privileges;

Bước tiếp ta phải đồng bộ database giữa Master và Slave [root@Viet-Centos-1 ~]# mysqldump -u root -p replication_database > replication_database.sql

Copy database sang server Slave [root@Viet-Centos-1 ~]# scp replication_database.sql 192.168.2.231:/opt

Lấy giá trị Position - giá trị này sẽ được Slave sử dụng để xác định thời điểm đồng bộ dữ liệu với Master. mysql> show master status;

Trên Slave server

Cấu hình file my.cnf: [root@Viet-Centos-2 ~]# vim /etc/my.cnf

Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]

server-id=2 relay-log=/var/log/mysql/mysql-relay-bin.log binlog_do_db=replication_database

Trong đó:

  • relay-log là nơi ghi lại thông tin dữ liệu bị thay đổi được lấy từ Master server.

Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-2 ~]# service mysqld restart

Tạo database và đồng bộ dữ liệu với database của Master server

mysql> CREATE DATABASE replication_database;

mysql -u root -p replication_database < /opt/replication_database.sql

cấu hình replication trên slave bằng câu lệnh trong mysql như sau:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.159',MASTER_USER='mysql', MASTER_PASSWORD='mysql', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 106;

Start server Slave:

mysql> start slave;

Bước 3: Kiểm tra hoạt động Replication

Để kiểm tra, ta thử thay đổi dữ liệu trên Master bằng cách tạo 1 table mới

mysql> use replication_database;

mysql> create table test(job varchar(20), salary int(10));

mysql> show tables;

Trên Slave server ta chạy lệnh:

mysql> use replication_database;

mysql> show tables;

Ta thấy database trên Slave đã được cập nhật table "test", như vậy là Replication đã hoạt động tốt.

MySQl replication Master – Master

Bước 1: Cài đặt MySQL server. Các bước cài đặt tương tự như bước 1 của phần Master  Slave.

Bước 2: Cấu hình Master – Master trên Master server: Cấu hình file my.cnf

 [root@Viet-Centos-1 ~]# vim /etc/my.cnf

Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]

server-id=1 log_bin=/var/log/mysql/mysql-bin.log relay-log=/var/log/mysql/mysql-relay-bin.log binlog_do_db=replication_database

Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-1 ~]# service mysqld restart

Giờ ta cần tạo user replication [root@Viet-Centos-1 ~]# mysql -uroot -ppassword

mysql> grant replication slave on *.* to mysql@'%' identified by 'mysql';

mysql> flush privileges;

Bước tiếp ta phải đồng bộ database giữa Master và Slave [root@Viet-Centos-1 ~]# mysqldump -u root -p replication_database > replication_database.sql

Copy database sang server Slave [root@Viet-Centos-1 ~]# scp replication_database.sql 192.168.2.231:/opt

Lấy giá trị Position - giá trị này sẽ được Slave sử dụng để xác định thời điểm đồng bộ dữ liệu với Master. mysql> show master status;

Trên Slave server: Cấu hình file my.cnf: [root@Viet-Centos-2 ~]# vim /etc/my.cnf

Các bạn thêm các dòng dưới vào bên dưới phần [mysqld]

server-id=2 log_bin=/var/log/mysql/mysql-bin.log relay-log=/var/log/mysql/mysql-relay-bin.log binlog_do_db=replication_database

Khởi động lại mysql để nhận cấu hình [root@Viet-Centos-2 ~]# service mysqld restart

Giờ ta cần tạo user replication [root@Viet-Centos-2 ~]# mysql -uroot -ppassword

mysql> grant replication slave on *.* to mysql@'%' identified by 'mysql';

mysql> flush privileges;

Lấy giá trị Position - giá trị này sẽ được Slave sử dụng để xác định thời điểm đồng bộ dữ liệu với Master. mysql> show master status;

Tạo database và đồng bộ dữ liệu với database của Master server

mysql> CREATE DATABASE replication_database;

mysql -u root -p replication_database < /opt/replication_database.sql

Cấu hình Replication trên 2 server Trên Master: Chạy lệnh sau trong mysql terminal: mysql> stop slave;

mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.231',MASTER_USER='mysql', MASTER_PASSWORD='mysql', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;

mysql> start slave;

Trên Slave: Chạy lệnh sau trong mysql terminal: mysql> stop slave;

mysql> CHANGE MASTER TO MASTER_HOST='192.168.2.159',MASTER_USER='mysql', MASTER_PASSWORD='mysql', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;

mysql> start slave;

viblo.asia