sh 将MySQL数据库克隆到同一服务器上的新数据库,而不使用转储文件。这比使用mysqldump要快得多。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh 将MySQL数据库克隆到同一服务器上的新数据库,而不使用转储文件。这比使用mysqldump要快得多。相关的知识,希望对你有一定的参考价值。

#!/bin/bash

DBUSER="root";
DBPASS="";
DBHOST="localhost";

DB_OLD=mydatabase
DB_NEW=clone_mydatabase

DBCONN="--host=${DBHOST} --user=${DBUSER} --password=${DBPASS}";

MYSQL_CREATE='set foreign_key_checks = 0';
MYSQL_INSERT='set foreign_key_checks = 0';

echo "Begin database clone (may take a while)";
echo "-- Create destination database";
echo "DROP DATABASE IF EXISTS ${DB_NEW}; CREATE DATABASE ${DB_NEW}" | mysql ${DBCONN};

[ $? -ne 0 ] && exit $?;

echo "-- Select source table schemas";
MYSQL_TABLES=$(echo "SHOW TABLES" | mysql $DBCONN $DB_OLD | tail -n +2);

[ $? -ne 0 ] && exit $?;
COUNT=1
for TABLE in $MYSQL_TABLES; do
    MYSQL_INSERT="${MYSQL_INSERT}; ALTER TABLE ${DB_NEW}.${TABLE} DISABLE KEYS";
    MYSQL_INSERT="${MYSQL_INSERT}; INSERT INTO ${DB_NEW}.${TABLE} SELECT * FROM ${DB_OLD}.${TABLE}";
    MYSQL_INSERT="${MYSQL_INSERT}; ALTER TABLE ${DB_NEW}.${TABLE} ENABLE KEYS";
    MYSQL_CREATE="${MYSQL_CREATE}; $(echo SHOW CREATE TABLE ${TABLE}|mysql -B -r ${DBCONN} ${DB_OLD}|tail -n +2|cut -f 2-)";

    [ $? -ne 0 ] && echo && exit $?;

    [ $COUNT -le 1 ] && echo -n "   [ ";
    echo -n ".";
    [ $COUNT -ge 65 ] && echo " ]" && COUNT=0;

    COUNT=$((COUNT+1))
done;

MYSQL_CREATE="${MYSQL_CREATE}; set foreign_key_checks = 1";
MYSQL_INSERT="${MYSQL_INSERT}; set foreign_key_checks = 1";

[ $COUNT -gt 1 ] && echo " ]";

echo "-- Create destination table schemas";
echo "${MYSQL_CREATE};" | mysql $DBCONN $DB_NEW

[ $? -ne 0 ] && exit $?;

echo "-- Insert source data into destination tables";
echo "${MYSQL_INSERT};" | mysql $DBCONN $DB_NEW

[ $? -ne 0 ] && exit $?;

echo "Done.";

以上是关于sh 将MySQL数据库克隆到同一服务器上的新数据库,而不使用转储文件。这比使用mysqldump要快得多。的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Workbench - 如何在同一台服务器上克隆具有不同名称的数据库?

克隆 aws 环境,使其共享同一个 RDS 数据库

MariaDB 上的 MySQL 查询非常慢

无法将我的本地 Wordpress 安装隧道传输到 appfog 上的 mysql 数据库

sh Bash:将MySQL数据库从cPanel下载到开发服务器

sh Bash:将MySQL数据库和文件从实时服务器下载到开发服务器