常用數(shù)據(jù)庫備份工具:
mysqldump:mysql工具包自帶(數(shù)據(jù)庫比較小)
xtrabackup:比較好的備份工具(數(shù)據(jù)庫比較大)
備份用戶授權(quán):
# select 選擇表
# reload 刷新日志
# lock tables 鎖表
# show view 視圖
# trigger 觸發(fā)器
###
GRANT SELECT,RELOAD,SHOW VIEW,LOCK TABLES,TRIGGER ON . TO 'dumper'@'localhost' IDENTIFIED BY 'manager1';
GRANT SELECT,RELOAD,SHOW VIEW,LOCK TABLES,TRIGGER ON . TO 'dumper'@'127.0.0.1' IDENTIFIED BY 'manager1';
準(zhǔn)備測試數(shù)據(jù)庫:
# mysql > CREATE DATABASE test DEFAULT CHARACTER SET utf8;
# mysql > USE test;
# mysql > SOURCE /root/test.sql;
Mysqldump備份命令:
#mysqldump --user=dumper --password=manager1 --databases test | gzip - | openssl des3 -salt -k manager1 -out /data/backup/test.sql.gz.des3
# mysqldump: [Warning] Using a password on the command line interface can be insecure.
刪除測試數(shù)據(jù)庫:
# mysql > DROP DATABASE test;
解密備份文件:
# openssl des3 -d -salt -in test.sql.gz.des3 -out test.sql.gz
# enter des-ede3-cbc decryption password: #輸入加密時(shí)密碼
解壓縮備份文件:
# gunzip test.sql.gz
恢復(fù)備份文件:(mysqldump備份會從最開始創(chuàng)建數(shù)據(jù)庫的時(shí)候備份,所以無需提前創(chuàng)建數(shù)據(jù)庫,亦可cat sql文件開頭檢查sql語句)
# mysql -u root -hlocalhost -p < test.sql
# Enter password: #輸入root用戶密碼
連接Mysql檢查數(shù)據(jù)庫是否已經(jīng)恢復(fù)
編寫簡單備份腳本:
1、mysqldump備份數(shù)據(jù)庫
2、備份文件采用gzip壓縮,并且采用3des加密
3、備份文件留存7天,自動(dòng)進(jìn)行刪除
4、每天晚上2點(diǎn)準(zhǔn)時(shí)開始備份
#!/bin/bash
#
BACKDIR=/data/backup/mysql
MYSQLDUMP=/usr/local/mysql5.7/bin/mysqldump
DATEFORMAT=$(date +%Y%m%d%H%M)
DBNAME="test mysql"
BACKUSER=dumper
BACKPASSWD=manager1
LOG=/data/backup/mysql/backup.log
[ -d $BACKDIR ] || mkdir -p $BACKDIR
[ -f $LOG ] && touch $LOG
#
find "$BACKDIR" -name "mysql-20*" -type f -mmin +3|xargs rm -rf
[ $? -eq 0 ] && echo -e "${DATEFORMAT} Delete 7 days ago backup file success" || echo -e "${DATEFORMAT} Delete Old backup file failure"
#
for DB in $DBNAME ;do
$MYSQLDUMP --user=$BACKUSER --password=$BACKPASSWD --routines --triggers --single-transaction --flush-logs --databases ${DB} | gzip - | openssl des3 -salt -k manager1 -out ${BACKDIR}/mysql-${DATEFORMAT}-${DB}.sql.gz.des3
[ $? -eq 0 ] && echo -e "${DATEFORMAT} mysqldump database ${DB} backup success" >> $LOG || echo -e "${DATEFORMAT} mysqldump database ${DB} backup failure" >> $LOG
done
#
crontab -e
0 2 * * * /bin/bash /root/script/mysql_backup.sh