mysql linuxでのバックアップスクリプト


mysqlデータベースをバックアップする方法の1つを記録します:部分バックアップ+binlogの形式、ここで部分バックアップも全バックアップに変えることができて、差は多くありません.具体的には、crontabタイミング呼び出しスクリプトを使用して実行します.例えば、毎日午前2時です.スクリプトはここで2つの部分に分かれています.1つはバックアップを作成するために使用され、もう1つはn日前のバックアップファイルを削除するために使用されます.結局、古いデータがディスクを占有するのは無駄です.次に、レプリケーションを作成するスクリプトを示します.
#!/bin/bash
#
#********************************************************************
#Author:            a pig in yiyu                                                                                                                                                        
#Date:              2019-07-15
#FileName:         auto_backup_mysql.sh
#Description:      The test script
#Copyright (C):     2019 All rights reserved
#********************************************************************
#modified variables
DB_USER="dump_user"
DB_PASSWD="dump_root"
DB_HOST="localhost"
DB_PORT=3306
DB_NAMES=("doublekill" "mysql")
DB_BIN_DIR="/var/log/mariadb_binlog"
BACKUP_DIR="/data/database_dump"
MYSQL_BIN_DIR="/usr/bin"
DATE_FORMATE=`date +%F`

#create dump file
mkdir -p $BACKUP_DIR/$DATE_FORMATE
for var in ${DB_NAMES[@]}
do
    $MYSQL_BIN_DIR/mysqldump --databases $var --single-transaction --opt -R -E --flush-logs --master-data=2 -u$DB_USER -p$DB_PASSWD -h$DB_HOST -P$DB_PORT > $BACKUP_DIR/$DATE_FORMATE/$var-$DATE_FORMATE.sql
    cp -rf $DB_BIN_DIR $BACKUP_DIR/$DATE_FORMATE/
done
[ $? -eq 0 ] && echo "done for backup in $DATE_FORMATE" || echo "ERROR : backup failed in $DATA_FORMATE"

古いバックアップファイルを削除するスクリプトを次に示します.
#!/bin/bash
#
#********************************************************************
#Author:            a pig in yiyu
#Date:              2019-07-15                                                                                                                                                           
#FileName:         bin/rm_old_backup.sh
#Description:      The test script
#Copyright (C):     2019 All rights reserved
#********************************************************************
DB_BACKUP_DIR="/data/database_dump"
DATE_BEFORE=7
find $DB_BACKUP_DIR -mtime +$DATE_BEFORE -exec rm -Rf {} \;

最後にcrontabでスクリプトを呼び出します.vim/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
#*/5 * * * * root /root/bin/checkip.sh
  01 02 * * * root /root/bin/auto_backup_mysql.sh
  01 04 * * * root /root/bin/rm_old_backup.sh