Sao lưu và khôi phục MySQL

  1. Sao lưu và khôi phục cơ bản

Sử dụng công cụ mysqldump:

Sao lưu toàn bộ database:

mysqldump -u username -p tên_cơ_sở_dữ_liệu > /đường_dẫn_sao_lưu/tên_tập_tin

Sao lưu một bảng duy nhất:

mysqldump -u username -p tên_cơ_sở_dữ_liệu tên_bảng > /đường_dẫn_sao_lưu/tên_tập_tin

Sao lưu nhiều cơ sở dữ liệu cùng lúc: --databases db1 db2

Sao lưu tất cả các database: --all-databases

Khôi phục dữ liệu: mysql tên_cơ_sở_dữ_liệu < tập_tin_sao_lưu

Lưu ý: Khi khôi phục một bảng riêng lẻ, cần chỉ định database đích.

Ví dụ thực tế với mysqldump:

<!-- Sao lưu database test vào thư mục /dbbak -->
#mysqldump -uroot -p test > /dbbak/test.sql

<!-- Giả lập xóa database test -->
#mysql> drop database test;

<!-- Khôi phục từ file test.sql -->
#mysql -uroot -p test < test.sql

Sử dụng mysqlhotcopy:

<!-- Sao lưu database sử dụng chính quy -->
#mysqlhotcopy --flushlog -u='tài_khoản' -p='mật_khẩu' --regexp=biểu_thức_chính_quy thư_mục_sao_lưu

<!-- Khôi phục -->
#cp -a thư_mục_sao_lưu thư_mục_dữ_liệu(/var/lib/mysql hoặc tùy chỉnh)
  1. Sao lưu bằng nhật ký nhị phân (binlog)

Để kích hoạt tính năng ghi log, sửa file cấu hình my.cnf:

# vim /etc/my.cnf
log-bin=mysql-bin   <!-- Bật ghi log nhị phân -->

Phục hồi theo khoảng thời gian:

mysqlbinlog --start-datetime 'YYYY-MM-DD HH:MM:SS' --stop-datetime 'YYYY-MM-DD HH:MM:SS' log_nhật_ký | mysql -uroot -p

Phục hồi theo vị trí trong file log:

mysqlbinlog --start-position=vị_trí_bắt_đầu --stop-position=vị_trí_kết_thúc log_nhật_ký | mysql -uroot -p
  1. Cấu hình Master-Slave

Thiết lập ban đầu trên máy chủ chính:

[mysqld]
log-bin=mysql-bin
server-id=101

Cấp quyền cho slave:

GRANT REPLICATION SLAVE ON *.* TO 'user'@'IP_slave' IDENTIFIED BY 'mật_khẩu';

Cấu hình trên slave:

CHANGE MASTER TO
MASTER_USER='user',
MASTER_PASSWORD='mật_khẩu',
MASTER_HOST='IP_master',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;

Khởi động đồng bộ:

START SLAVE;
SHOW SLAVE STATUS\G;
  1. Cấu hình Master-Master

Trên cả hai server:

[mysqld]
log-bin=mysql-bin
server-id=<ID_độc_quy>

Tùy chỉnh slave:

replicate-do-db=tên_cơ_sở_dữ_liệu <!-- Chỉ đồng bộ database này -->
binlog-ignore-db=mysql <!-- Loại trừ database mysql -->
  1. Một master nhiều slave

Cấp quyền chung:

GRANT REPLICATION SLAVE ON *.* TO 'user'@'%' IDENTIFIED BY 'mật_khẩu';

Mỗi slave cấu hình khác nhau về server-id.

  1. Nhiều master một slave

Trên mỗi master:

[mysqld]
log-bin=mysql-bin
server-id=<ID_độc_quy>

Trên slave:

<!-- Đặt ID độc lập cho từng instance -->
[mysqld1]
server-id=201

[mysqld2]
server-id=202

Khởi tạo và chạy các instance riêng biệt.

Thẻ: mysql master-slave sao_lưu_binlog

Đăng vào ngày 20 tháng 5 lúc 03:27