-
MySQL 備份 shell script
Posted on March 21st, 2006 33 comments這個是我日常用作備份 MySQL database 的 shell script,因為以前是直接將所有資料庫匯出成一個 sql 檔,當其中一個資料庫有問題時,因為沒問題的資料庫不想有改動,要復原資料很麻煩。今天改了一下,它會用 mysqldump 將所有資料庫匯出成獨立 sql 備份檔,然後用 gzip 壓縮成 .gz 檔案。程式會儲存 5 天的備份,當有新備份時,最舊的備份會自動刪除。
使用方法:
修改 db_user, db_passwd 及 db_host 修改成你的 mysql 登入資料,所使用的用戶權限需要與 mysql root 相同。backup_dir 修改成你希望儲存備份的目錄。最後只要把程式加入 crontab 排程自動執行即可。
檔案下載: mysql_backup.sh
33 responses to “MySQL 備份 shell script”
-
站大,您的下載網址有誤。
正確應為:
-
謝謝提醒!
-
[...] MySQL 備份 shell script (tags: Tech Script Backup MySQL) [...]
-
這個 shell script 很實用感謝站大的分享 ~~
-
不好意思 請問一下 為什麼
我將 script 加到 排序時 可以建出 資料夾跟 排序過
但資料夾都是空的 備不出資料但直接執行script 時 可以備出來呀
謝謝 -
試試將 $MYSQLDUMP 及 $MYSQL 改成你主機上面 mysqldump 及 mysql 的絕對路徑。
-
可以了 哇 真是高手
謝謝你的指點 和 無私的分享 -
sidney July 14th, 2006 at 10:24
您好:請問要怎麼把備份出來的資料還原呀!?
謝謝囉! -
sidney July 14th, 2006 at 10:29
再補充一下,我要一次全部把資料還原哦!
ps.站長,我把它加入收藏囉!
-
sidney, 如果要全部還原,可以下:
mysql your_db -uroot -p -
sorry, 上一則”
-
mysql your_db -uroot -p < your_db.sql
-
請問這支程式只能在Linux使用嗎?如果是Windows有程式可以像這樣排程備份嗎?謝謝
-
請問站長大大,我想延續第六個問題。
就是您不是使用which mysql來當做mysql絕對路徑嗎,我在console下的確可以抓的到mysql絕對路徑,
可是為何放到crontab就不行呢?感謝站長的熱心
-
try:
chmod 755 mysql_backup.sh
-
你好,我將你的程式改寫,結果可以使用,很方便~但是有天我重慣FC4,結果同樣的程式執行,他卻說
『:bad interpreter:沒有此一檔案或目錄』,但是我可以很確定有該檔案,不知道是那邊出問題,希望你能解答~ -
這個 shell script 的第一行是:
#!/bin/sh
這一行告訴系統 /bin/sh 用作解譯 shell script 內的指令,所以要確定你的系統是否有安裝 sh 這個 shell。
-
很棒的shell script,
對我有很大的幫助^^
超感謝! -
如何把備份 5 天 改成更多天,謝謝大大!
-
將以下一行的 5 改成想要備份的日數:
test -d "$backup_dir/backup.5/" && $RM -rf "$backup_dir/backup.5"
例如 7 天便改成:
test -d "$backup_dir/backup.7/" && $RM -rf "$backup_dir/backup.7"
以及將以下一行修改,例如 7 天,便這樣:
for int in 6 5 4 3 2 1 0
以上改動我沒有測試過,記得測試一下才拿來用喔。
-
大大謝謝你的回答,我用你的程式執行,出現以下訊息,不知該如何解決,壓縮有成功 information_schema 資料是空白,再次謝謝!
mysqldump: Got error: 1044: Access denied for user ‘user’@'localhost’ to database ‘information_schema’ when using LOCK TABLES
-
resolved
1.我試過備份30天,it works
2.using single transaction could handle this problem
3.thanks -
1.本以為都OK了,結果用crontab 還是不行,原因應該還是一樣,因為我找不到 mysql log 所以也無法確定,
2.直接RUN不用crontab 到是可以
3.Access denied for user ‘user’@’localhost’ to database ‘information_schema’ when using LOCK TABLES
-
看上面的回應:
試試將 $MYSQLDUMP 及 $MYSQL 改成你主機上面 mysqldump 及 mysql 的絕對路徑。
另外,Access denied for use 是 mysql 用戶的權限問題。
-
我的問題跟 14 gary 一樣
請問站長大大,我想延續第六個問題。
就是您不是使用which mysql來當做mysql絕對路徑嗎,我在console下的確可以抓的到mysql絕對路徑,
可是為何放到crontab就不行呢?感謝站長的熱心
Comment by Gary — December 3, 2006 @ 10:58 am
-
Takuya December 3rd, 2007 at 12:13
想請教一下,關於10樓和12樓討論到備份的問題,可不可以說的再詳細一點,我還是不太懂要如何做,可否用站長所提供sh備份後的資料來做說明,謝謝
-
假如你的資料庫名稱為 my_database,以下是還原方法:
1. 用 gzip 解壓備份檔,例如 gzip -d my_database.gz
2. 輸入以下指令:mysql my_database -uroot -p < my_database.sql
然後輸入 mysql 的 root 密碼。
-
crontab 執行這個 shell script時
當您用一般使用者打入
ps -aux
您的密碼就被看光光了請參考官方的密碼安全設定修改
http://dev.mysql.com/doc/refman/5.1/en/password-security.html -
例如在 /root 底下
> vi .my.cnf
加入
[client]
host=localhost
user=root
password=password然後
> chmod 600 .my.cnf
(限制只有 root 能存取)然後把 mysql_backup.sh 裡面的
db_user=”root”
db_passwd=”"
db_host=”localhost”這三行移除
all_db=”$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse ‘show databases’)”
改成
all_db=”$($MYSQL -Bse ‘show databases’)”$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db | $GZIP -9 > “$backup_dir/backup.0/$time.$db.gz”
改成
$MYSQLDUMP $db | $GZIP -9 > “$backup_dir/backup.0/$time.$db.gz”這樣就預設就會去讀取 /root/.my.cnf 裡面的host、user、passwd 了
-
我把程式抓下來直接在 Linux 上執行, 卻發生 common not found 之類的錯誤訊息, 後來我用筆記本開啟原檔案然後再開 vi 貼上, 就可以執行了 …
-
lacostechiu October 23rd, 2010 at 17:39
這個shell 救了我一命,在此感謝大德!
-
實際測試後有些疑問請指教, 解gz後的檔案並沒有.sql的延申檔名, 請問我是否操作有誤?
其次,用Uedit 同時開啟該解壓檔比對使用 phpmyadmin 輸出的.sql檔,發現兩個檔案的內容並不一樣,請問這是否正常? 我使用Linux平台CentOS 5.x,感謝指教.
Jack.
-
samfuyu May 14th, 2011 at 05:07
我原本21樓一樣, 出現mysqldump: Got error: 1044: Access denied for user ‘user’@’localhost’ to database ‘information_schema’ when using LOCK TABLES
看到下面這篇,就增加–single-transaction 此指令就ok了
http://forthescience.org/blog/2008/11/08/error-1044-in-mysql-access-denied-when-using-lock-tables/更改的指令如下:
$MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db –single-transaction | $GZIP -9 > “$backup_dir/backup.0/$time.$db.gz”雖可以備份了,但我又看到這篇,我應該加入他所說的 –flush-logs 及 –master-data嗎???
http://www.neo.com.tw/archives/1122
Leave a reply
-
