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 資料夾裡所有的可執行檔案。
arrow
arrow
    全站熱搜

    Dean小子的甜蜜窩 發表在 痞客邦 留言(0) 人氣()