克隆MySQL数据库

时间:2011-04-05 11:47:49

标签: mysql database mysqldump

我在拥有120个表的服务器上有数据库。

我想用新的数据库名称和复制的数据克隆整个数据库。

有一种有效的方法吗?

7 个答案:

答案 0 :(得分:94)

$ mysqldump yourFirstDatabase -u user -ppassword > yourDatabase.sql
$ mysql yourSecondDatabase -u user -ppassword < yourDatabase.sql

答案 1 :(得分:28)

mysqldump -u <user> --password=<password> <DATABASE_NAME> | mysql -u <user> --password=<password> -h <hostname> <DATABASE_NAME_NEW>

答案 2 :(得分:11)

喜欢接受的答案,但没有.sql文件:

mysqldump sourcedb -u <USERNAME> -p<PASS> | mysql destdb -u <USERNAME> -p<PASS>

答案 3 :(得分:5)

如果您使用phpMyAdmin

  1. 选择您要复制的数据库(通过从phpMyAdmin主屏幕单击数据库)。
  2. 进入数据库后,选择“操作”选项卡。
  3. 向下滚动到“将数据库复制到:”
  4. 的部分
  5. 输入新数据库的名称。
  6. 选择“结构和数据”以复制所有内容。或者,如果您想要列而不是数据,则可以选择“仅结构”。
  7. 选中“复制前创建数据库”复选框以创建新数据库。
  8. 选中“添加AUTO_INCREMENT值”框。
  9. 点击“开始”按钮继续。

答案 4 :(得分:3)

MySQL Utilities包中有 mysqldbcopy 工具。 http://dev.mysql.com/doc/mysql-utilities/1.3/en/mysqldbcopy.html

答案 5 :(得分:0)

如果要确保它是精确的克隆,则需要完全清除/删除接收数据库。这样,新数据库仅在导入文件中具有表,而没有其他表。否则,您的接收数据库可能会保留导入文件中未指定的表。
从先前的答案中得到:

DB1 == tableA, tableB
DB2 == tableB, tableC
DB1 imported to -> DB2
DB2 == tableA, tableB, tableC //true clone should not contain tableC

使用--databases--add-drop-databasesee mysql docs)可以轻松进行更改。这会将drop语句添加到sqldump中,因此您的新数据库将是精确的副本:

$ mysqldump -h $ip -u $user -p$pass --databases $dbname --add-drop-database > $file.sql
$ mysql -h $ip $dbname -u $user -p$pass < $file.sql

当然要替换$变量,并且一如既往,密码和-p之间没有空格。为了提高安全性,请从命令中删除-p $ pass

答案 6 :(得分:-1)

$newdb = (date('Y')-1);
$mysqli->query("DROP DATABASE `".$newdb."`;");
$mysqli->query("CREATE DATABASE `".$newdb."`;");

$query = "
SELECT
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA LIKE 'rds'
";
$result = $mysqli->query($query)->fetch_all(MYSQLI_ASSOC);
foreach($result as $val) {
    echo $val['TABLE_NAME'].PHP_EOL;
    $mysqli->query("CREATE TABLE `".$newdb."`.`".$val['TABLE_NAME']."` LIKE rds.`".$val['TABLE_NAME']."`");
    $mysqli->query("INSERT `".$newdb."`.`".$val['TABLE_NAME']."` SELECT * FROM rds.`".$val['TABLE_NAME']."`");
}