bash : MySQLをバックアップ
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
MySQLをバックアップするスクリプトです。
すべてのデータベースを対象にdumpを作成します。
bashスクリプト
cd
vi ./cron/mysql_dump.sh
#!/bin/sh
# --------------------------------------------------
# MySQLバックアップ 実行
#
# MySQLデータベースをバックアップ
#
# --------------------------------------------------
# $ cd
# $ ./mysql_dump.sh
#
# $ crontab -e
# 0 2 * * * /backup/mysql_dump.sh > /dev/null 2>&1
#
# --------------------------------------------------
# package aulta sh
# author takashi shinohara
# copyright Copyright (c) 2008, takashi shinohara
# link https://aulta.co.jp/
# license https://aulta.co.jp/licensed.html
# version 0.0.1
# --------------------------------------------------
START=`date +%s`
ST=`date +%s`
# MYSQL_PATH=/usr/local/lib/mysql-5.7.34/bin/mysql
MYSQL_PATH=/usr/bin/mysql
MYSQL_DUMP_PATH=/usr/bin/mysqldump
# MySQLユーザー
# MYSQL_USER=root
# バックアップ先のディレクトリ
# バックアップ先のディレクトリは手動で作成し適切なパーミッションにしておいてください
PATH_BACKUP_BASE=/home/backup/backup/mysql
# バックアップファイルのオーナー
OWNER_BACKUP=backup:backup
PATH_CREATE_DATABASE=$PATH_BACKUP_BASE/_create_database.sql
echo "" >$PATH_CREATE_DATABASE
PATH_IMPORT_DATABASE=$PATH_BACKUP_BASE/_import_database.sh
echo "#!/bin/sh" >$PATH_IMPORT_DATABASE
echo "" >> $PATH_IMPORT_DATABASE
echo "MYSQL_USER=root" >> $PATH_IMPORT_DATABASE
echo "MYSQL_PWD=password" >> $PATH_IMPORT_DATABASE
echo "" >> $PATH_IMPORT_DATABASE
echo "mysql -u \$MYSQL_USER --password=\$MYSQL_PWD < $PATH_CREATE_DATABASE" >> $PATH_IMPORT_DATABASE
echo "" >> $PATH_IMPORT_DATABASE
echo "function importDb(){" >> $PATH_IMPORT_DATABASE
echo " PATH_SQL=$PATH_BACKUP_BASE/\$1.sql" >> $PATH_IMPORT_DATABASE
echo " mysql -u \$MYSQL_USER --password=\$MYSQL_PWD \$1 < \$PATH_SQL" >> $PATH_IMPORT_DATABASE
echo "}" >> $PATH_IMPORT_DATABASE
echo "" >> $PATH_IMPORT_DATABASE
function backupDb(){
echo "CREATE DATABASE /*!32312 IF NOT EXISTS*/ $2 /*!40100 DEFAULT CHARACTER SET utf8 */;" >> $PATH_CREATE_DATABASE
echo "importDb \"$2\"" >> $PATH_IMPORT_DATABASE
if [ "$1" -ge 1 ]; then
ST=`date +%s`
PATH_SQL=$2.sql
rm -f $PATH_SQL.tar.gz
if [ "$1" -eq 1 ]; then
$MYSQL_DUMP_PATH --defaults-extra-file=./mysql_backup.conf $2 --lock-tables --no-create-db > $PATH_SQL
elif [ "$1" -eq 2 ]; then
$MYSQL_DUMP_PATH --defaults-extra-file=./mysql_backup.conf --no-data $2 --lock-tables --no-create-db > $PATH_SQL
fi
tar czf $PATH_SQL.tar.gz $PATH_SQL
chown $OWNER_BACKUP $PATH_SQL.tar.gz
rm $PATH_SQL
END=`date +%s`
SS=$[$END - $ST]
echo "${SS}s."
fi
}
cd $PATH_BACKUP_BASE
echo "### BACKUP MYSQL ########################################################"
echo ""
for DATABASE in `$MYSQL_PATH --defaults-extra-file=/root/mysql_backup.conf -N -s -e"show databases;"`; do
echo -n $DATABASE" ... "
if test $DATABASE = "information_schema"; then
echo "skip"
continue
fi
if test $DATABASE = "mysql"; then
echo "skip"
continue
fi
if test $DATABASE = "performance_schema"; then
echo "skip"
continue
fi
if test $DATABASE = "sys"; then
echo "skip"
continue
fi
if test $DATABASE = "example_cache"; then
backupDb 2 $DATABASE
continue
fi
if test $DATABASE = "example_logs"; then
backupDb 2 $DATABASE
continue
fi
backupDb 1 $DATABASE
done
chown $OWNER_BACKUP $PATH_CREATE_DATABASE
chown $OWNER_BACKUP $PATH_IMPORT_DATABASE
END=`date +%s`
SS=`expr ${END} - ${START}`
echo ""
echo "total time : ${SS} seconds."
echo ""
echo "#########################################################################"
echo ""
echo ""
exit
MySQLのパスワード
--defaults-extra-file=./mysql_backup.conf
ここでMySQLパスワードを別ファイルにしています。
cd
vi ./mysql_backup.conf
[client]
user = root
password = AAAAAAAAAAAAAAAAA
説明
backupDb 1 $DATABASE
1 はデータベース構造とデータ
backupDb 2 $DATABASE
2 はデータベース構造のみ