close
環境簡介與需求
1. 我的Linux是 Fedora Core 4, kernel 2.6.11-1.1369。
2. 使用的是 "Everything" 安裝,安裝完以後 MySQL 資料檔存放在 /var/lib/mysql 目錄下。
3. 我使用的 tar 語法:
tar czvf <目地壓縮包檔案名> <來源檔案名>
4. 另外,我還使用了shell script和 crontab 來完成每日備份的工作。
5. 我想要備份 mydatabase1 和 mydatabase2 這兩個資料庫。
6. 在壓縮包檔名裡要有備份日期。
撰寫我需要的script並修改相關檔案
1. 可以使用 vi 或是其他您覺得方便的文字編輯器。我在這裡用的是 nano。
2. 建立存放備份用script的目錄:
mkdir /etc/cron.mysqlbkup
3. 編輯該script:
nano /etc/cron.mysqlbkup/mysqlbkup.sh
4. 輸入以下內容:
#!/bin/sh
# Script for backing up MySQL data file.
# sbk
# 2008-Jan-05
#-----------------------------
# backup each database separately
tar czvf /backup/mysqlbkup/mysql.data.mydatabase1.`date +%Y.%m.%d`.tar.gz /var/lib/mysql/mydatabase1/
tar czvf /backup/mysqlbkup/mysql.data.mydatabase2.`date +%Y.%m.%d`.tar.gz /var/lib/mysql/mydatabase2/
exit 0
5. 修改 /etc/crontab 檔。將下面這行加到尾端:
00 21 * * * root run-parts /etc/cron.mysqlbkup
6. 修改 /etc/cron.mysqlbkup/mysqlbkup.sh 屬性使之成為可執行檔:
chmod 770 /etc/cron.mysqlbkup/mysqlbkup.sh
7. 這樣就OK了
說明
4. `date +%Y.%m.%d` 會傳回 YYYY.MM.DD 格式的日期字串。這裡是將備份日期當作檔名的一部份。
資料表的型態跟需要備份的檔案也有關係(其他沒列出的我沒用過):
MyISAM
每個table有這三個檔:
table_name.frm
table_name.MYD
table_name.MYI
InnoDB
每個table需要這些檔:
table_name.frm
資料存在 /var/lib/mysql/ibdata1
交易記錄存在 /var/lib/mysql/ib_logfile?
其他檔如 innodb.status.* 最好也備份
(我很少用到innodb所以這部份請指教)
會這樣寫是因為有時候只需要還原某一個Database而不是全部,對我自己來說比較方便。
5. 一般 Linux 裡已經有了 /etc/cron.daily、/etc/cron.hourly、/etc/cron.weekly、/etc/cron.monthly
等目錄,而且在 /etc/crontab 檔裡已經有了預設的執行時間。可以依照您的需要修改 crontab 檔並
並且加入自己的 script。
這行是每天晚上九點執行 /etc/cron.mysqlbkup 資料夾裡所有的可執行檔案。
1. 我的Linux是 Fedora Core 4, kernel 2.6.11-1.1369。
2. 使用的是 "Everything" 安裝,安裝完以後 MySQL 資料檔存放在 /var/lib/mysql 目錄下。
3. 我使用的 tar 語法:
tar czvf <目地壓縮包檔案名> <來源檔案名>
4. 另外,我還使用了shell script和 crontab 來完成每日備份的工作。
5. 我想要備份 mydatabase1 和 mydatabase2 這兩個資料庫。
6. 在壓縮包檔名裡要有備份日期。
撰寫我需要的script並修改相關檔案
1. 可以使用 vi 或是其他您覺得方便的文字編輯器。我在這裡用的是 nano。
2. 建立存放備份用script的目錄:
mkdir /etc/cron.mysqlbkup
3. 編輯該script:
nano /etc/cron.mysqlbkup/mysqlbkup.sh
4. 輸入以下內容:
#!/bin/sh
# Script for backing up MySQL data file.
# sbk
# 2008-Jan-05
#-----------------------------
# backup each database separately
tar czvf /backup/mysqlbkup/mysql.data.mydatabase1.`date +%Y.%m.%d`.tar.gz /var/lib/mysql/mydatabase1/
tar czvf /backup/mysqlbkup/mysql.data.mydatabase2.`date +%Y.%m.%d`.tar.gz /var/lib/mysql/mydatabase2/
exit 0
5. 修改 /etc/crontab 檔。將下面這行加到尾端:
00 21 * * * root run-parts /etc/cron.mysqlbkup
6. 修改 /etc/cron.mysqlbkup/mysqlbkup.sh 屬性使之成為可執行檔:
chmod 770 /etc/cron.mysqlbkup/mysqlbkup.sh
7. 這樣就OK了
說明
4. `date +%Y.%m.%d` 會傳回 YYYY.MM.DD 格式的日期字串。這裡是將備份日期當作檔名的一部份。
資料表的型態跟需要備份的檔案也有關係(其他沒列出的我沒用過):
MyISAM
每個table有這三個檔:
table_name.frm
table_name.MYD
table_name.MYI
InnoDB
每個table需要這些檔:
table_name.frm
資料存在 /var/lib/mysql/ibdata1
交易記錄存在 /var/lib/mysql/ib_logfile?
其他檔如 innodb.status.* 最好也備份
(我很少用到innodb所以這部份請指教)
會這樣寫是因為有時候只需要還原某一個Database而不是全部,對我自己來說比較方便。
5. 一般 Linux 裡已經有了 /etc/cron.daily、/etc/cron.hourly、/etc/cron.weekly、/etc/cron.monthly
等目錄,而且在 /etc/crontab 檔裡已經有了預設的執行時間。可以依照您的需要修改 crontab 檔並
並且加入自己的 script。
這行是每天晚上九點執行 /etc/cron.mysqlbkup 資料夾裡所有的可執行檔案。
全站熱搜
留言列表