Як перейменувати базу даних MySQL?


48

Як перейменувати базу даних MySQL?

Інтернет-посібник MySQL розповів про команду RENAME DATABASE (цю сторінку документації Oracle видалив деякий час тому):

Це твердження було додано в MySQL 5.1.7, але було визнано небезпечним і було видалено в MySQL 5.1.23.

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


Усі чотири відповіді мають сенс. Це питання з багатьма можливими рішеннями.
напів


Відповіді:


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.

Ось альтернативний спосіб генерувати команду таблиці перейменування в 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';;
Сиклон

Але якщо ви не вставите дані в нову БД, вони будуть втрачені
дощовик

tДякую. Це найкраща відповідь. Дуже дякую!
типологічний

Цей сценарій надзвичайно акуратний, розроблений з коробки на MariaDB 10.1.
Люк

12

MySQL якось відстійно для цього. Єдине надійне надійне рішення - це використання phpMyAdmin.

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

Так просто. Усі дозволи переносяться.


6
+1 для рішення GUI, але прості команди та сценарії у вікі відповіді також є ідеально «надійними та надійними»
Вілл Шеппард

7

Я знайшов дуже просте рішення: вимкніть MySQL, перейменуйте каталог баз даних і перезавантажте. Це все!

Це трохи небезпечно, якщо у вас є SQL-код або дані, що стосуються старого імені. Тоді вам потрібно це також змінити перед перезавантаженням програми. Але мені це не потрібно було робити, а YMV.

Гуглінг дає кілька покажчиків на кшталт цих двох:

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


5

Я схильний створювати нову базу даних, а потім скидаю таблиці зі старої, у s/old_database/new_database/g.
Напевно, це не найкращий спосіб зробити це, але це працює.


2

Якщо у вас є можливість використовувати інструмент управління MySQL (наприклад, phpMyAdmin), ви можете легко перейменувати його, коли вони створюватимуть для вас запит.

У phpMyAdmin вони також створюють кожну таблицю і вставляють дані за допомогою "ВСТАВИТЬ У ВИБІР ... ВИБІР * ВІД ...". Таким чином, ланцюгом вони копіюють дані.

Якщо ви не можете цього зробити, я рекомендую зробити дамп і повторно імпортувати sql-файл у нову базу даних.

Удачі!

З повагою, Бен.


2

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

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

  2. Відкрийте резервну копію (наприклад, backupfile.sql) файлу в якомусь текстовому редакторі.

  3. Знайдіть і замініть ім’я бази даних та збережіть файл.

  4. Відновити відредагований файл sql

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.