■ はじめに
「mysqldump --all-databases」の場合、 MySQL自体のシステムに関わるDB「information_schema」「performance_schema」「mysql」も含んだ形で エクスポートしてしまうので、そのことを考慮したシェルスクリプトを書いてみる
■ バックアップ用のシェルスクリプト
mysql-export.sh#!/bin/bash # Auth MYSQL_USER=root MYSQL_PASSWORD=password if [ $# -ne 1 ]; then echo "$(basename $0) </path/to/dump/dir>" exit 1 fi dump_dir=$1 mkdir -p $dump_dir echo "Starting DB dump! $(date '+%Y-%m-%d %H:%M:%S')" export MYSQL_PWD=${MYSQL_PASSWORD}; databases=$(mysql -u${MYSQL_USER} -e 'SHOW DATABASES;' --silent) for database in $databases do if [ "$database" == "information_schema" -o "$database" == "performance_schema" -o "$database" == "mysql" ]; then echo "Skip $database." else echo "Dumping $database..." filename=$dump_dir/$database.sql.gz mysqldump -u${MYSQL_USER} $database | gzip > $filename echo $filename fi done echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"
■ インポート用のシェルスクリプト
mysql-import.sh#!/bin/bash # Auth MYSQL_USER=root MYSQL_PASSWORD=password if [ $# -ne 1 ]; then echo "$(basename $0) </path/from/dump/dir>" exit 1 fi dump_dir=$1 if [ ! -d $dump_dir ]; then echo "$dump_dir is not a directory." exit 1 fi echo "Importing DB dump! $(date '+%Y-%m-%d %H:%M:%S')" export MYSQL_PWD=${MYSQL_PASSWORD}; temp_path="${HOME}/$(date '+%Y%m%d%H%M%S')" mkdir -p ${temp_path} cp -r ${dump_dir} ${temp_path} dir_name=`basename ${dump_dir}` compressed_import_files=$(ls ${temp_path}/${dir_name}/*.sql.gz) for compressed_import_file in ${compressed_import_files} do # Step1 : unzip gzip -d ${compressed_import_file} # Step2 : Creat DB if not exists. db_name=$(basename ${compressed_import_file} .sql.gz) echo "db_name = \`${db_name}\`" mysql -u${MYSQL_USER} -e "begin; CREATE DATABASE IF NOT EXISTS \`${db_name}\`; commit;" # Step3 : Import dir_path=$(dirname ${compressed_import_file}) dump_file=$(basename ${compressed_import_file} .gz) dump_file_path="${dir_path}/${dump_file}" echo "dump_file_path = ${dump_file_path}" mysql -u${MYSQL_USER} ${db_name} < ${dump_file_path} done rm -r ${temp_path} echo "Done! $(date '+%Y-%m-%d %H:%M:%S')"