База данных Clone MySQL

У меня есть база данных на сервере с 120 таблицами.

Я хочу клонировать всю базу данных с новым именем db и скопированными данными.

Есть ли эффективный способ сделать это?

Ответ 1

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

Ответ 2

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

Ответ 3

Как и принятый ответ, но без .sql файлов:

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

Ответ 4

Если вы используете phpMyAdmin

  • Выберите базу данных, которую вы хотите скопировать (нажав на базу данных с главного экрана phpMyAdmin).
  • Внутри базы данных выберите вкладку "Операции".
  • Прокрутите вниз до раздела, где указано "Копировать базу данных в:"
  • Введите имя новой базы данных.
  • Выберите "структура и данные", чтобы скопировать все. В качестве альтернативы вы можете выбрать "Только структура", если вам нужны столбцы, но не данные.
  • Установите флажок "CREATE DATABASE before copying" для создания новой базы данных.
  • Установите флажок "Добавить значение AUTO_INCREMENT".
  • Нажмите кнопку "Перейти", чтобы продолжить.

Ответ 6

$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']."`");
}