Hướng dẫn cấu hình Master – Slave MySQL trên Linux

I. Giới thiệu

MySQL Replication là một tính năng trên MySQL cho phéo sao chép dữ liệu từ bản chính (master) sang nhiều bản phụ (slave).
Quý khách hàng có thể sử dụng để triển khai như một mô hình HA, dự phòng rủi ro hoặc phương án giảm tải hệ thống SQL trong một số trường hợp.
Trong bài viết này Long Vân sẽ hướng dẫn cách cấu hình Master – Slave MySQL trên Linux.

II. Chuẩn bị

  • 1 Server Linux đóng vai trò làm Master.
  • 1 Server Linux đóng vai trò làm Slave.
  • Cơ sở dữ liệu: MySQL 8. trở lên.

III. Cài đặt MySQL Server

  1. Cài đặt MySQL
    • Ubuntu/Debian:
      sudo apt update
      sudo apt install mysql-server -y
    • CentOS/Redhat:
      sudo yum update
      sudo yum install mysql-server -y
  2. Khởi động MySQL
    1. Ubuntu/Debian:
      systemctl start mysql.service
      systemctl enable mysql.service
    2. CentOS/Redhat:
      systemctl start mysqld
      systemctl status mysqld

IV. Cấu hình Master – Slave

Server Master

  1. Truy cậo vào file cấu hình của MySQL và điều chỉnh các thông số cần thiết như sau:
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

    • Trong đó
      • bind-address: IP của server Master
      • log_error: file log lỗi (mặc định)
      • server-id: id của server ( bạn có thể chọn bất kỳ số nào làm giá trị nhưng số đó phải là duy nhất không được trùng với các id của server khác)
      • binlog_do_db: Database mà bạn muốn Replicate
    • Bạn có thể Replicate nhiều Database với chỉnh sửa như sau:
      binlog_do_db = db
      binlog_do_db = db_1
      binlog_do_db = db_2
    • Sau khi điều chỉng thông số hoàn tất chúng ta sẽ restart lại MySQL để nhận cấu hình:
      sudo systecmtl restart mysql
  2. Tiếp theo sẽ vào MySQL tạo user và phân quyền bằng lệnh “sudo mysql”:
    mysql> CREATE USER 'slave_user'@'slave_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_server_ip';
    mysql> FLUSH PRIVILEGES;
    • Lưu ý: thay thế các thông số của slave_user thành thành thông tin của server Slave nhé!
      Tiếp theo ta sẽ truy xuất toạ độ Binary Log từ server Master

      mysql> FLUSH TABLES WITH READ LOCK;
      mysql> SHOW MASTER STATUS;

      Đây sẽ là vị trí mà các server Slave bắt đầu sao chép database, chúng ta sẽ lưu lại thông tin của “File” và “Position”, vì sẽ cần dùng để cấu hình cho server Slave.

  3. Tạo Database cần sao lưu cho server Master:
    mysql> CREATE DATABASE longvan_db;  
    mysql> Use longvan_db; 
    mysql> CREATE TABLE longvan_table ( longvan_column varchar(30) ); 
    mysql> INSERT INTO longvan_table VALUES (‘longvan.net'), ('support.longvan.net');

Server Slave

  1. Đầu tiên chúng ta sẽ vào file config của Mysql
    vi /etc/mysql/mysql.conf.d/mysql.cnf

    • Ở đây các thông số sẽ tương tự với Master ngoại trừ server-id là đặc thù nên phải thay đổi, và ngoài ra thêm phần relay-log xác định vị trí lưu nhật ký chuyển tiếp của bản sao Database.
    • Restart lại MySQL để nhận cấu hình trên server Slave
      sudo systemctl restart mysql
  2. Sau đó chúng ta vào giao diện của Mysql để cấu hình cho server Slave kết nối được Master
    sudo mysql
    mysql> CHANGE REPLICATION SOURCE TO
    mysql> SOURCE_HOST='Master_server_ip',              # ip của server Master
    mysql> SOURCE_USER='slave_user',                    # user replicate tạo trên server Master
    mysql> SOURCE_PASSWORD='password',                  # password user replicate
    mysql> SOURCE_LOG_FILE='mysql-bin.000004’,          # thông số File lưu ở server Master
    mysql> SOURCE_LOG_POS=157;                          # thông số Position đã lưu ở Master
  3. Sau cùng chúng ta sẽ dùng lệnh START SLAVE; để bắt đầu chạy MySQL Slave và đồng database
    Trên hình, server Slave đã replicate được database của server Master

Như vậy Long Vân đã hoàn tất Hướng dẫn cấu hình Master – Slave của MySQL trên Linux. Chúc Quý khách thàng công!