轉--shell指令碼備份mysql資料庫
阿新 • • 發佈:2022-05-05
路
- 獲取mysql伺服器所有資料庫名稱,過濾掉不需要備份的資料庫
- 通過mysqldump來for迴圈匯出所有的資料庫的sql檔案
- 用zip加密壓縮所有的sql檔案
- 定期進行資料清理工作
shell程式碼
資料庫匯出程式碼
#!/bin/bash #1.資料庫資訊定義 mysql_host="192.168.1.1" mysql_user="root" mysql_passwd="root" #sql備份目錄 root_dir="/backup" back_dir="/backup/databases" data_dir="databases" store_dir="database" if [ ! -d $back_dir ]; then mkdir -p $back_dir fi #備份的資料庫陣列 db_arr=$(echo "show databases;" | mysql -u$mysql_user -p$mysql_passwd -h$mysql_host) #不需要備份的單例資料庫 nodeldb="test1" #當前日期 date=$(date -d '+0 days' +%Y%m%d) #zip打包密碼 zippasswd="passwd" zipname="lczh_"$date".zip" #2.進入到備份目錄 cd $back_dir #3.迴圈備份 for dbname in ${db_arr} do if [ $dbname != $nodeldb ]; then sqlfile=$dbname-$date".sql" mysqldump -u$mysql_user -p$mysql_passwd -h$mysql_host $dbname >$sqlfile fi done #4.tar打包所有的sql檔案 tar -zcPpf $root_dir/$store_dir/$zipname --directory / $root_dir/$data_dir #打包成功後刪除sql檔案 if [ $? = 0 ]; then rm -r $data_dir fi
資料定期清理指令碼
作用定期清理14天前的備份檔案
shell程式碼
#!/bin/bash - #1.引數配置 #mysql檔案備份目錄 backup_dir1="/backup/test1/" backup_dir2="/backup/test2/" backdir_arr=($backup_dir1 $backup_dir2) #過期檔案的時間 keep_time=14 #當前所在星期,crontab在奇數的星期7執行 week=$(date +%W) flag=`expr $week % 2` #2.清理過期檔案,只在奇數星期7執行 if [ $flag -eq 1 ]; then for dir in ${backdir_arr[*]} do if [ -d $dir ]; then #查詢14天之外的檔案資料 clean_arr=`find $dir -type f -mtime +$keep_time -exec ls {} ;` for cleanfile in ${clean_arr} do rm $cleanfile done fi done fi
crontab配置
- 0 5 * * 7 執行清理指令碼
複製程式碼