Mysqldump 備份說明及數據庫備份腳本分享-運維筆記


 

MySQLdump是MySQL自帶的導出數據工具,即mysql數據庫中備份工具,用於將MySQL服務器中的數據庫以標准的sql語言的方式導出,並保存到文件中。Mysqldump是一個客戶端邏輯備份的工作,備份的SQL文件可以在其他MySQL服務器上進行還原。

如需備份,則至少需要對該表的select權限,需要備份視圖則需要改賬戶具有SHOW VIEW權限,觸發器需要TRIGGER。如需鎖表,則不可使用--single-transaction選項。其他權限暫未列出。
如需還原,則需要對應的執行權限,如create表,則需要對該庫的create權限。

Mysqldump導出可以包括ALTER DATABASE與相關更改,其中包括導出元數據、更改字符編碼,在導入對應文件時,相應的權限更改也會發生影響。如果在服務器上備份的表均為MyISAM,也可以使用mysqlhotcopy來完成任務。

從性能和伸縮性考慮,mysqldump的優勢包括:在輸出之前可以很方便的查看或編輯文件,你還可以克隆數據庫與DBA的工作,或者將生產環境下的數據進行微小測試。這不是作為快速備份或可伸縮性很強的方案。即針對不同大小的數據需要安排合理時間,在需要還原時速度並不快,因為需要重新進行I/O、創建索引等。

對於大量數據來說,物理備份可能更為合適,因為它可以快速還原。

- 如果你的表以Innodb引擎為主,可以考慮使用MySQL的mysqlbackup命令。因為他提供了最好的Innodb備份:它也可以備份其他如MyIsAM與其他存儲引擎;提供了更多的備份參數進行選擇。詳情見手冊 25.2 “MySQL Enterprise Backup Overview”

- 如果你的表以MyISAM引擎為主,可以考慮使用mysqlhotcopy來替代,它可能比mysqldump表現更為好,詳情見mysqlhotcopy手冊。

Mysqldump可以行級導出數據,或者也可以將整個表載入內存一次性導出,如果將所有數據導入內存可能會面臨內存緩沖區不夠的問題。如果要行級導出數據,使用--quick選項(或者--opt,它支持--quick)。--opt選項是默認選項,所以為了保證內存緩沖區,使用--skip-quick。

如果使用高版本的mysqldump來備份一個低版本的MySQL服務器中的數據,使用--skip-opt代替--opt或者-- extended-insert選項。

下面對它的使用進行總結性梳理:

查詢該命令的幫助信息(有很多參數,具體也可以man一下)
[root@Mysql-node1 ~]# mysqldump --help

常用的幾個選項
--add-drop-table:在每個創建數據庫表語句前添加刪除數據庫表的語句;
--add-locks:備份數據庫表時鎖定數據庫表;
--all-databases(即-A):備份MySQL服務器上的所有數據庫;
--comments:添加注釋信息;
--compact:壓縮模式,產生更少的輸出;
--complete-insert:輸出完成的插入語句;
--databases(即-B):指定要備份的數據庫;
--default-character-set:指定默認字符集;
--force(即-f):當出現錯誤時仍然繼續備份操作;
--host:指定要備份數據庫的服務器;
--lock-tables:備份前,鎖定所有數據庫表;
--no-create-db:禁止生成創建數據庫語句;
--no-create-info:禁止生成創建數據庫庫表語句;
--password:連接MySQL服務器的密碼;
--port:MySQL服務器的端口號;
--user:連接MySQL服務器的用戶名。
--no-data(即-d):只導出表結構。
--quick,(即-q):快速導出。
--xml,(即-X):導出為xml文件。
--tables:覆蓋 --databases or -B選項,后面所跟參數被視作表名。
--default-character-set,字符集設置。比如--default-character-set=gb2312、--default-character-set=utf8

參數--lock-tables 表示的是一次性鎖定當前庫的所有表, 而不是鎖定當前導出表! 例如:
# mysqldump -u root -p --default-character-set=utf8 --opt --extended-insert=false --lock-tables MyDB > db_backup_MyDB.sql 

實例說明:

1)導出、導入所有的庫(--all-databases,  -A   導出全部數據庫)

導出所有的庫
[root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 --all-databases >/opt/all.sql 
Warning: Using a password on the command line interface can be insecure.

導入所有的庫
[root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 < /opt/all.sql                
Warning: Using a password on the command line interface can be insecure.

或者
mysql> source /opt/all.sql;

2)導出、導入某個庫(比如kevin庫)

導出kevin庫
[root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 kevin > /opt/kevin.sql
Warning: Using a password on the command line interface can be insecure.

導入kevin庫(前提是kevin庫要存在,如果沒有,在導入前先創建kevin空庫)
[root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin.sql
Warning: Using a password on the command line interface can be insecure.

或者
mysql> use kevin;
mysql> source /opt/all.sql;

3)導出、導入某幾個庫(比如kevin、grace庫)(--databases, -B 導出部分數據庫)

導出kevin、grace庫
[root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 -B kevin grace > /opt/kevin_grace.sql
Warning: Using a password on the command line interface can be insecure.

導入kevin、grace庫(多個庫的導入、恢復數據操作,不需要要求這些庫必須存在,如沒有存在,不需要提前創建這些空庫)
[root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 < /opt/kevin_grace.sql                   
Warning: Using a password on the command line interface can be insecure.

或者
mysql> source /opt/kevin_grace.sql;

4)導出、導入某個庫的某些表數據

導出kevin庫的haha、heihei表數據(可以在導出時加--add-locks參數,表示導出時鎖定數據庫表;這里沒有添加)
[root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 kevin haha heihei > /opt/kevin_hahei.sql         
Warning: Using a password on the command line interface can be insecure.

導入kevin庫的haha、heihei表數據(要保證kevin庫真實存在,如果沒有,需要提前創建)
[root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin_hahei.sql
Warning: Using a password on the command line interface can be insecure.

或者
mysql> use kevin;
Database changed
mysql> source /opt/kevin_hahei.sql;

5)只導出數據庫結構,不導出數據(--no-data, -d  只導出表結構,不導出表數據)

導出kevin庫下所有的表結構(不導出表數據)(去掉下面的--add-drop-table參數也可以)
[root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 -d --add-drop-table kevin > /opt/kevin_table.sql            
Warning: Using a password on the command line interface can be insecure.
 
導入kevin庫的表結構(前提要保證kevin庫真實存在)
[root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin_table.sql
Warning: Using a password on the command line interface can be insecure.
 
或者
mysql> use kevin;
Database changed
mysql> source /opt/kevin_table.sql;
 
----------------------------------------------------------------------------------------------------
如果是導出某個庫下的一個或幾個表結構(不包括表數據),命令如下(加不加--add-drop-table參數都可以):
[root@Mysql-node1 ~]# mysqldump -uroot -hlocalhost -p123456 -d kevin haha heihei > /opt/kevin_table_2.sql              
Warning: Using a password on the command line interface can be insecure.

導入上面備份的數據時,要保證kevin提前真實存在。
[root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 kevin < /opt/kevin_table_2.sql 
Warning: Using a password on the command line interface can be insecure.

6)完整導出時過濾掉某些庫(使用--databases,而不是--all-databases)

如下在導出整個數據庫時,過濾掉information_schema、mysql、test、performance_schema這幾個庫
[root@Mysql-node1 ~]# mysql -p123456 -e "show databases"|grep -Ev "Database"                                      
information_schema
grace
kevin
mysql
performance_schema
test

[root@Mysql-node1 ~]# mysql -p123456 -e "show databases"|grep -Ev "Database|information_schema|mysql|test|performance_schema"
grace
kevin

[root@Mysql-node1 ~]# mysql -p123456 -e "show databases"|grep -Ev "Database|information_schema|mysql|test|performance_schema"|xargs mysqldump -uroot -p123456 --databases > /opt/mysql_dump.sql

導入上面備份的庫(這些庫不需要真實存在,恢復時如果庫不存在,會自動創建)
[root@Mysql-node1 ~]# mysql -uroot -hlocalhost -p123456 < /opt/mysql_dump.sql
Warning: Using a password on the command line interface can be insecure.

或者:
mysql> source /opt/kevin_grace.sql;

                                                                       Mysqldump日常操作語句集錦                                                                    

mysqldump的幾種常用方法:
1)導出整個數據庫(包括數據庫中的數據)
mysqldump -u username -p dbname > dbname.sql   
  
2)導出數據庫結構(不含數據)
mysqldump -u username -p -d dbname > dbname.sql   
  
3)導出數據庫中的某張數據表(包含數據)
mysqldump -u username -p dbname tablename > tablename.sql   
  
4)導出數據庫中的某張數據表的表結構(不含數據)
mysqldump -u username -p -d dbname tablename > tablename.sql  
  
=============================================================================
mysqldump常用參數說明(適用於mysql 5.6版本, mysql 5.7版本有的就不太適用了)

--all-databases , -A 導出全部數據庫
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases > /root/db.sql
 
--all-tablespaces , -Y導出全部表空間。(-y不導出任何表空間信息)
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --all-tablespaces --no-tablespaces > /root/db.sql
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --no-tablespaces > /root/db.sql 
  
--add-drop-database每個數據庫創建之前添加drop數據庫語句。
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --add-drop-database > /root/db.sql
  
--add-drop-table每個數據表創建之前添加drop數據表語句。(默認為打開狀態,使用--skip-add-drop-table取消選項)
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases   > /root/db.sql          #默認添加drop語句
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --skip-add-drop-table > /root/db.sql      #取消drop語句
  
--add-locks在每個表導出之前增加LOCK TABLES並且之后UNLOCK TABLE。(默認為打開狀態,使用--skip-add-locks取消選項)
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases > /root/db.sql       #默認添加LOCK語句
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --skip-add-locks   > /root/db.sql       #取消LOCK語句
  
--comments附加注釋信息。默認為打開,可以用--skip-comments取消
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases  > /root/db.sql         #默認記錄注釋
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --skip-comments  > /root/db.sql     #取消注釋
  
--compact導出更少的輸出信息(用於調試)。去掉注釋和頭尾等結構。
可以使用選項:--skip-add-drop-table 、--skip-add-locks、--skip-comments、--skip-disable-keys
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --compact > /root/db.sql
 
--complete-insert, -c使用完整的insert語句(包含列名稱)。這么做能提高插入效率,但是可能會受到max_allowed_packet參數的影響而導致插入失敗。
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --complete-insert > /root/db.sql
  
--compress, -C在客戶端和服務器之間啟用壓縮傳遞所有信息
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --compress > /root/db.sql
  
--databases, -B導出幾個數據庫。參數后面所有名字參量都被看作數據庫名。
[root@Mysql-node1 ~]# mysqldump -uroot -p --databases test mysql > /root/db.sql

--debug-info輸出調試信息並退出
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --debug-info > /root/db.sql
  
--default-character-set設置默認字符集,默認值為utf8
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --default-character-set=utf8 > /root/db.sql
  
--delayed-insert采用延時插入方式(INSERT DELAYED)導出數據
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --delayed-insert > /root/db.sql
  
--events, -E導出事件。
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --events > /root/db.sql
  
--flush-logs開始導出之前刷新日志。請注意:假如一次導出多個數據庫(使用選項--databases或者--all-databases),將會逐個數據庫刷新日志。
除使用--lock-all-tables或者--master-data外。在這種情況下,日志將會被刷新一次,相應的所以表同時被鎖定。因此,如果打算同時導出和刷新
日志應該使用--lock-all-tables 或者--master-data 和--flush-logs。
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --flush-logs > /root/db.sql
  
--flush-privileges在導出mysql數據庫之后,發出一條FLUSH PRIVILEGES 語句。為了正確恢復,該選項應該用於導出mysql數據庫和依賴mysql
數據庫數據的任何時候。
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --flush-privileges > /root/db.sql
  
--force在導出過程中忽略出現的SQL錯誤。
[root@Mysql-node1 ~]# mysqldump -uroot -p --all-databases --force > /root/db.sql
  
--host, -h需要導出的主機信息
[root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases > /root/db.sql
  
--ignore-table不導出指定表。指定忽略多個表時,需要重復多次,每次一個表。每個表必須同時指定數據庫和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
[root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user > /root/db.sql
  
--lock-all-tables, -x提交請求鎖定所有數據庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,並且自動關閉--single-transaction 和--lock-tables 選項。
[root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables > /root/db.sql
  
--lock-tables, -l開始導出前,鎖定所有表。用READ LOCAL鎖定表以允許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個
更好的選擇,因為它根本不需要鎖定表。請注意當導出多個數據庫時,--lock-tables分別為每個數據庫鎖定表。因此,該選項不能保證導出文件中的表在數據庫之間
的邏輯一致性。不同數據庫表的導出狀態可以完全不同。
[root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --lock-tables > /root/db.sql
  
--no-create-db, -n只導出數據,而不添加CREATE DATABASE 語句。
[root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --no-create-db > /root/db.sql
  
--no-create-info, -t只導出數據,而不添加CREATE TABLE 語句。
[root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --no-create-info > /root/db.sql
  
--no-data, -d不導出任何數據,只導出數據庫表結構。
[root@Mysql-node1 ~]# mysqldump -uroot -p --host=localhost --all-databases --no-data > /root/db.sql

                                                                    備份Mysql數據庫的通常使用命令                                                         

1)備份kevin庫 (兩種方法)
# mysqldump --single-transaction --master-data=2 --triggers --routines --database kevin -uroot -p123456 > /root/kevin.sql
# mysqldump -uroot -p123456 -B -F -R -x --master-data=2 kevin|gzip >/opt/backup/kevin_$(date +%F).sql.gz

參數說明:
-B:指定數據庫
-F:刷新日志
-R:備份存儲過程等
-x:鎖表
--master-data:在備份語句里添加CHANGE MASTER語句以及binlog文件及位置點信息

這里稍微注意下:
mysql5.6使用mysqldump備份時,指定備份的具體庫,使用--database
mysql5.7使用mysqldump備份時,指定備份的具體庫,使用--databases

2)備份整個數據庫(基於打開GTID功能的Mysql)。下面這兩種備份方法中,不能在下面命令中添加具體的庫,比如kevin庫
# mysqldump -u root -p'123456' --lock-all-tables --master-data=2 --flush-logs --all-databases --triggers --routines --events > 205_slave.sql
# mysqldump -uroot -p'123456' -B -A -F --set-gtid-purged=OFF  --master-data=2 --single-transaction  --events |gzip >/root/205_$(date +%F).sql.gz

以上備份的sql文件,恢復時,直接執行"mysql -uroot -p123456 < file.sql" 或者登錄數據庫執行"source file.sql" 命令進行即可恢復備份的數據!不需要提前創建要恢復的庫!

                                                                   mysql數據庫相關備份策略的腳本分享                                                      

本機mysql采用的是多庫多實例方案,即一個庫對應一個實例,有多少個庫就開啟多少個端口的mysql實例。
正常情況下都采用這種方案,一庫一實例集群,隔離性和可辨識性會很強,性能也更強。

如果是虛擬機,機器性能有限,可以一個實例開啟多個庫。比如一個實例對應3個庫,開啟三個實例,一台機器總共開9個庫,
然后針對這三個實例再做集群(比如一主兩從,即再加兩台機器,分別針對每台機器的三個實例做各自的一主兩從)

mysql的備份腳本:
[app@kevin-mysql01 scripts]$ pwd
/home/scripts
[app@kevin-mysql01 scripts]$ ls
dump_full.sh  full_backup_mysql.sh  incremental_backup_mysql.sh  shibo_databackup.sh  rsync.sh
 
1)
[app@kevin-mysql01 scripts]$ cat dump_full.sh
#!/bin/bash
#注釋:mysql DB的全庫備份腳本 
DB_USER='mybak'
DATE=`date -d"today" +%Y%m%d`
TIME=`date "+%Y-%m-%d %H:%M:%S"`
echo '--------------開始分庫分表備份:開始時間為 '$TIME
for port in `ps -ef | grep mysql| grep socket| grep datadir| awk -F= '{print $NF}'`
  do
    BEGIN=`date "+%Y-%m-%d %H:%M:%S"`
    BEGIN_T=`date -d "$BEGIN" +%s`
    echo '備份'$port'端口號的mysql實例,開始時間為 '$BEGIN
    BACKUP_DIR=/data/backup/$DATE/$port;
    mkdir -p  $BACKUP_DIR;
    ##避免循環的port和sock不匹配
    sock=`ps -ef | grep mysql| grep socket| grep datadir|awk -F".pid" '{print $NF}'| grep $port`
    DB_PASSWORD='MySQL123.'   
    #過濾掉MySQL自帶的DB
    for i in `/usr/local/mysql/bin/mysql -u$DB_USER -p$DB_PASSWORD  $sock -BN -e"show databases;" |sed '/^performance_schema$/'d|sed '/^mysql/'d |sed '/^information_schema$/'d|sed '/^information_schema$/'d|sed '/^test$/'d  `
    do
      sudo  /usr/local/mysql/bin/mysqldump -u$DB_USER -p$DB_PASSWORD $sock --master-data=2 -q  -c  --skip-add-locks  -R -E -B $i > $BACKUP_DIR/$date$i.sql
    done
    END=`date "+%Y-%m-%d %H:%M:%S"`
    END_T=`date -d "$END" +%s`
    TIME_INVENTAL_M=$[($END_T-$BEGIN_T)/60]
    TIME_INVENTAL_S=$[($END_T-$BEGIN_T)%60]
    echo '備份'$port'端口號的mysql實例於' $END '備份完成,使用時間為 '$TIME_INVENTAL_M'分鍾'$TIME_INVENTAL_S'秒'
         #備份文件的處理
         cd $BACKUP_DIR/..
         tar -zczf $port'_'$(date +%F_%H-%M).tar.gz $port
         #解壓 tar -zvxf  $port.tar.gz
         rm -rf $port
done
TIME_END=`date "+%Y-%m-%d %H:%M:%S"`
echo '--------------backup all database successfully!!!結束時間:' $TIME_END
#刪除60天以前的備份
find /data/backup/ -name '*'`date +%Y`'*' -type d -mtime  +60 -exec rm -rf  {} \;
 
2)
[app@kevin-mysql01 scripts]$ cat full_backup_mysql.sh
#!/bin/sh
#########################################################################
## Description: Mysql全量備份腳本
## File Name: full-backup-mysql.sh
## Author: wangshibo
## mail: wangshibo@************
## Created Time: 2017年9月11日 14:17:09
##########################################################################
OneMonthAgo=`date -d "2 month ago"  +%Y%m%d`
today=`date +%Y%m%d`
datetime=`date +%Y%m%d-%H-%M-%S`
config=/etc/mykedata_3326.cnf
basePath=/data/backup
logfilePath=$basePath/logs
logfile=$logfilePath/full_$datetime.log
USER=mybak
PASSWD=1az2wsx3edc@sb
SOCKET=/data/mysqldata/kedata/mysql.sock
dataBases="huoqiu batchdb shenzheng tianjin asset bc_asset shanghai vered_dataplatform aomen"
echo 'Full backup mysql in ' $path > $logfile
path=$basePath/full_$datetime
mkdir -p $path
sudo /usr/bin/innobackupex  --defaults-file=$config  --user=$USER --password=$PASSWD --socket=$SOCKET --compress --compress-threads=2 --compress-chunk-size=64K --host=localhost  $path --no-timestamp  > $logfile 2>&1
#--safe-slave-backup
sudo chown app.app $path -R
ret=`tail -n 2 $logfile |grep "completed OK"|wc -l`
if [ "$ret" =  1 ] ; then
        echo 'delete expired backup ' $basePath/$OneMonthAgo  >> $logfile
        echo $path > $logfilePath/last_backup_sucess.log
        rm -rf $basePath/full_$OneMonthAgo*
        rm -f   $logfilePath/full_$OneMonthAgo*.log
else
  echo 'backup failure ,no delete expired backup'  >> $logfile
fi
 
if [ "$ret" = 1 ] ;then
    status=0
else
    status=1
fi
echo $status
ts=`date +%s`;
curl -X POST -d "[{\"metric\": \"backup_status\", \"endpoint\": \"bl2-mysql01.veredholdings.cn\", \"timestamp\": $ts,\"step\":86400,\"value\": $status,\"counterType\": \"GAUGE\",\"tags\": \"\"}]" http://127.0.0.1:1988/v1/push
 
3)
[app@kevin-mysql01 scripts]$ cat incremental_backup_mysql.sh
#!/bin/sh
#########################################################################
## Description: Mysql增量備份腳本
## File Name: incremental-backup-mysql.sh
## Author: wangshibo
## mail: wangshibo@************
## Created Time: 2018年1月11日 14:17:09
##########################################################################
today=`date +%Y%m%d`
datetime=`date +%Y%m%d-%H-%M-%S`
config=/etc/mykedata_3326.cnf
basePath=/data/backup
logfilePath=$basePath/logs
logfile=$logfilePath/incr_$datetime.log
USER=mybak
PASSWD=1az2wsx3edc@sb
dataBases="huoqiu batchdb shenzheng tianjin shanghai asset aomen"
 
pid=`ps -ef | grep -v "grep" |grep -i innobackupex|awk '{print $2}'|head -n 1`
if [ -z $pid ]
then
  echo " start incremental backup database " >> $logfile
  OneMonthAgo=`date -d "1 month ago"  +%Y%m%d`
  path=$basePath/incr_$datetime
  mkdir -p $path
  last_backup=`cat $logfilePath/last_backup_sucess.log| head -1`
  echo " last backup is ===> " $last_backup >> $logfile
sudo /usr/bin/innobackupex  --defaults-file=$config  --user=$USER --password=$PASSWD --compress --compress-threads=2 --compress-chunk-size=64K --slave-info  --host=localhost --incremental $path --incremental-basedir=$last_backup --databases="${dataBases}" --no-timestamp >> $logfile 2>&1
#--safe-slave-backup
sudo chown app.app $path -R
  ret=`tail -n 2 $logfile |grep "completed OK"|wc -l`
  if [ "$ret" =  1 ] ; then
    echo 'delete expired backup ' $basePath/incr_$OneMonthAgo*  >> $logfile
    rm -rf $basePath/incr_$OneMonthAgo*
    rm -f $logfilePath/incr_$OneMonthAgo*.log
    echo $path > $logfilePath/last_backup_sucess.log
  else
    echo 'backup failure ,no delete expired backup'  >> $logfile
  fi
else
   echo "****** innobackupex in backup database  ****** "  >> $logfile
fi
 
4)
[app@kevin-mysql01 scripts]$ cat shibo_databackup.sh
#!/bin/bash
USERNAME=root
PASSWORD=kevin@qwe123!@#s
DATE=`date +%Y-%m-%d`
OLDDATE=`date +%Y-%m-%d -d '-30 days'`
 
MYSQL=/usr/local/mysql/bin/mysql
MYSQLDUMP=/usr/local/mysql/bin/mysqldump
MYSQLADMIN=/usr/local/mysql/bin/mysqladmin
SOCKET=/data/mysqldata/kedata/mysql.sock
BACKDIR=/data/backup/
 
[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
[ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}
[ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE}
 
for DBNAME in anhui huoqiu beijing  shenzheng shanghai tianjin  wangshibo aomen
do
   ${MYSQLDUMP} --opt -u${USERNAME} -p${PASSWORD} -S${SOCKET} ${DBNAME} | gzip > ${BACKDIR}/${DATE}/${DBNAME}-backup-${DATE}.sql.gz
   logger "${DBNAME} has been backup successful - $DATE"
   /bin/sleep 5
done
 
5)
[app@kevin-mysql01 scripts]$ cat rsync.sh
#!/bin/bash
datetime=`date +%Y%m%d-%H-%M-%S`
logfile=/data/backup/rsync.log
echo "$datetime Rsync backup mysql start "  >> $logfile
sudo rsync -e "ssh -p6666" -avpgolr /data/backup kevin@192.168.10.30:/data/backup_data/kevin/DB_bak/192.168.10.163/ >> $logfile 2>&1
 
ret=`tail -n 1 $logfile |grep "total size"|wc -l`
if [ "$ret" =  1 ] ; then
        echo "$datetime Rsync backup mysql finish " >> $logfile
else
        echo "$datetime Rsync backup failure ,pls sendmail"  >> $logfile
fi


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM