- 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)
- 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
- 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;
- 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 -->
- 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.
- 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.