MySQLデータベース全量バックアップとインクリメンタルバックアップ
4438 ワード
MySQLデータベースバックアップスクリプト
一、インクリメンタルバックアップ1、インクリメンタルバックアップはMySQLのbinlogログ機能をオンにする必要がある(非クラスタデータベース及びマスタスレーブデータベースに限られ、単一データベースに使用される).同時にbinlogバイナリを混合モード又はROWモードに構成する.
2、インクリメンタルバックアップスクリプト
3、保存終了に実行可能権限を加える
二、全量バックアップ1、全量バックアップは直接データベースをバックアップする(クラスタ及び主従データベースに使用可能).バックアップパラメータの説明:
2、フルバックアップスクリプト
3、保存終了に実行可能権限を加える
三、タイミングタスクを開く
スケジュールタスクの表示
一、インクリメンタルバックアップ1、インクリメンタルバックアップはMySQLのbinlogログ機能をオンにする必要がある(非クラスタデータベース及びマスタスレーブデータベースに限られ、単一データベースに使用される).同時にbinlogバイナリを混合モード又はROWモードに構成する.
cat /etc/my.cnf
log-bin=/var/lib/mysql/mysql-bin
binlog_format=mixed #binlog_format=ROW
2、インクリメンタルバックアップスクリプト
cat /opt/scripts/backup-mysql-incre.sh
#!/bin/bash
# , , mysql
# binlog
source /etc/profile #
source ~/.bash_profile #
#
backup_path="/data/backup/mysqlbak"
mysqlbin_path="/var/lib/mysql"
backup_log="/data/backup/mysqlbak/backup.log"
mysqlbinfile="/var/lib/mysql/mysql-bin.index"
date=$(date +%Y%m%d_%H:%M:%S)
day=30
# mysql-bin.0000*
mysqladmin -uroot -pHuawei@123 flush-logs
statistics=`cat $mysqlbinfile|wc -l`
num=0
# ,
if [ ! -e $backup_path ];then
mkdir -p $backup_path
fi
# 30
find $backup_path -type f -mtime +$day -exec rm -rf {} \; > /dev/null 2>&1
# for
echo " : ..."
for file in `cat $mysqlbinfile`
do
# basename mysql-bin.0000* , ./mysql-bin.0000* ./
dbname=`basename $file`
backup_name=`basename $file`_$date
statistics=`expr $num + 1`
cd $backup_path
#
if [ $num != $statistics ];then
dest=$backup_path/$dbname*
# ,
if [ ! -e $dest ];then
cp $mysqlbin_path/$dbname $backup_path/
# --force-local, --force-local
tar czvf $backup_name.tar.gz $dbname --force-local
size=$(du $dbname.tar.gz -sh | awk '{print $1}')
rm -rf $dbname
echo "$dbname $dbname($size) " >> $backup_log
du $backup_path/* -sh | grep mysql-bin | awk '{print " :" $2 ", :" $1}'
else
echo "$dbname $dbname " >> $backup_log
continue
fi
fi
num+=1
done
echo " , $backup_log"
du $backup_path/* -sh | grep mysql-bin | awk '{print " :" $2 ", :" $1}'
3、保存終了に実行可能権限を加える
chmod +x /opt/scripts/backup-mysql-incre.sh
二、全量バックアップ1、全量バックアップは直接データベースをバックアップする(クラスタ及び主従データベースに使用可能).バックアップパラメータの説明:
--single-transaction
--lock-all-tables ( --single-transaction )
--routinge 、--all-databases
--triggers 、--events
--master-data=2 , ,1
#--flush-logs
2、フルバックアップスクリプト
cat /opt/scripts/backup-mysql-all.sh
#!/bin/bash
# , , mysql
source /etc/profile #
source ~/.bash_profile #
#
user="root"
password="123"
host="localhost"
port="3306"
db=("zabbix")
local="--single-transaction"
mysql_path="/usr/share/mysql"
backup_path="/data/backup/mysqlbak"
date=$(date +%Y%m%d_%H:%M:%S)
day=30
backup_log="/data/backup/mysqlbak/backup.log"
# ,
if [ ! -e $backup_path ];then
mkdir -p $backup_path
fi
# 30
find $backup_path -type f -mtime +$day -exec rm -rf {} \; > /dev/null 2>&1
echo " : ${db[*]}"
#
backup_sql(){
dbname=$1
backup_name="${dbname}_${date}.sql"
mysqldump -h $host -P $port -u $user -p$password $lock --default-character-set=utf8 --flush-logs -R $dbname > $backup_path/$backup_name
if [[ $? == 0 ]];then
cd $backup_path
# tar --force-local
tar czvf $backup_name.tar.gz $backup_name --force-local
size=$(du $backup_name.tar.gz -sh | awk '{print $1}')
rm -rf $backup_name
echo "$date $dbname($size) "
else
cd $backup_path
rm -rf $backup_name
echo "$date $dbname "
fi
}
#
length=${#db[@]}
for ((i=0;i> $backup_log 2>&1
done
echo " , $backup_log"
du $backup_path/*$date* -sh | awk '{print " :" $2 ", :" $1}'
3、保存終了に実行可能権限を加える
chmod +x /opt/scripts/backup-mysql-all.sh
三、タイミングタスクを開く
crontab -e
#
00 01 * * 0 /opt/scripts/backup-mysql-all.sh > /dev/null 2>&1
#
00 01 * * 1-6 /opt/scripts/backup-mysql-incre.sh > /dev/null 2>&1
スケジュールタスクの表示
crontab -l