MySQL Replication cho phép bạn dễ dàng sao chép cơ sở dữ liệu từ máy chủ này sang máy chủ khác. MySQL hỗ trợ các loại sao chép khác nhau như chủ-tớ, chủ-nhân và sao chép nhóm. MariaDB cũng hỗ trợ sao chép đa chủ. Trong bài viết này, chúng ta sẽ xem xét bản sao Master-Slave trong MySQL và tìm hiểu cách sao chép cơ sở dữ liệu MySQL trong Linux. Bạn có thể sử dụng các bước này để sao chép cơ sở dữ liệu MySQL trong Ubuntu, Debian, CentOS, Fedora, Red hat và các loại Linux khác.
Cách sao chép cơ sở dữ liệu MySQL
Dưới đây là các bước để sao chép cơ sở dữ liệu MySQL. Để thiết lập của chúng tôi, chúng tôi sẽ cần một cơ sở dữ liệu chính (IP - 54.24.32.12) và một cơ sở dữ liệu phụ (IP - 45.12.21.23). Chúng tôi sẽ sao chép cơ sở dữ liệu có tên exampledb từ chủ thành nô lệ. Chúng tôi đã giả định rằng bạn đã cài đặt MySQL trên cả hai máy chủ này và bạn có đặc quyền root cho cả hai máy chủ này. Nếu không, bạn có thể cài đặt MySQL bằng lệnh sau
$ sudo apt-get install mysql-server mysql-client
Phần thưởng đọc:Các lựa chọn thay thế MySQL Workbench hàng đầu
1. Chỉnh sửa tệp cấu hình chính
Mở thiết bị đầu cuối trên máy chủ của cơ sở dữ liệu chính và chạy lệnh sau
$ sudo vi /etc/mysql/my.cnf
Theo mặc định, các kết nối từ xa bị tắt trong MySQL. Chúng ta cần cho phép kết nối từ xa từ slave đến master để nhân rộng. Vì vậy, chúng tôi bỏ ghi chú hai dòng sau để cho phép các kết nối từ xa, bằng cách thêm # vào đầu của chúng, như được hiển thị bên dưới
#skip-networking #bind-address=127.0.0.1
Thêm hoặc bỏ ghi chú các dòng sau trong khối [mysqld] để trông giống như sau.
[mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log binlog-do-db=exampledb
Chúng ta hãy xem xét từng dòng trên. Id máy chủ dòng đầu tiên chỉ định một số ID duy nhất cho cái chính. Nó phải là một số dương từ 1 đến 2 ^ 32.
log-bin chỉ định vị trí tệp nhật ký sẽ được MySQL điền vào cùng với các chi tiết về bản sao.
binlog-do-db cho biết tên của cơ sở dữ liệu cần được sao chép.
Khởi động lại Máy chủ MySQL để áp dụng các thay đổi
$ sudo service mysql restart
Đăng nhập vào MySQL với tư cách người dùng gốc
$ sudo mysql -u root -p
và chạy lệnh sau
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | exampledb | | +------------------+----------+--------------+------------------+
Vui lòng lưu ý các chi tiết trên, chúng tôi sẽ cần chúng sau ở Bước # 3.
Phần thưởng đọc:Cách bật SSL / TLS trong MySQL
2. Tạo người dùng nhân rộng
Đăng nhập vào máy chủ MySQL trên máy chủ.
$ sudo mysql -u root -p
Bạn sẽ được nhắc nhập mật khẩu gốc.
Sau khi đăng nhập vào MySQL, hãy chạy các lệnh sau để tạo người dùng từ xa slave_user và cấp cho nó quyền sao chép cho tất cả các cơ sở dữ liệu. Vui lòng thay thế 45.12.21.23 bên dưới bằng IP của máy chủ nô lệ của bạn và thay thế $ password bằng một mật khẩu phù hợp theo yêu cầu của bạn.
mysql> CREATE USER slave_user@45.12.21.23; mysql> GRANT REPLICATION SLAVE ON *.* TO slave_user@45.12.21.23 IDENTIFIED BY '$password'; mysql> FLUSH PRIVILEGES;
Vui lòng thêm quy tắc tường lửa đến cho cổng 3306 và cho phép 45.12.21.23. Người dùng từ xa này cần kết nối với cơ sở dữ liệu chính để quá trình sao chép diễn ra.
Phần thưởng đọc:Cách thay đổi đối chiếu của tất cả các bảng trong MySQL
3. Chỉnh sửa tệp cấu hình Slave
Mở thiết bị đầu cuối trên máy chủ của cơ sở dữ liệu nô lệ và chạy lệnh sau
$ sudo vi /etc/mysql/my.cnf
Thêm các dòng sau vào [mysqld] để trông giống như
[mysqld] server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = exampledb
Trong dòng đầu tiên, chúng tôi gán ID máy chủ là 2 cho máy chủ phụ. Một vài dòng tiếp theo chỉ định vị trí của các tệp nhật ký chuyển tiếp và bản ghi nhân rộng. Dòng cuối cùng chỉ định cơ sở dữ liệu sẽ được sao chép.
Khởi động lại MySQL Server và đăng nhập vào MySQL
$ sudo service mysql restart $ sudo mysql -u root -p
Chạy các lệnh sau để tạo cơ sở dữ liệu trống trên máy chủ.
mysql> CREATE DATABASE exampledb; mysql> USE exampledb;
Tải dữ liệu từ cơ sở dữ liệu chính để đưa vào cơ sở dữ liệu phụ
mysql> LOAD DATA FROM MASTER;
Thoát MySQL.
Phần thưởng đã đọc:Các blog cơ sở dữ liệu hàng đầu để theo dõi
4. Khởi tạo sao chép
Trong khi bạn đã đăng nhập vào MySQL, hãy chạy các lệnh sau để bắt đầu quá trình sao chép. Thay thế các bộ phận bằng in đậm với các giá trị của bạn.
mysql> SLAVE STOP; mysql> CHANGE MASTER TO MASTER_HOST='54.24.32.12', MASTER_USER='slave_user', MASTER_PASSWORD='<password>', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
MASTER_HOST - Địa chỉ IP hoặc tên máy chủ của cái chính (54.24.32.12).
MASTER_USER - người dùng nô lệ mà chúng tôi đã tạo ở bước # 2.
MASTER_PASSWORD - mật khẩu của người dùng nô lệ mà chúng tôi đã nhập ở bước # 2.
MASTER_LOG_FILE - tệp MySQL đã trả lại ở bước # 1 khi bạn chạy
HIỂN THỊ TRẠNG THÁI MASTER
MASTER_LOG_POS - vị trí MySQL đã trả lại khi bạn chạy HIỂN THỊ TRẠNG THÁI MASTER ở bước # 1
Cuối cùng, chúng tôi bắt đầu nô lệ để bắt đầu sao chép cơ sở dữ liệu MySQL.
mysql> START SLAVE;
Hy vọng rằng, bài viết này sẽ giúp bạn nhân rộng cơ sở dữ liệu MySQL.