工作中,往往數據庫備份是件非常重要的事情,畢竟數據就是金錢,就是生命!廢話不多,下面介紹一下:如何實現對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!