Sao lưu và khôi phục lại MySQL với mysql-zrm trên Debian Sarge
Hướng dẫn này sẽ mô tả làm cách nào để sao lưu (backup) và khôi phục cơ sở dữ
liệu MySQL của bạn với mysql-zrm trên hệ thống Debian Sarge. mysql-zrm là
một phần trong Zmanda Recovery Manager của MySQL, nó là một công cụ mới
giúp bạn có thể tạo logic đầy đủ hay sao lưu thô cơ sở dữ liệu (không quan tâm
đến phương tiện lưu trữ của bạn và cấu hình MySQL), tạo báo cáo về sao lưu,
thẩm tra tình trạng của các sao lưu và khôi phục cơ sở dữ liệu của bạn
Nó cũng có thể gửi thông báo bằng e-mail về trạng thái sao lưu, từ đó bạn có thể
bổ sung nhiều biện pháp sao lưu (dựa trên ứng dụng của bạn và thời gian (ví dụ như hàng ngày
hay hàng tuần…)).
Điều đầu tiên tôi muốn nói ở đây rằng, đây không chỉ là cách duy nhất cho thiết lập một hệ thống
như vậy. Trong thực tế có nhiều cách thực hiện khác nhau để giải quyết được vấn đề này và đây
chỉ là một trong những cách đó.
1, Chú ý mở đầu
mysql-zrm làm việc trên MySQL 4.1 và các phiên bản cao hơn, chính vì vậy bạn phải có một
máy chủ MySQL đã cài đặt trên hệ thống Debian Sarge hay tương tự thế:
apt-get install mysql-client-4.1 mysql-common-4.1 mysql-server-4.1
Phần này cũng được cài gói libdbd-mysql-perl, đây là một gói rất cần thiết cho mysql-zrm khi
mysql-zrm được viết bằng Perl.
2, Cài đặt
Zmanda đã đưa ra một gói rpm của mysql-zrm cho phân phối dựa trên rpm giống như Fedora,
RedHat, SuSE, CentOS, tuy nhiên, không có gói nào cho Debian Sarge. Vì vậy bạn phải tải gói
mysql-zrm từ Lúc đó bản này đang là 1.0.3 và tải về
thư mục /tmp.
cd /tmp
gzip COPYING
gzip INSTALL
gzip README
mkdir /usr/share/doc/MySQL-zrm
mv * /usr/share/doc/MySQL-zrm
mkdir /var/lib/mysql-zrm
touch /etc/mysql-zrm/mysql-zrm-release
Các file thực thi đã được chuyển đến /usr/bin, các file cấu hình được đặt trong /etc/mysql-
zrm
và các trang thực thi (mysql-zrm, mysql-zrm-reporter và mysql-zrm-scheduler) vì vậy
nếu bạn không chắc về cách sử dụng của những thực thi này bạn có thể chạy:
man mysql-zrm
man mysql-zrm-reporter
man mysql-zrm-scheduler
3, Cấu hình cơ bản
File cấu hình chính là /etc/mysql-zrm/mysql-zrm.conf. Trong file này, cần phải chỉ ra user
và password của người dùng.
vi /etc/mysql-zrm/mysql-zrm.conf
user="root"
password="yourrootsqlpassword"
Nếu không chỉ ra user và password thì mysql-zrm cho rằng các giá trị là mặc định với tất cả các
thiết lập khác. Với cấu hình này, mysql-zrm sẽ thực hiện backup tất cả cơ sở dữ liệu trong định
dạng thô và nó sẽ giữ các backup này mãi mà không gửi thông báo email.
Định dạng thô nghĩa là, nó sao lưu cơ sở dữ liệu như các file nhị phân có thể được copy ngược
lại cơ sở dữ liệu trong trường hợp mất dữ liệu, nhưng nó có thể gây ra các vấn đề nếu bạn copy
những file này giữa các phiên bản MySQL khác nhau.
Bản sao của định dạng thô là định dạng logic tạo file văn bản với kết xuất SQL Server đơn giản
Mặc định /etc/mysql-zrm/mysql-zrm.conf cho hầu hết các chú thích để giải thích tất cả các
tùy chọn cấu hình. Hiện tại tôi đang sử dụng các thiết lập đó:
vi /etc/mysql-zrm/mysql-zrm.conf
user="root"
password="yourrootsqlpassword"
mailto=""
backup-mode=logical
retention-policy=7D
# all-databases=1 is optional, as it is the default
setting
all-databases=1
4, Các ví dụ
Với mysql-zrm bạn có thể duy trì nhiều backup, gọi là một tập hợp backup sets ví dụ như
backup hàng ngày, hàng tuần và backup cho cơ sở dữ liệu hệ thống hoạt động thương mại
(osCommerce) của bạn, backup cho cơ sở dữ liệu vBulletin…
Bây giờ hãy tạo backup đầu tiên của bạn (chúng ta đã tạo trong thiết lập backup dailyrun):
mysql-zrm-scheduler now backup-set dailyrun backup-level 0
Nó sẽ ngay lập tức sao lưu tất cả cơ sở dữ liệu tới thư mục /var/lib/mysql-zrm/dailyrun và
cũng sẽ tạo thư mục /etc/mysql-zrm/dailyrun. backup-level 0 nghĩa là: thực hiện một
backup đầy đủ (nếu bạn có thể thực hiện các backup dự phòng tăng ( backup-level 1) nhưng
vấn đề này sẽ được nói sau còn bây giờ chúng ta thực hiện các backup)
Nếu bạn cho phép các thông báo email, bạn sẽ nhận được một email với trạng thái backup lúc
đó. Nhưng bạn cũng có thể tạo một báo cáo về trạng thái backup bằng dòng lệnh sau:
mysql-zrm-reporter where backup-set=dailyrun show backup-status-info
Kết quả thực hiện dòng lệnh:
backup_set backup_date backup_level backup_status comment
/var/lib/mysql-zrm
0 2 * * 0 /usr/bin/mysql-zrm action backup
d
estination
/var/lib/mysql-zrm backup-set weeklyrun backup-level 0
Như bạn có thể thấy, backup hàng ngày được chạy hàng ngày vào lúc 03:00h và hàng tuần vào
Chủ nhật lúc 02:00h.
(BTW thay vì
mysql-zrm-scheduler query
bạn có thể chạy
crontab -l
để có được thông tin như vậy)
Nếu bạn muốn bắt đầu backup hàng ngày tại thời điểm khác, ví dụ là 13:35, bạn có thể thực hiện
nó như sau:
mysql-zrm-scheduler add interval daily backup-set dailyrun start
13:35 backup-level 0
Để gỡ bỏ một backup đã được ghi trong chương trình bạn có thể làm như sau:
mysql-zrm-scheduler delete interval weekly
Nó sẽ gỡ bỏ backup hàng tuần được chạy vào 02:00h Chủ nhật. Nếu bạn muốn gỡ backup hàng
ngày được ghi trong chương trình vào lúc 13:35h bạn hãy làm như sau:
mysql-zrm-scheduler delete interval daily start 13:35
Nhưng bạn cũng có thể chạy
crontab -e
để cho phép dễ dàng hơn bằng mysql-zrm-scheduler.
5, Các báo cáo tùy chỉnh và HTML
Trong mục 4, tôi đã đề cập đến các loại báo cáo gì đang sẵn có. Nhưng bạn cũng có thể tạo các
báo cáo tùy chỉnh, ví dụ: bạn có thể chỉ định cột nào hay thông tin nào bạn muốn xem. Ví dụ:
Cho ra:
Use of uninitialized value in concatenation (.) or string
at /usr/bin/mysql-zrm line 1305.
INFO: mysql-zrm-version
INFO: Verification successful
(Bạn có thể bỏ qua báo cảnh dòng đầu tiên, nó hoàn toàn không nghiêm trọng)
Tiếp theo chúng ta kiểm tra một backup cụ thể bên trong tập backup dailyrun. Đầu tiên đã chạy
mysql-zrm-reporter -show restore-full-info where backup-set=dailyrun
để tìm ra backup nào có sẵn:
backup_set backup_date backup_level backup_directory dailyrun Tue 26 Sep 2006 07:57:47 PM CEST 0
/var/lib/mysql-zrm/dailyrun/20
060926195747
dailyrun Tue 26 Sep 2006 07:58:08 PM CEST 0
/var/lib/mysql-zrm/dailyrun/20
060926195808
dailyrun Tue 26 Sep 2006 07:58:31 PM CEST 0
/var/lib/mysql-zrm/dailyrun/20
060926195831
dailyrun Tue 26 Sep 2006 08:24:04 PM CEST 0
/var/lib/mysql-zrm/dailyrun/20
060926202404
Như bạn có thể thấy, có bốn backup trong thiết lập backup dailyrun của chúng ta. Nếu muốn
kiểm tra backup cuối cùng trong thư mục /var/lib/mysql-zrm/dailyrun/20060926202404.
Hãy làm như sau:
mysql-zrm action verify-backup backup-set dailyrun no-quiet
source-directory /var/lib/mysql-zrm/dailyrun/20060926202404
INFO: mysql-zrm-version
INFO: Restored database from raw backup: egroupware
INFO: Restored database from raw backup: mysql
INFO: Restore done in 14 seconds.
MySQL server has been shutdown. Please restart after
verification.
Dữ liệu đã được khôi phục nhưng máy chủ MySQL đã bị tắt. Vì vậy chúng ta phải bắt đầu nó
với:
/etc/init.d/mysql start
8, Các biện pháp Backup
Cho tới thời điểm này, chúng ta đã có một cấu hình toàn cục trong
/etc/mysql-zrm/mysql-
zrm.conf
được áp dụng đến tất cả các tập backup. Bây giờ giả dụ rằng chúng ta có một tập
backup
osCommerce cho cơ sở dữ liệu osCommerce, tập backup vBulletin là cho cơ sở dữ liệu
vBulletin.
Nó hoàn toàn không giống kiểu backup tất cả dữ liệu của chúng ta bởi vì backup chỉ bao gồm cơ
sở dữ liệu osCommerce với tập backup
osCommerce và tương tự với tập backup vBulletin.
Chúng ta có thể giải quyết vấn đề này như sau:
Mỗi một tập backup có thư mục con của nó trong thư mục /etc/mysql-zrm ví dụ: tập backup
osCommerce có thư mục /etc/mysql-zrm/osCommerce. Bây giờ, bất cứ khi nào mysql-zrm
được chạy, trước tiên nó kiểm tra cấu hình toàn cục trong /etc/mysql-zrm/mysql-zrm.conf
sau đó kiểm tra thư mục của tập backup hiện thời cho file mysql-zrm.conf mà các thiết lập của
nó ghi đè lên các thiết lập toàn cục trong /etc/mysql-zrm/mysql-zrm.conf, ví dụ: nếu tập
backup hiện thời là osCommerce thì mysql-zrm sẽ đọc trước cấu hình từ /etc/mysql-
Use of uninitialized value in concatenation (.) or string
at /usr/bin/mysql-zrm line 1305.
INFO: mysql-zrm-version
ERROR: cannot open index file /var/lib/mysql/index No such
file or directory
Đó là lý do tại sao tôi nghĩ nó sẽ tốt hơn nếu thực hiện đầy đủ các backup vào thời điểm này thay
vì ghi dự phòng tăng.
12, Các backup từ xa
Mysql-zrm cho phép bạn có thể thực hiện các backup từ các máy chủ MySQL từ xa trên mạng.
Tuy nhiên đây điều này cũng có thể gây ra một vài vấn đề đối với tôi.
12.1, Lần thử đầu
Trong bước đầu tiên, tôi muốn thực hiện một backup (trong định dạng thô) của một máy chủ
MySQL trên một hệ thống SuSE 10.0 từ xa. Tôi soạn /etc/mysql-zrm/mysql-zrm.conf và đặt
user, password, tên máy chủ vào. Sau đó chạy
mysql-zrm-scheduler now backup-set dailyrun backup-level 0
Kết quả như sau:
Logging to /var/log/mysql-zrm/mysql-zrm-scheduler.log
Use of uninitialized value in concatenation (.) or string at /usr/bin/mysql-
zrm line 1305.
INFO: mysql-zrm-version
WARNING: Binary logging is off. Incremental and logical backup will not work.
INFO: backup-set=dailyrun
INFO: backup-date=20060927095528
INFO: backup-date-epoch=1159343728
INFO: mysql-version=4.1.13
INFO: backup-directory=/var/lib/mysql-zrm/dailyrun/20060927095528
INFO: backup-set=dailyrun
INFO: backup-date=20060927100653
INFO: backup-date-epoch=1159344413
INFO: mysql-version=4.1.11-Debian_4sarge7-log
INFO: backup-directory=/var/lib/mysql-zrm/dailyrun/20060927100653
INFO: backup-level=0
WARNING: Database test is empty and hence will not be backedup
ERROR: Output of command: 'mysqlhotcopy' is
Cannot open dir '/var/lib/mysql/web34_db1': No such file or directory at
/usr/bin/mysqlhotcopy line 293.
ERROR: mysqlhotcopy command did not succeed.
Command used is mysqlhotcopy quiet user=root password=*****
host=192.168.0.110 mysql web34_db1 "/var/lib/mysql-
zrm/dailyrun/20060927100653" > /tmp/yxFsViAlbm 2>&1
Return value is 512
INFO: backup-status=Backup failed
INFO: Backup failed
ERROR: /usr/bin/mysql-zrm did not finish successfully
Nó dường như có lỗi thư mục /var/lib/mysql/web34_db1 (web34_db1 là một trong những cơ
sở dữ liệu trên hệ thống từ xa) trong hệ thống hiện tại. Vì vậy tôi đã tạo nó:
mkdir /var/lib/mysql/web34_db1
và chạy
mysql-zrm-scheduler now backup-set dailyrun backup-level 0
lúc này nó đã làm việc, nhưng tôi nghi ngờ rằng đây là cách nó được cho là…
12.3, Lần thử thứ ba
Thời điểm này, tôi cố gắng tạo một backup từ cùng một hệ thống Debian Sarge từ xa như trước
nhưng trong logic thay vì định dạng thô. Tôi chạy
| have_openssl | NO |
+ + +
1 row in set (0.01 sec)
Không hỗ trợ SSL…
13, Các liên kết
• mysql-zrm:
• mysql-zrm Manual:
• Zmanda:
• MySQL:
• Debian: