mysql數據庫使用腳本實現分庫備份過程


一條命令解決分庫分表備份:

[root@db01 data]# mysql -uroot -p123456  -e "show databases;"|egrep -v "Data|sche|mysql|inf"|sed -r 's#^(.*)#mysqldump -uroot -p123456 -B \1 >/data/db/\1.sql.gz#g'|bash

 

實現思路

1)編程思想

mysqldump db1>db1.sql

mysqldump db2>db2.sql

.............

2)顯示要備份的數據庫

[root@web03 ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock  -e "show databases;"|grep -Evi "database|infor|perfor"
abcdocker
cnsyk
mysql
oldboy
syk_utf8
test

3)循環db,dump

實現腳本如下:

#!/bin/bash 
#created by yangqiqi 2017-08-24 

USERNAME=root #備份的用戶名 
PASSWORD=123456  #備份的密碼
HOST=localhost #備份主機
DATE=`date +%Y-%m-%d`  #用來做備份文件名字的一部分
OLDDATE=`date +%Y-%m-%d -d '-10 days'`  #本地保存天數  

#指定命令所用的全路徑
MYSQL=/application/mysql/bin/mysql
MYSQLDUMP=/application/mysql/bin/mysqldump
MYSQLADMIN=/application/mysql/bin/mysqladmin

#創建備份的目錄和文件
BACKDIR=/data/backup/db
[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
[ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}
[ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE} #保存10天 多余的刪除最前邊的
#開始備份  for循環想要備份的數據庫
MYSQLDUMP_LIST=`mysql -uroot -p'123456' -S /data/3306/mysql.sock  -e "show databases"| grep -Evi "database|infor|perfor"`

for DBNAME in ${MYSQLDUMP_LIST} ##使用for依次羅列需要備份的數據庫 
do
  ${MYSQLDUMP} -B -F --master-data=2 --single-transaction -u${USERNAME} -p${PASSWORD}  -S /data/3306/mysql.sock  ${DBNAME} | gzip > ${BACKDIR}/${DATE}/${DBNAME}-backup-${DATE}.sql.gz 
  /bin/sleep 2
  logger "${DBNAME} has been backup successful - $DATE"
done
腳本出處:https://www.cnblogs.com/lazyball/p/8662586.html

腳本注意點:

MYSQLDUMP_LIST=`mysql -uroot -p'123456'  -e "show databases"| grep -Evi "database|infor|perfor"` 過濾掉不需要備份的數據庫,這里需要注意,過濾完成
后拿到的庫名是自己需要備份的庫名,如果自建的庫有的也叫infor開頭或者perfor的可能會被過濾掉,按照個人情況調整。

每天的備份樣式如下:

[root@web03 ~]# cd /data/backup/db/
[root@web03 db]# ll
總用量 4
drwxr-xr-x 2 root root 4096 7月   4 16:37 2018-07-04
[root@web03 db]# cd 2018-07-04/
[root@web03 2018-07-04]# ll
總用量 164
-rw-r--r-- 1 root root    604 7月   4 16:37 abcdocker-backup-2018-
-rw-r--r-- 1 root root    602 7月   4 16:37 cnsyk-backup-2018-07-0
-rw-r--r-- 1 root root 144592 7月   4 16:37 mysql-backup-2018-07-0
-rw-r--r-- 1 root root    867 7月   4 16:37 oldboy-backup-2018-07-
-rw-r--r-- 1 root root    603 7月   4 16:37 syk_utf8-backup-2018-0
-rw-r--r-- 1 root root   1030 7月   4 16:37 test-backup-2018-07-04

 logger解釋

logger 是一個shell 命令接口,可以通過該接口使用Syslog的系統日志模塊,還可以從命令行直接向系統日志文件寫入一行信息。
日志的級別
日志的級別分為七級,從緊急程度由高到底:
emerg 系統已經不可用,級別為緊急
alert 警報,需要立即處理和解決
crit 既將發生,得需要預防。事件就要發生
warnig 警告
err 錯誤信息,普通的錯誤信息
notice 提醒信息,很重要的信息
info 通知信息,屬於一般信息
debug 這是調試類信息

 

上邊的腳本備份完畢后  就可以在   看到每個數據庫備份的信息  logger的作用

[root@web03 ~]# tail -f /var/log/messages
Jul  4 16:22:10 web03 rpc.statd[1147]: Version 1.2.3 starting
Jul  4 16:22:10 web03 sm-notify[1148]: Version 1.2.3 starting
Jul  4 16:32:35 web03 root: abcdocker has been backup successful - 2018-07-04
Jul  4 16:32:37 web03 root: cnsyk has been backup successful - 2018-07-04
Jul  4 16:37:34 web03 root: abcdocker has been backup successful - 2018-07-04
Jul  4 16:37:36 web03 root: cnsyk has been backup successful - 2018-07-04
Jul  4 16:37:38 web03 root: mysql has been backup successful - 2018-07-04
Jul  4 16:37:41 web03 root: oldboy has been backup successful - 2018-07-04
Jul  4 16:37:43 web03 root: syk_utf8 has been backup successful - 2018-07-04
Jul  4 16:37:45 web03 root: test has been backup successful - 2018-07-04

生成場景需求:

每天凌晨1點把 A服務器上/data/backup/db/下的數據備份文件放到 B服務器里的/data/backup/db_192.168.1.11/目錄下 
不是累加 是增量更新 (--delete)
 
A服務器:
數據源服務器:
yum install rsync
 
打開防火牆 關閉seLinux:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
 
B服務器: ssh-keygen
把公鑰文件里的id_rsa.pub內容復制到 A服務器里的authorized_keys 
文件中准備腳本文件  :
#!/bin/bash
usr/bin/rsync -avz --delete -e  "ssh -p 4396"  root@192.168.1.11:/data/backup/db  /data/backup/db_192.168.1.11/
logger "Successful backup file transfer - $DATE"
 
         

 

 


免責聲明!

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



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