用shell寫乙個mysql資料備份指令碼

2022-10-04 06:12:08 字數 2709 閱讀 5056

思路

其實很簡單

寫乙個shell指令碼通過mysql的mysqldump,將資料匯出成對應的sql檔案;使用linux的crontab定時執行對應指令碼,將sql,檔案儲存到對應的目錄下;可想而知,隨著資料量的增加和備份的頻率都會導致備份伺服器的硬碟資源使用率也會直線攀公升;為了解決這個問題,我們就需要,定時清理備份內容;而我還是umpxgjvnv簡單的使用了個shell指令碼,通過crontab定時去清理; 注意

這裡有幾個問題需要注意的:

通過mysqldump來匯出對應的庫表的sql,這樣必然會造成mysql伺服器的資源消耗(cup,記憶體,io等); mysqldump預設的方式會造成鎖表,這個很恐怖,會導致線上的服務的中斷,也許時間是短暫的,但是這是致命的;(可以通過配置改成事務形式,不鎖表)隨著資料量的增大,mysqldump匯出sql的時間也會增長;

當然資料備份,你可以選擇對應的時間段,按照對應的業務的情況定義備份的週期,又或者如果 mysql伺服器上庫多,根據不同業業務,不同時間段備份;這也是可以的。。。看具體業務情況咯!

因為我的只是開發和測試用,資料量不會很大,所以影響就可以忽略了,只要在大家都下班了後備份就沒關係了(所以我定的是:每天深夜12點備份,乙個月後吧上個月的清理了)

1.mysqldump的許可權說明

mysqldump 所需要的許可權說明:

對於table 來說mysqldump 最少要有select 許可權。對於view 來說mysqldump 要有show view 許可權。對於trrigger 來說mysqldump 要有trriger 許可權。如果要產生乙份一致的備份 mysqldump 要有lock tables 許可權。

下面是使用者建立預計(有不懂的可以另行google,就不多展開了):

create user dumper@'127.0.0.1';

grant select on tempdb.* to dumper@'127.0.0.1';

grant sh程式設計客棧ow view on tempdb.* to dumper@'127.0.0.1';

grant lock tables on tempdb.* to dumwww.cppcns.comper@'127.0.0.1';

grant trigger on tempdb.* to dumper@'127.0.0.1';

2.shell指令碼(匯出資料sql)

#!/bin/sh

# database info

db_user="dumper"

db_pass="..."

db_host="..."

# database array

db_name=("hotel" "food" "foodweb")

# others vars

bin_dir="/usr/bin" #the mysql bin path

bck_dir="/home/mysql-backups" #the backup file directory

date=`date +%f`

# create file

mkdir $bck_dir/$date

# todo

# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlbackup/db_`date +%f`.sql

for var in $;

do $bin_dir/mysqldump --opt --single-transaction --master-data=2 -u$db_user -p$db_pass -h$db_host $db_name > $bck_dir/$date/db_$var.sql

done

引數說明:

--master-data[=#]

在備份匯出的檔案裡追加二進位制binlog檔案的位置和名稱

如果值等於1,就會新增乙個changumpxgjvnve master語句

如果值等於2,就會在chage master語句前新增注釋(不起作用了唄~)

這個引數會--lock-all-tables鎖表,除非你指定了--single-transaction

這種情況下,鎖表只會在dump開始的時候持續一小段時間,照理說 在dump的時候,任何動作都會程式設計客棧影響到binlog檔案 dump結束之後,選項會自動關閉鎖表功能

--single-transaction

以事務的形式執行

3.shell指令碼(按時批量清除n天前指令碼)

#!/bin/sh

find /home/mysql-backups -mtime +30 -name "*.*" -exec rm -rf {} \;

說明:/home/lifeccp/dicom/studies :準備要進行清理的任意目錄 -mtime:標準語句寫法+10:查詢10天前的檔案,這裡用數字代表天數,+30表示查詢30天前的檔案 ".":希望查詢的資料型別,".jpg"表示查詢擴充套件名為jpg的所有檔案,""表示查詢所有檔案 -exec:固定寫法 rm -rf:強制刪除檔案,包括目錄 {} ; :將find的結果放到裡面 4.crontab定時啟動指令碼

crontab -e

0 0 * * * /home/sh/mysql-backups/dump.sh

0 0 1 * * /home/sh/mysql-backups/del.sh

本文標題: 用shell寫乙個mysql資料備份指令碼

本文位址:

Linux 用shell指令碼寫乙個彩色進度條

具體分析請看我以前寫的部落格 c語言中的printf與shell中的printf shell裡的printf,它代表的是一條指令,指令的執行時互動式bash fork子程序,子bash執行指令,當一條指令執行完也就意味著程序結束。程序結束會重新整理緩衝區,所以這裡就算不用 n也是會輸出,這裡的pri...

用shell寫乙個簡單DHCP配置指令碼

軒軒寫的這個小指令碼,主要是可以進行對dhcp服務的安裝 簡單配置 開啟 關閉 檢視狀態等情況 使用呢非常簡單,按照步驟進行準確的設定就可以啦 bin bash yum y install dhcp fun subnet fun 請輸入網路位址 netmask fun 請輸入子網掩碼 range1 ...

shell寫乙個搜尋指令碼

好久沒寫過部落格了,年初換了份工作,就一直很忙,超級忙,甚至沒有時間看看書或者寫寫小工具自己玩玩,確實是一件蠻遺憾的事情。魯迅說,時間就像海綿裡的水,擠擠總有的 魯迅說 這句話還真是我說的 現在工作更偏向客戶端,每天就是跟著美術爸爸的屁股後邊,把特效出現的時間延遲一會,或者把特效向左移動一點,還是蠻...