Quantcast
Channel: プログラム の個人的なメモ
Viewing all articles
Browse latest Browse all 860

【Linux】【シェル】【MySQL】MySQLの全DBをエクスポート/インポートするスクリプト

$
0
0

■ はじめに

 「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')"



関連記事

【MySQL】 データのエクスポート / バックアップを行うには... ~ mysqldump ~

https://blogs.yahoo.co.jp/dk521123/36680883.html

MySQL での データ移行 を考える

http://blogs.yahoo.co.jp/dk521123/36589352.html

【Linux】【シェル】【MySQL】シェルで、複数の mysqldumpファイル を実行する

https://blogs.yahoo.co.jp/dk521123/36920590.html

Viewing all articles
Browse latest Browse all 860

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>