2009年4月24日 星期五

Ubuntu定時備份Mysql

1.cron介紹

cron是系統主要的調度進程,可以在無需人工干預的情況下運行作業。有一個叫做crontab的命令允許用戶提交、編輯或刪除相應的作業。下面是crontab的格式:
分< >時< >日< >月< >星期< >要運行的命令

crontab命令的一般形式為:
crontab[-u user] -e -l -r
其中:
-u 用戶名。
-e 編輯crontab文件。
-l 列出crontab文件中的內容。
-r 刪除crontab文件。

2.mysqldump介紹

--add-drop-table
這個選項將會在每一個表的前面加上DROP TABLE IF EXISTS語句,這樣可以保證導回MySQL數據庫的時候不會出錯,因為每次導回的時候,都會首先檢查表是否存在,存在就刪除。

--add-locks
這個選項會在INSERT語句中捆上一個LOCK TABLE和UNLOCK TABLE語句。這就防止在這些記錄被再次導入數據庫時其他用戶對表進行的操作

-c
這個選項使得mysqldump命令給每一個產生INSERT語句加上列(field)的名字。當把數據導出導另外一個數據庫時這個選項很有用。

--delayed-insert
在INSERT命令中加入DELAY選項

-F
使用這個選項,在執行導出之前將會刷新MySQL服務器的log.

-f
使用這個選項,即使有錯誤發生,仍然繼續導出

-l
使用這個選項,導出表的時候服務器將會給表加鎖。

-t
這個選項使的mysqldump命令不創建CREATE TABLE語句,這個選項在您只需要數據而不需要DDL(數據庫定義語句)時很方便。

-d
這個選項使的mysqldump命令不創建INSERT語句。

--opt
此選項將打開所有會提高文件導出速度和創造一個可以更快導入的文件的選項。

-q
這個選項使得MySQL不會把整個導出的內容讀入內存再執行導出,而是在讀到的時候就寫入導文件中。

-T path
這個選項將會創建兩個文件,一個文件包含DDL語句或者表創建語句,另一個文件包含數據。DDL文件被命名為table_name.sql,數據 文件被命 名為table_name.txt.路徑名是存放這兩個文件的目錄。目錄必須已經存在,並且命令的使用者有對文件的特權。

-w "WHERE Clause" or -where = "Where clause "
使用這一選項來過篩選將要放到 導出文件的數據

3.進行備份

建立備份文件夾 /mysqlbak

在 /usr/sbin 文件下建立bakmysql腳本
#!/bin/sh
name=$(date +%Y-%m-%d)
mysqldump database -ubackup -p123456 |gzip>/mysqldata/mysql$name.gz

在ubuntu下下可以選擇兩種任務方案
第一:
查看 /etc/crontab 文件
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
第一個是指每天0點17分執行/etc/cron.hourly下的所有任務,後面的都類似。
m 分鐘
h 小時
dom 即day of month吧,就是日期
mon 即month,月份
dow 即day of week 星期
run-parts 是執行後面指定的目錄下的任務,不指定這個參數則為執行單個指定的文件。
根據這些我們就可以很輕鬆的進行任務,直接把我們的腳本根據自己的需求放入到其中的文件夾中即可。

第二:
1.crontab -e 編輯增加任務。
0 0 * * * /usr/sbin/bakmysql
表示在每天的0點0分執行/usr/sbin/bakmysql腳本。
2.crontab -l 查看我們的任務。
3./etc/init.d/cron restart 重啟crond

沒有留言: