訂正
コメントで @akinomyoga さんに指摘していただいた部分を取り込みました。
本文
MySQLで該当DBの全table create statement
を出力する方法を探したが、どうやらループで mysql
回すしかないらしく、苦手なshell scriptを書いた。
mysql-all-statement
#!/usr/bin/env bash
function usage {
cat <<EOF
$(basename "${0}") is a tool for print all tables create statement
Example:
$(basename "${0}") -p -h localhost -u root master_database > report.txt
Usage:
$(basename "${0}") [-p password] [mysql options] [database]
Options:
--help print this.
-p, --password database password.
If password is not given it is asked from the tty.
mysql options:
other options see "mysql --help"
EOF
}
case ${1} in
--help|-help|'')
usage
exit
;;
-p|--password)
if [[ ${2} == -* ]]; then
read -sp "Password:" PASSWORD 2> /dev/tty
echo > /dev/tty
else
PASSWORD=${2}
shift
fi
shift
;;
esac
if [[ -z ${PASSWORD} ]]; then
SCRIPT_MYSQL="mysql $@"
else
SCRIPT_MYSQL="mysql -p\"\${PASSWORD}\" $@"
fi
LIST=(`echo "SHOW TABLES" | eval "${SCRIPT_MYSQL}" 2> /dev/null`)
if [[ ${LIST} != Tables_in_* ]]; then
echo "mysql command error: run \`${SCRIPT_MYSQL}\`" >&2
exit 1
fi
for t in "${LIST[@]:1}"
do
echo "SHOW CREATE TABLE $t\G" | eval "${SCRIPT_MYSQL}" 2> /dev/null
done
基本的にはMySQLで既存のテーブルのCREATE文を取得: Usoinfo blogのコードをベースに汎用的にしただけです。
-p
オプションだけ先頭に書かないといけないというなんともスマートじゃない感じになってしまったので、そこだけご注意を。
もっと色々セフティー作れる気がするんですが、とりあえずのツールなのでここまで。
何か他にいい方法や、こここうしたら?みたなのがあればコメントください。