主頁(yè) > 知識(shí)庫(kù) > 用shell寫一個(gè)mysql數(shù)據(jù)備份腳本

用shell寫一個(gè)mysql數(shù)據(jù)備份腳本

熱門標(biāo)簽:網(wǎng)站排名優(yōu)化 鐵路電話系統(tǒng) AI電銷 百度競(jìng)價(jià)排名 呼叫中心市場(chǎng)需求 Linux服務(wù)器 服務(wù)外包 地方門戶網(wǎng)站

思路

其實(shí)很簡(jiǎn)單

寫一個(gè)shell腳本通過(guò)mysql的mysqldump,將數(shù)據(jù)導(dǎo)出成對(duì)應(yīng)的sql文件;使用linux的crontab定時(shí)運(yùn)行對(duì)應(yīng)腳本,將sql,文件保存到對(duì)應(yīng)的目錄下;可想而知,隨著數(shù)據(jù)量的增加和備份的頻率都會(huì)導(dǎo)致備份服務(wù)器的硬盤資源使用率也會(huì)直線攀升;為了解決這個(gè)問(wèn)題,我們就需要,定時(shí)清理備份內(nèi)容;而我還是簡(jiǎn)單的使用了個(gè)shell腳本,通過(guò)crontab定時(shí)去清理; 注意

這里有幾個(gè)問(wèn)題需要注意的:

通過(guò)mysqldump來(lái)導(dǎo)出對(duì)應(yīng)的庫(kù)表的sql,這樣必然會(huì)造成mysql服務(wù)器的資源消耗(cup,內(nèi)存,io等); mysqldump默認(rèn)的方式會(huì)造成鎖表,這個(gè)很恐怖,會(huì)導(dǎo)致線上的服務(wù)的中斷,也許時(shí)間是短暫的,但是這是致命的;(可以通過(guò)配置改成事務(wù)形式,不鎖表)隨著數(shù)據(jù)量的增大,mysqldump導(dǎo)出sql的時(shí)間也會(huì)增長(zhǎng);

當(dāng)然數(shù)據(jù)備份,你可以選擇對(duì)應(yīng)的時(shí)間段,按照對(duì)應(yīng)的業(yè)務(wù)的情況定義備份的周期,又或者如果 mysql服務(wù)器上庫(kù)多,根據(jù)不同業(yè)業(yè)務(wù),不同時(shí)間段備份;這也是可以的。。??淳唧w業(yè)務(wù)情況咯!

因?yàn)槲业闹皇情_發(fā)和測(cè)試用,數(shù)據(jù)量不會(huì)很大,所以影響就可以忽略了,只要在大家都下班了后備份就沒(méi)關(guān)系了(所以我定的是:每天深夜12點(diǎn)備份,一個(gè)月后吧上個(gè)月的清理了)

1.mysqldump的權(quán)限說(shuō)明

mysqldump 所需要的權(quán)限說(shuō)明:

對(duì)于table 來(lái)說(shuō)mysqldump 最少要有select 權(quán)限。對(duì)于view 來(lái)說(shuō)mysqldump 要有show view 權(quán)限。對(duì)于trrigger 來(lái)說(shuō)mysqldump 要有trriger 權(quán)限。如果要產(chǎn)生一份一致的備份 mysqldump 要有l(wèi)ock tables 權(quán)限。

下面是用戶創(chuàng)建預(yù)計(jì)(有不懂的可以另行g(shù)oogle,就不多展開了):

create user dumper@'127.0.0.1';
grant select on tempdb.* to dumper@'127.0.0.1';
grant show view on tempdb.* to dumper@'127.0.0.1';
grant lock tables on tempdb.* to dumper@'127.0.0.1';
grant trigger on tempdb.* to dumper@'127.0.0.1';

2.shell腳本(導(dǎo)出數(shù)據(jù)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 ${DB_NAME[@]};
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

參數(shù)說(shuō)明:

--master-data[=#]

在備份導(dǎo)出的文件里追加二進(jìn)制binlog文件的位置和名稱
如果值等于1,就會(huì)添加一個(gè)CHANGE MASTER語(yǔ)句
如果值等于2,就會(huì)在CHAGE MASTER語(yǔ)句前添加注釋(不起作用了唄~)
這個(gè)參數(shù)會(huì)--lock-all-tables鎖表,除非你指定了--single-transaction
這種情況下,鎖表只會(huì)在dump開始的時(shí)候持續(xù)一小段時(shí)間,照理說(shuō) 在dump的時(shí)候,任何動(dòng)作都會(huì)影響到binlog文件 dump結(jié)束之后,選項(xiàng)會(huì)自動(dòng)關(guān)閉鎖表功能

--single-transaction

以事務(wù)的形式執(zhí)行

3.shell腳本(按時(shí)批量清除N天前腳本)

#!/bin/sh
find /home/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} \;

說(shuō)明:

/home/lifeccp/dicom/studies :準(zhǔn)備要進(jìn)行清理的任意目錄 -mtime:標(biāo)準(zhǔn)語(yǔ)句寫法+10:查找10天前的文件,這里用數(shù)字代表天數(shù),+30表示查找30天前的文件 ".":希望查找的數(shù)據(jù)類型,".jpg"表示查找擴(kuò)展名為jpg的所有文件,""表示查找所有文件 -exec:固定寫法 rm -rf:強(qiáng)制刪除文件,包括目錄 {} ; :將find的結(jié)果放到里面 4.crontab定時(shí)啟動(dòng)腳本

crontab -e
0 0 * * * /home/sh/mysql-backups/dump.sh
0 0 1 * * /home/sh/mysql-backups/del.sh
您可能感興趣的文章:
  • HBASE 常用shell命令,增刪改查方法
  • shell腳本實(shí)現(xiàn)mysql定時(shí)備份、刪除、恢復(fù)功能
  • shell簡(jiǎn)單處理mysql查詢結(jié)果的方法
  • Shell下實(shí)現(xiàn)免密碼快速登陸MySQL數(shù)據(jù)庫(kù)的方法
  • MySQL數(shù)據(jù)庫(kù)的shell腳本自動(dòng)備份
  • 通過(guò)shell腳本對(duì)mysql的增刪改查及my.cnf的配置

標(biāo)簽:湖南 黃山 崇左 衡水 蘭州 銅川 湘潭 仙桃

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用shell寫一個(gè)mysql數(shù)據(jù)備份腳本》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266