Переименовать базу данных MySQL [дубликат]
этот вопрос уже есть ответ здесь:
Я создал базу данных с именем hrms. Теперь мне нужно изменить имя базы данных sunhrm. Но, он отключен в MySQL workbench. Могу ли я сделать это на самом сервере Linux?
12 ответов:
Я не думаю, что вы можете сделать это. Я думаю, вам нужно будет сбросить эту базу данных, создать новую именованную, а затем импортировать дамп.
Если это живая система, вам нужно будет ее снять. Если вы не можете, то вам нужно будет настроить репликацию из этой базы данных в новую.
Если вы хотите видеть команды для этого, @jan имеет детали.
Если вам нужно сделать это из командной строки, просто скопируйте, адаптируйте и вставьте этот фрагмент:
mysql -e "CREATE DATABASE \`new_database\`;" for table in `mysql -B -N -e "SHOW TABLES;" old_database` do mysql -e "RENAME TABLE \`old_database\`.\`$table\` to \`new_database\`.\`$table\`" done mysql -e "DROP DATABASE \`old_database\`;"
можно скопировать базу данных с помощью команды mysqldump без сохранения дампа в файл:
mysql -u root -p -e "create database my_new_database"mysqldump -u root -p original_database | mysql -u root -p my_new_databasemysql -u root -p -e "drop database original_database"
вы можете создать новую базу данных точно так же, как существовала предыдущая база данных, а затем удалить старую базу данных, когда вы закончите. Используйте утилиту mysqldump для создания .sql резервное копирование базы данных через
mysqldump orig_db > orig_db.sqlили если вам нужно использовать логин и пароль, то выполните командуmysqldump -u root -p orig_db > orig_db.sql. orig_db-это имя базы данных, которую вы хотите "переименовать", root будет пользователем, которого вы регистрируете как и orig_db.sql - это файл, созданный с резервной копией. Теперь создайте новую, пустую базу данных с именем, которое вы хотите база данных. Например,mysql -u root -p -e "create database new_db". Как только это будет сделано, запуститеmysql -u root -p new_db < orig_db.sql. new_db теперь существует как идеальная копия orig_db. Затем вы можете удалить исходную базу данных, поскольку теперь она существует в новой базе данных с нужным именем базы данных.короткие, быстрые шаги без всего вышеприведенного объяснения:
mysqldump -u root -p original_database > original_database.sqlmysql -u root -p -e "create database my_new_database"mysql -u root -p my_new_database < original_database.sqlmysql -u root -p -e drop database originl_databaseнадеюсь, что это помогает и это надежные средства для его выполнения без использования какого-либо специального метода, который повредит ваши данные и создаст несоответствия.
вы можете сделать это с помощью инструкции RENAME для каждой таблицы в вашем "current_db" после создания новой схемы "other_db"
RENAME TABLE current_db.tbl_name TO other_db.tbl_nameисточник Переименовать Таблицу Синтаксис
Ну есть 2 способа:
Способ 1: хорошо известный метод переименования схемы базы данных-это сброс схемы с помощью Mysqldump и восстановление ее в другой схеме, а затем удаление старой схемы (если необходимо).
С
Shellmysqldump emp > emp.out mysql -e "CREATE DATABASE employees;" mysql employees < emp.out mysql -e "DROP DATABASE emp;"хотя выше метод прост, он требует много времени и пространства. Что делать, если схема больше, чем 100GB? есть методы, где вы можете трубить выше команды вместе экономят на пространстве, однако это не сэкономит время.
чтобы исправить такие ситуации, есть еще один быстрый способ переименования схемы, однако, некоторые меры предосторожности должны быть приняты при этом.
Способ 2: MySQL имеет очень хорошую функцию для переименования таблиц, которая даже работает в разных схемах. Эта операция переименования является атомарной и никто другой не может получить доступ к таблице во время ее переименования. Это занимает некоторое время, чтобы завершите, так как изменение имени таблицы или ее схемы-это только изменение метаданных. Вот процедурный подход при выполнении переименования:
- создать новую схему базы данных с нужным именем.
- переименуйте таблицы из старой схемы в новую схему, используя MySQL Команда "переименовать таблицу".
- удалить старую схему базы данных.
если есть
views, triggers, functions, stored proceduresв схеме они также должны быть воссозданы. MySQL" переименовать таблицу " не удается если есть триггеры, существует на столах. Чтобы исправить это, мы можем сделать следующие вещи :1)
Dump the triggers, events and stored routines in a separate file.это делается с помощью флагов-E,- R (в дополнение к-t-d, который сбрасывает триггеры) к команде mysqldump. Как только триггеры dumped, нам нужно будет удалить их из схемы, для переименования таблицы команда на работу.$ mysqldump <old_schema_name> -d -t -R -E > stored_routines_triggers_events.out2) создать список только "базовых" таблиц. Они могут быть найдены с помощью запрос на информационная схема.Таблицы таблицы.
mysql> select TABLE_NAME from information_schema.tables where table_schema='<old_schema_name>' and TABLE_TYPE='BASE TABLE';3) дамп представления в файле out. Вид можно найти с помощью запроса те же базы данных information_schema.Таблицы таблицы.
mysql> select TABLE_NAME from information_schema.tables where table_schema='<old_schema_name>' and TABLE_TYPE='VIEW'; $ mysqldump <database> <view1> <view2> … > views.out4) отбросьте триггеры на текущих таблицах в old_schema.
mysql> DROP TRIGGER <trigger_name>; ...5) восстановите вышеуказанные файлы дампа, как только все" базовые " таблицы, найденные на Шаге #2, будут переименованы.
mysql> RENAME TABLE <old_schema>.table_name TO <new_schema>.table_name; ... $ mysql <new_schema> < views.out $ mysql <new_schema> < stored_routines_triggers_events.outтонкости с выше методы : Возможно, нам придется обновить
GRANTSдля пользователей, которые соответствуют правильному имени schema_name. Они могут быть исправлены с помощью простогоUPDATEonmysql.columns_priv,mysql.procs_priv,mysql.tables_priv, mysql.обновление таблиц БДold_schema nameдоnew_schemaи вызов " Flush привилегии;". Хотя"method 2" кажется немного сложнее, чем "method 1", это полностью сценарий. Простой скрипт bash для выполнения вышеуказанных шагов в правильной последовательности, может помочь вам сэкономить место и время при переименовании базы данных схемы в следующий раз.команда Percona Remote DBA написала сценарий под названием "rename_db", который работает следующим образом:
[root@dba~]# /tmp/rename_db rename_db <server> <database> <new_database>чтобы продемонстрировать использование этого скрипта, используется пример схемы "emp", создаются тестовые триггеры, хранятся подпрограммы на этой схеме. Попробую переименовать схему базы данных с помощью скрипта, который занимает несколько секунд для завершения в отличие от времени сброса/восстановления.
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | emp | | mysql | | performance_schema | | test | +--------------------+ [root@dba ~]# time /tmp/rename_db localhost emp emp_test create database emp_test DEFAULT CHARACTER SET latin1 drop trigger salary_trigger rename table emp.__emp_new to emp_test.__emp_new rename table emp._emp_new to emp_test._emp_new rename table emp.departments to emp_test.departments rename table emp.dept to emp_test.dept rename table emp.dept_emp to emp_test.dept_emp rename table emp.dept_manager to emp_test.dept_manager rename table emp.emp to emp_test.emp rename table emp.employees to emp_test.employees rename table emp.salaries_temp to emp_test.salaries_temp rename table emp.titles to emp_test.titles loading views loading triggers, routines and events Dropping database emp real 0m0.643s user 0m0.053s sys 0m0.131s mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | emp_test | | mysql | | performance_schema | | test | +--------------------+как вы можете видеть выше вывод схемы базы данных " emp "был переименован в" emp_test " менее чем за секунду. Наконец, это скрипт из Перконы, который используется выше для "
method 2".#!/bin/bash # Copyright 2013 Percona LLC and/or its affiliates set -e if [ -z "" ]; then echo "rename_db <server> <database> <new_database>" exit 1 fi db_exists=`mysql -h -e "show databases like ''" -sss` if [ -n "$db_exists" ]; then echo "ERROR: New database already exists " exit 1 fi TIMESTAMP=`date +%s` character_set=`mysql -h -e "show create database \G" -sss | grep ^Create | awk -F'CHARACTER SET ' '{print }' | awk '{print }'` TABLES=`mysql -h -e "select TABLE_NAME from information_schema.tables where table_schema='' and TABLE_TYPE='BASE TABLE'" -sss` STATUS=$? if [ "$STATUS" != 0 ] || [ -z "$TABLES" ]; then echo "Error retrieving tables from " exit 1 fi echo "create database DEFAULT CHARACTER SET $character_set" mysql -h -e "create database DEFAULT CHARACTER SET $character_set" TRIGGERS=`mysql -h -e "show triggers\G" | grep Trigger: | awk '{print }'` VIEWS=`mysql -h -e "select TABLE_NAME from information_schema.tables where table_schema='' and TABLE_TYPE='VIEW'" -sss` if [ -n "$VIEWS" ]; then mysqldump -h $VIEWS > /tmp/_views${TIMESTAMP}.dump fi mysqldump -h -d -t -R -E > /tmp/_triggers${TIMESTAMP}.dump for TRIGGER in $TRIGGERS; do echo "drop trigger $TRIGGER" mysql -h -e "drop trigger $TRIGGER" done for TABLE in $TABLES; do echo "rename table .$TABLE to .$TABLE" mysql -h -e "SET FOREIGN_KEY_CHECKS=0; rename table .$TABLE to .$TABLE" done if [ -n "$VIEWS" ]; then echo "loading views" mysql -h < /tmp/_views${TIMESTAMP}.dump fi echo "loading triggers, routines and events" mysql -h < /tmp/_triggers${TIMESTAMP}.dump TABLES=`mysql -h -e "select TABLE_NAME from information_schema.tables where table_schema='' and TABLE_TYPE='BASE TABLE'" -sss` if [ -z "$TABLES" ]; then echo "Dropping database " mysql -h -e "drop database " fi if [ `mysql -h -e "select count(*) from mysql.columns_priv where db=''" -sss` -gt 0 ]; then COLUMNS_PRIV=" UPDATE mysql.columns_priv set db='' WHERE db='';" fi if [ `mysql -h -e "select count(*) from mysql.procs_priv where db=''" -sss` -gt 0 ]; then PROCS_PRIV=" UPDATE mysql.procs_priv set db='' WHERE db='';" fi if [ `mysql -h -e "select count(*) from mysql.tables_priv where db=''" -sss` -gt 0 ]; then TABLES_PRIV=" UPDATE mysql.tables_priv set db='' WHERE db='';" fi if [ `mysql -h -e "select count(*) from mysql.db where db=''" -sss` -gt 0 ]; then DB_PRIV=" UPDATE mysql.db set db='' WHERE db='';" fi if [ -n "$COLUMNS_PRIV" ] || [ -n "$PROCS_PRIV" ] || [ -n "$TABLES_PRIV" ] || [ -n "$DB_PRIV" ]; then echo "IF YOU WANT TO RENAME the GRANTS YOU NEED TO RUN ALL OUTPUT BELOW:" if [ -n "$COLUMNS_PRIV" ]; then echo "$COLUMNS_PRIV"; fi if [ -n "$PROCS_PRIV" ]; then echo "$PROCS_PRIV"; fi if [ -n "$TABLES_PRIV" ]; then echo "$TABLES_PRIV"; fi if [ -n "$DB_PRIV" ]; then echo "$DB_PRIV"; fi echo " flush privileges;" fi
короче нет. Переименование базы данных обычно считается слишком опасным. У MySQL была эта функция немного, но она была удалена. Вам было бы лучше использовать workbench для экспорта как схемы, так и данных в SQL, а затем изменить имя базы данных CREATE перед ее запуском/импортом.
для нетерпеливых пользователей mysql (как и я), решение:
/etc/init.d/mysql stop mv /var/lib/mysql/old_database /var/lib/mysql/new_database /etc/init.d/mysql start
Я использовал следующий метод для переименования базы данных
сделайте резервную копию файла с помощью mysqldump или любого инструмента DB, например heidiSQL, MySQL administrator и т. д.
открыть резервную копию (например, backupfile.sql) файл в каком-то текстовом редакторе.
поиск и замена имени базы данных и сохранить файл.
восстановить отредактированный файл SQL
Если ваша БД содержит только таблицы MyISAM (do не используйте этот метод, если у вас InnoDB таблицы):
- выключите сервер MySQL
- перейти к mysql
dataкаталог и переименовать каталог базы данных (Примечание: не-альфа символы должны быть закодированы особым образом)- перезагрузить сервер
- при необходимости измените привилегии (предоставьте доступ к новому имени БД)
вы можете написать все это в одной команде, так что время простоя всего секунду или две.
сначала создайте резервную копию старой базы данных под названием HRMS и отредактируйте файл сценария с заменой слова HRMS на SUNHRM. После этого шага импортируйте файл базы данных в mysql
другой способ переименования базы данных или получения образа базы данных-это использование опции обратного проектирования на вкладке база данных. Он создаст диаграмму ошибок для базы данных. Переименуйте схему там.
после этого перейдите в меню Файл и перейдите к экспорту и переадресации инженера базы данных.
затем вы можете импортировать базу данных.
Comments