mysqldump -d
'old_db'.tb_name
トリガー、手順などでは、そのような参照を次のように置き換える必要があるため、十分ではありません。'new_db'.tb_name
mysql -u user -ppass -e "CREATE DATABASE new_db"
mysqldump -u user -ppass -d old_db | # pull structure -d flag
sed "s/\`old_db\`\./\`new_db\`\./g" | # solve foreign_keys, triggers etc
sed 's/AUTO_INCREMENT=[0-9]\+/''/g' | # reset indexes
mysql -u user -ppass new_db # push structure
以下は、ターゲットデータベースを作成し、いくつかのチェックを実行するbashスクリプトです。
#。/ db_clone.sh old_db new_db
/root/.mysqlcnx
(-u root -pPassを使用する代わりに)資格情報を持つファイルを使用します
[client]
user = root # or powerfull_user with GRANTS
password = pass_string
host = localhost
そして、データベースのクローンを作成するための次のスクリプト [自信を持って仮想マシンで実験してください]
#!/bin/bash
if [ $# -lt 2 ]; then
echo "syntax:\n.\db_clone.sh source_db_name target_db_name [--drop]\n"
exit 1
fi
# checking target database $2 exits
tg_db=$(mysql --defaults-extra-file=~/.mysqlcnx -s -N -e "SELECT count(*)>0 FROM
information_schema.SCHEMATA where SCHEMA_NAME='${2}'")
if [ $tg_db = '1' ]; then
# checking target database has tables
tg_tb=$(mysql --defaults-extra-file=~/.mysqlcnx -s -N -e " SELECT count(*) > 0
FROM information_schema.TABLES WHERE TABLE_SCHEMA='${2}'")
if [ $tg_tb = '1' ]; then
if [ $# -eq 3 ] && [ "$3" = '--drop' ]; then
echo "TYPE 'YES' (case sensitive) TO OVERRIDE"
read opt # request confirmation
if [ "$opt" != "YES" ]; then
echo "OPERATION CANCELED!"
exit 1
fi
else
printf "DATABASE \"${2}\" EXISTS AND HAS TABLES\nUSE --drop as 3rd arg to override!\n"
exit 1
fi
fi
else
mysql --defaults-extra-file=~/.mysqlcnx -e "CREATE DATABASE \`${2}\`"
fi
echo "CREATING ${2}"
mysqldump --defaults-extra-file=~/.mysqlcnx -d $1 | # dump source
sed "s/\`${1}\`\./\`${2}\`\./g" | # solving `source_db`.tb_name
sed 's/AUTO_INCREMENT=[0-9]\+/''/g' | # solving AUTO_INCREMENT=1
mysql --defaults-extra-file=~/.mysqlcnx $2 # populating target_db
echo "DONE"