Как переименовать базу данных MySQL?

48

Как переименовать базу данных MySQL?

В онлайн-руководстве по MySQL говорится о команде RENAME DATABASE (эта страница документации была удалена Oracle некоторое время назад):

Это утверждение было добавлено в MySQL 5.1.7, но было признано опасным и было удалено в MySQL 5.1.23.

Итак, как поступить? Обоснование: мы начали с кодового имени для проекта и хотим, чтобы имя базы данных теперь отражало окончательное имя проекта.

nalply
источник
Все четыре ответа имеют смысл. Это вопрос со многими возможными решениями.
Вскоре

Ответы:

59

Из этого поста Илана Хазана:

В MySQL нет поддержки переименования базы данных. Чтобы переименовать базу данных MySQL, вы можете выполнить одно из следующих действий:

  1. Создайте новую базу данных и переименуйте все таблицы в старой базе данных, чтобы они были в новой базе данных:

    CREATE database new_db_name;
    RENAME TABLE db_name.table1 TO new_db_name, db_name.table2 TO new_db_name;
    DROP database db_name;
  2. В оболочке Linux используйте mysqldump для резервного копирования старой базы данных, а затем восстановите базу данных с дампом под новым именем с помощью утилиты MySQL. Наконец, используйте команду drop database, чтобы удалить старую базу данных. Эта опция может плохо работать для большой базы данных.

    mysqldump -uxxxx -pxxxx -h xxxx db_name > db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "CREATE DATABASE new_db_name"
    mysql -uxxxx -pxxxx -h xxxx new_db_name < db_name_dump.sql
    mysql -uxxxx -pxxxx -h xxxx -e "DROP DATABASE db_name"
    
  3. Написать простой Linux-скрипт (мое любимое решение)

    #!/bin/bash
    
    dbuser=xxxx
    dbpass=xxxx
    olddb=xxxx
    newdb=xxxx
    
    mysqlconn="mysql -u $dbuser -p$dbpass -h localhost"
    
    $mysqlconn -e "CREATE DATABASE $newdb"
    params=$($mysqlconn -N -e "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='$olddb'")
    
    for name in $params; do
          $mysqlconn -e "RENAME TABLE $olddb.$name to $newdb.$name";
          echo "Renamed $olddb.$name to $newdb.$name";
    done;
    
    #$mysqlconn -e "DROP DATABASE $olddb"
  4. Если все ваши таблицы MyISAM, вы можете переименовать имя старой папки базы данных:

    1. Завершите работу сервера MySQL,
    2. Переименуйте имя папки базы данных в новое имя,
    3. Запустите сервер MySQL.
alexeit
источник
Вот альтернативный способ генерации команды переименования таблиц в SQL напрямую в MySQL: blog.marceloaltmann.com/how-to-rename-a-database-in-mysql
Ив Мартин,
Это поможет создать запрос для первого решения. Просто скопируйте результаты вставки за RENAME TABLE SELECT CONCAT('olddb.', TABLE_NAME, ' TO newdb.', TABLE_NAME, ',') FROM INFORMATION_SCHEMA.TABLES WHERE table_schema='olddb';;
Syclone
Но если вы не вставить данные в новой БД, они будут потеряны
RAINMAN
tThanks. Это лучший ответ. Спасибо вам большое!
typelogic
Этот скрипт очень аккуратный, работает из коробки на MariaDB 10.1.
Люк
12

MySQL вроде бы отстой для этого. Единственное твердое надежное решение - это использовать phpMyAdmin.

Login-> click Scheme-> click Operations-> найти Rename database to:-> написать NewName> click Go.

Так просто, как, что. Все разрешения перенесены.

spencerthayer
источник
6
+1 за решение с графическим интерфейсом, но простые команды и сценарии в вики-сообществе также идеально "надежны и надежны"
Уилл Шеппард,
7

Я нашел очень простое решение: выключите MySQL, переименуйте каталог базы данных и перезапустите. Вот и все!

Это немного опасно, если у вас есть код SQL или данные, ссылающиеся на старое имя. Затем вам необходимо изменить это, прежде чем перезапустить приложение. Но мне не нужно было этого делать, кроме YMV.

Поиск в Google дает несколько указателей, таких как эти два:

https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

http://www.delphifaq.com/faq/databases/mysql/f574.shtml

nalply
источник
5

Я склонен создавать новую базу данных, а затем выгружать таблицы из старой в файл .sql (с помощью mysqldump), редактировать файл, выполнять какие- s/old_database/new_database/gто операции и затем снова импортировать его в новую базу данных.
Вероятно, не лучший способ сделать это, но это работает.

Том О'Коннор
источник
2

Если у вас есть возможность использовать MySQL Management-Tool (например, phpMyAdmin), вы можете легко переименовать его, так как он создает запрос для вас.

В phpMyAdmin они также создают каждую таблицу и вставляют данные с помощью «INSERT INTO ... SELECT * FROM ...». Таким образом, цепочкой они копируют данные.

Если вы не можете сделать это, я бы порекомендовал сделать дамп и повторно импортировать файл sql в новую базу данных.

Удачи!

С уважением, Бен.

Бенедикт Ниссен
источник
2

Я использовал следующий метод для переименования базы данных

  1. сделать резервную копию файла, используя mysqldump или любой инструмент БД, например, heidiSQL, администратор mysql и т. д.

  2. Откройте файл резервной копии (например, backupfile.sql) в каком-либо текстовом редакторе.

  3. Найдите и замените имя базы данных и сохраните файл.

  4. Восстановить отредактированный файл sql

АДАРША
источник