1. 程式人生 > >Mysql 開啟bin-log並實現自動化增量和全量備份

Mysql 開啟bin-log並實現自動化增量和全量備份

思路:開啟 bin-log 來做增量,用 Mysqldump 做全量

1 開啟 bin-log

檢視是否開啟 binlog

進入mysql命令列介面,show variables like '%log_bin%';
如果 log-bin 是 OFF 則表示沒有開啟,需要開啟。

備份目錄

看到 備份目錄,也是沒有 bin-log 檔案的
這裡寫圖片描述

修改mysqld 配置檔案

vim /etc/mysql/mysql.conf.d/mysqld.cnf
注意模組名稱還有一個坑,我的配置檔案中,lower_case_table_names=1,如果你已經有了命名規範不符合的表,可以去掉該項配置。
這裡寫圖片描述

重啟 mysql

service mysql restart

開啟成功

再次 show 可以看到 bin-log 已經開啟成功了
這裡寫圖片描述

mysqldump 全量備份

開啟免密備份

要把 password 寫在 mysqldump裡面,不僅有 warning 而且一點也不酷對不對,開啟免密吧。

生成 login 金鑰檔案

mysql_config_editor  set --login-path=leon --host=localhost --user=root --password
ls -al

這裡寫圖片描述

mysqlbinlog 二進位制日誌增量備份

增量備份指令碼

#!/bin/bash
# Leon0204
# Daily BackUp By Bin-log 

BakDir=/root/backup/daily
BinDir=/var/lib/mysql
LogFile=/root/backup/bak.log
BinFile=/var/lib/mysql/leon-mysql-bin.index //bin.index 檔案
mysqladmin --login-path=leon flush-logs

Counter=`wc -l $BinFile |awk '{print $1}'`
NextNum=0

for file in `cat $BinFile`
do
    base=`basename $file
` NextNum=`expr $NextNum + 1` if [ $NextNum -eq $Counter ] then echo $base skip! >> $LogFile else dest=$BakDir/$base if(test -e $dest) then echo $base exist! >> $LogFile else cp $BinDir/$base $BakDir echo $base copying >> $LogFile fi fi done echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $LogFile

測試

先執行一次結果如下:
這裡寫圖片描述

全量備份指令碼

全量備份指令碼( 注意指令碼中的 cd 命令路徑哦~別誤刪系統了):

#/bin/bash
# Leon
# Full BackUp By MysqlDump

BakDir=/root/backup
LogFile=/root/backup/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz

mysqldump --login-path=leon  --quick --events --all-databases --flush-logs --delete-master-logs --single-transaction > $DumpFile

/bin/tar -czvf $GZDumpFile $DumpFile

/bin/rm $DumpFile

Last=`date +"%Y年%m月%d日 %H:%M:%S"`

測試

執行一次結果如下:
這裡寫圖片描述

配置 自動化Crontab

Crontab 指令碼

這裡寫圖片描述