實現對MySQL數據庫進行分庫/分表備份(shell腳本)


工作中,往往數據庫備份是件非常重要的事情,畢竟數據就是金錢,就是生命!廢話不多,下面介紹一下:如何實現對MySQL數據庫進行分庫備份(shell腳本)

Mysq數據庫dump備份/還原語法:

mysqldump -u 用戶名 –p 數據庫名 > 導出的文件名;

mysqldump -u 用戶名 –p 數據庫名 < 導入的文件名;

首先,我們需要知道是備份全庫還是部分庫;

其次,我們需要獲取到需要備份的庫名列表;

最后,編寫腳本實現數據備份。

分庫備份:

1、查看當前環境是否啟動了MySQL服務,如果沒啟動,便啟動該服務:

2、獲取分庫備份的庫名列表:

登錄MySQL數據庫兩種方式:sock方式和tcp/ip方式,詳情https://my.oschina.net/zjllovecode/blog/1617755

我們以sock方式登錄MySQL獲取庫名列表:

3、編寫備份腳本:

[root@bqh-118 scripts]# vim mysqldb.sh 
#!/bin/sh
# ******************************************************
# Author       : a?錦衣衛 
# Last modified: 2019-05-18 13:25
# Email        : 1147076062@qq.com
# blog         : https://www.cnblogs.com/su-root
# Filename     : mysqldb.sh
# Description  : mysql_dmup
# ******************************************************
user=root        #用戶名        
pass=123456      #密碼
socket=/tmp/mysql.sock  #登錄方式
backfile=/server/backup #備份路徑
[ ! -d $backfile ] && mkdir -p $backfile #判斷是否有備份路徑
cmd="mysql -u$user -p$pass -S $socket"  #登錄數據庫
dump="mysqldump -u$user -p$pass -S $socket -B -X -F -R" #mysqldump備份參數 
dblist=`$cmd -e "show databases;"|sed 1d|egrep -v "_schema|mysql"` #獲取庫名列表
for db_name in $dblist #for循環備份庫列表
do
 $dump $db_name|gzip >/server/backup/${db_name}_$(date +%F).sql.gz #庫名+時間備份打包至指定路徑下
done

執行腳本:

ok,分庫備份success!

下面我們介紹一下分庫分表備份:

首先,我們需要獲取到需要備份的庫名列表及表名列表;然后,編寫腳本實現數據備份。

ok,庫名及表面獲取了,接下來我們在已有的腳本基礎上稍作修改(加個表名循環即可)

[root@bqh-118 scripts]# vim mysqldb1.sh 
#!/bin/sh
# ******************************************************
# Author       : a?錦衣衛 
# Last modified: 2019-05-18 13:25
# Email        : 1147076062@qq.com
# blog         : https://www.cnblogs.com/su-root
# Filename     : mysqldb.sh
# Description  : mysql_dmup_fk
# ******************************************************
user=root        #用戶名        
pass=123456      #密碼
socket=/tmp/mysql.sock  #登錄方式
backfile=/server/backup #備份路徑
[ ! -d $backfile ] && mkdir -p $backfile #判斷是否有備份路徑
cmd="mysql -u$user -p$pass -S $socket"  #登錄數據庫
dump="mysqldump -u$user -p$pass -S $socket -X -F -R" #mysqldump備份參數 
dblist=`$cmd -e "show databases;"|sed 1d|egrep 'bqh|jyw'` #獲取庫名列表
for db_name in $dblist #for循環備份庫列表
do
 tablest=`$cmd -e "show tables from $db_name;"|sed 1d` #獲取庫中表名
   for tname in $tablest  #for循環備份庫中表名列表
   do
     mkdir -p $backfile/$db_name #創建庫文件
     $dump $db_name $tname|gzip >$backfile/$db_name/${tname}_$(date +%F).sql.gz
                        #庫名+表名+時間備份打包至指定路徑下
   done
done

 

執行腳本:

ok,分庫分表備份success!


免責聲明!

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



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