Quản Trị Mạng - AutoMySQLBackup thực chất là shell script cho phép người sử dụng thực hiện những thao tác sao lưu dữ liệu MySQL 1 cách định kỳ bằng chức năng mysqldump. Ứng dụng có thể sao lưu nhiều cơ sở dữ liệu, nén file sao lưu, hỗ trợ thao tác điều khiển trực tiếp… Bài viết sau đây sẽ hướng dẫn chi tiết việc cài đặt và sử dụng mysqldump trong Ubuntu 9.10 server.
1. Chú ý
AutoMySQLBackup sử dụng mysqldump để tạo ra file dump sao lưu dữ liệu MySQL. Hãy để ý rằng mysqldump sẽ tạm thời khóa toàn bộ mọi hoạt động của cơ sở dữ liệu trong quá trình sao lưu, công đoạn này có thể diễn ra lâu hơn 1 chút so với thông thường, tùy thuộc vào dung lượng của dữ liệu. Nếu bạn có nhu cầu thao tác trên 1 hệ cơ sở dữ liệu với quy mô lớn thì AutoMySQLBackup sẽ hoạt động không hiệu quả.
- Đoạn mã này sẽ không làm việc trong trường hợp có lỗi vật lý xuất hiện với thiết bị lưu trữ (ổ cứng), vì vậy bạn nên thường xuyên copy những file sao lưu để đề phòng trường hợp xấu nhất
- Tất cả những thao tác trong bài viết được thực hiện dưới quyền điều khiển đầy đủ (root privileges), vì vậy hãy chắc chắn bạn đang đăng nhập dưới tài khoản root:
sudo su
2. Các bước tiến hành
- Tại cửa sổ dòng lệnh Terminal, gõ câu lệnh sau để bắt đầu cài đặt AutoMySQLBackup:
aptitude install automysqlbackup
- Mở thư mục /etc/default/automysqlbackup và xem qua những lựa chọn cấu hình, tất cả đều được giải thích khá cặn kẽ và rõ ràng, bạn có thể làm theo mẫu sau:
vi /etc/default/automysqlbackup
[...]
# Host name (or IP address) of MySQL server e.g localhost
DBHOST=localhost
[...]
# List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3"
# The following is a quick hack that will find the names of the databases by
# reading the mysql folder content. Feel free to replace by something else.
#DBNAMES="db_ispconfig web1 web2 web3"
DBNAMES=`find /var/lib/mysql -mindepth 1 -maxdepth 1 -type d | cut -d'/' -f5 | grep -v ^mysql\$ | tr \\\r\\\n ,\ `
[...]
# Backup directory location e.g /backups
# Folders inside this one will be created (daily, weekly, etc.), and the
# subfolders will be database names.
BACKUPDIR="/var/lib/automysqlbackup"
[...]
# Email Address to send mail to? (user@domain.com)
MAILADDR="user@domain.com"
[...]
- Biến DBNAMES có thể chứa 1 hoặc nhiều giá trị cơ sở dữ liệu, được ngăn cách bằng dấu cách (spaces)
- Nếu thư mục BACKUPDIR không tồn tại, automysqlbackup sẽ tự động tạo ra tại địa chỉ mặc định là: /var/lib/automysqlbackup
- Nếu bạn muốn sao lưu trực tiếp trên local, sử dụng tên biến localhost, còn đối với cơ sở dữ liệu remote thì dùng remote hostname (chắc chắn rằng remote database của server phải được cấu hình để cho phép chấp nhận những kết nối remote)
- Khởi động automysqlbackup bằng câu lệnh:
automysqlbackup
- Nhìn vào thư mục /var/lib/automysqlbackup:
ls -l /var/lib/automysqlbackup
- Bạn sẽ nhìn thấy 3 thư mục: daily, weekly, và monthly:
root@server1:~# ls -l /var/lib/automysqlbackup
total 12
drwxr-xr-x 4 root root 4096 2010-01-27 17:20 daily
drwxr-xr-x 2 root root 4096 2010-01-27 17:20 monthly
drwxr-xr-x 4 root root 4096 2010-01-27 17:20 weekly
root@server1:~#
- Thư mục này bao gồm tên thư mục con sau tên cơ sở dữ liệu mà bạn chọn để sao lưu, ví dụ: nếu bạn chọn db_ispconfig, sẽ có thư mục tương ứng chứa đựng file sao lưu:
ls -l /var/lib/automysqlbackup/daily/db_ispconfig/
root@server1:~# ls -l /var/lib/automysqlbackup/daily/db_ispconfig/
total 40
-rw------- 1 root root 37016 2010-01-27 17:20 db_ispconfig_2010-01-27_17h20m.Wednesday.sql.gz
root@server1:~#
- File có đuôi *.gz nghĩa là quá trình sao lưu đã hoàn thành và được nén, nếu muốn phục hồi lại từ file này, bạn phải giải nén:
gunzip /var/lib/automysqlbackup/daily/db_ispconfig/db_ispconfig_2010-01-27_17h20m.Wednesday.sql.gz
- Câu lệnh này cho phép bạn giải nén file dump có tên là db_ispconfig_2010-01-27_17h20m.Wednesday.sql vào thư mục /var/lib/automysqlbackup/daily/db_ispconfig/, và có thể dùng câu lệnh sau để phục hồi:
Đối với trường hợp người sử dụng MySQL có mật khẩu:
mysql -h localhost -u [MySQL user, e.g. root] -p[database password] [name of the database] < [name of your sql dump, e.g. sqldump.sql]
không có khoảng trống giữa tham số -p và mật khẩu
Không có mật khẩu:
mysql -h localhost -u [MySQL user, e.g. root] [name of the database] < [name of your sql dump, e.g. sqldump.sql]
- Tính năng tự động sao lưu 1 lần 1 ngày được lưu trữ trong /etc/cron.daily/automysqlbackup với các tham số tùy chỉnh cho phép bạn sử dụng hoặc không sử dụng chức năng này.