Replication in MySQL

  1. Giới thiệu về Replication.

    Replication có ý nghĩa là “nhân bản”, là có một phiên bản giống hệt phiên bản database đang tồn tại. Với một database có nhu cầu lưu trữ lớn, đòi hỏi cơ sở dữ liệu toàn vẹn, không bị mất mát trước những sự cố ngoài dự đoán là rất cao. Vì vậy, người ta nghĩ ra khái niệm “nhân bản”, tạo một phiên bản database giống hệt database đang tồn tại, và lưu trữ ở một nơi khác, đề phòng có sự cố. + Phiên bản database phục vụ ứng dụng được lưu trữ trên server Master. Phiên bản database “nhân bản” được lưu trữ trên server Slave. Quá trình nhân bản từ Master sang Slave gọi là replication. + Khi có một thay đổi trên database Master, Master sẽ ghi xuống log file (log ở dạng binary). Slave đọc log file, thực hiện những thao tác trong log file. Việc ghi, đọc log theo dạng binary được thực hiện rất nhanh.

  2. Mục đích sử dụng Replication trong MySQL.

  • Scale-out solutions: replicate cớ sở đến các slave để cân bằng tải nhằm tăng hiệu suất truy vấn cơ sở dữ liệu. Trong môi trường này, tất cả thao tác viết và cập nhật dữ liệu phải được thực hiện trên server master. Truy vấn dữ liệu có thể diễn ra trên một hoặc nhiều slave. Mô hình này có thể cải thiện hiệu suất của việc cập nhật bản ghi dữ liệu (kể từ khi master chỉ sử dụng để cập nhật), trong khi tốc độ truy vấn dữ liệu tăng đáng kể trên các slave.
  • Data security: vì dữ liệu được replicate đến các Slave, và các Slave có thể tạm dừng quá trình sao chép, nó có thể chạy các dịch vụ sao lưu trên các Slave mà không làm ảnh hưởng tới dữ liệu trên Master.
  • Analytics: dữ liệu có thể trực tiếp được tạo ra trên master, trong khi việc phân tích các thông tin có thể xảy ra trên các slave mà không ảnh hưởng đến hiệu suất của master.
  • Long-distance data distribution: nếu một văn phòng chi nhánh muốn làm việc với một bản sao của dữ liệu chính của bạn, bạn có thể sử dụng replication để tạo ra một bản sao của các dữ liệu cho việc sử dụng chúng mà không cần truy cập thường xuyên đến master.
  1. Các bước cấu hình Replication.
  • Giả sử máy tính MySQL master có hostname là master.mydomain.com. Máy tính MySQL slave có hostname là slave.mydomain.com.

  • Cài đặt mysql bằng các gói rpm trên MySQL master và MySQL slave.

  • Start mysql trên MySQL master và MySQL slave.

    a. Cấu hình database master:

    • Tạo user cho phép MySQL slave được quyền REPLICATE mysql> GRANT REPLICATION SLAVE ON . -> TO 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';

    • Sửa trong file /etc/my.cnf những option sau: [mysqld] log-bin=mysql-bin server-id=1 innodb_flush_log_at_trx_commit=1 sync_binlog=1

    • Start mysql trên MySQL master

    b. Cấu hình database Slave:

    • Sửa trong file /etc/my.cnf option sau: server-id=2

    • Start mysql trên MySQL slave.

    • Để replication, cần xem tình trạng ghi log hiện tại của MySQL master, để điều khiển slave bắt đầu replicate như thế nào.

    • Ngưng mọi tác động trên cơ sở dữ liệu MySQL master sql> FLUSH TABLES WITH READ LOCK;

    • Xem tình trạng của MySQL master

      mysql > SHOW MASTER STATUS; +---------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+ | mysql-bin.003 | 73 | test | manual,mysql | +---------------+----------+--------------+------------------+

    • Cấu hình những thông tin cần thiết, để slave giao tiếp được với master: mysql> CHANGE MASTER TO -> MASTER_HOST='master.mydomain.com', -> MASTER_USER='repl', -> MASTER_PASSWORD='slavepass', -> MASTER_LOG_FILE='recorded_log_file_name', -> MASTER_LOG_POS=recorded_log_position;

    • Ghi chú: giá trị MASTER_LOG_FILE ở đây là file name [mysql-bin.003] và MASTER_LOG_POS là giá trị [Position] của câu lệnh SHOW MASTER STATUS;

    • Nếu trước khi thực hiện replication, master không ghi thành log file, thì giá trị tương ứng ở đây là: chuỗi rỗng (“”) và 4.

    • Giải phóng các table trên master: mysql> UNLOCK TABLES;

    • Hoàn tất quá trình cấu hình.

    • Kiểm tra kết quả bằng cách tác động tới dữ liệu (insert, update or delete) trên server Master và xem tác động đó đã được phản ánh lên server Slave hay chưa.