bash : MySQLをバックアップ
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
MySQLをバックアップするスクリプトです。
すべてのデータベースを対象にdumpを作成します。
bashスクリプト
cd vi ./cron/mysql_dump.sh
bash
#!/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
bash
MySQLのパスワード
--defaults-extra-file=./mysql_backup.conf
ここでMySQLパスワードを別ファイルにしています。
cd vi ./mysql_backup.conf
bash
[client] user = root password = AAAAAAAAAAAAAAAAA
bash
説明
backupDb 1 $DATABASE
1 はデータベース構造とデータ
backupDb 2 $DATABASE
2 はデータベース構造のみ