Руководство MySQL на MySQL покрывает это.
Обычно я просто выкидываю базу данных и импортирую ее с новым именем. Это не вариант для очень больших баз данных. По-видимому, RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
делает плохие вещи, существует только в нескольких версиях, и в целом это плохая идея .
Это должно работать с InnoDB , который хранит вещи совсем иначе, чем MyISAM .
RENAME DATABASE
оператор, который не несет никаких опасностей, поскольку в настоящее время нет простого способа выполнить эту задачу. Нет очевидной причины, почему это было опасно в документации, поэтому они могли бы сделать замену. По крайней мере, люди размещают сообщения об ошибках на своем веб-сайте. Например, bugs.mysql.com/bug.php?id=58593 и bugs.mysql.com/bug.php?id=1698 .Ответы:
Для InnoDB , кажется, работает следующее: создайте новую пустую базу данных, затем переименуйте каждую таблицу по очереди в новую базу данных:
Вам нужно будет настроить разрешения после этого.
Для сценариев в оболочке вы можете использовать одно из следующих:
ИЛИ
Ноты:
-p
и паролем нет пробела . Если в вашей базе данных нет пароля, удалите-u username -ppassword
деталь.Если у какой-либо таблицы есть триггер, ее нельзя переместить в другую базу данных с помощью вышеуказанного метода (приведет к
Trigger in wrong schema
ошибке). Если это так, используйте традиционный способ клонирования базы данных, а затем отбросьте старую:mysqldump old_db | mysql new_db
Если у вас есть хранимые процедуры, вы можете скопировать их впоследствии:
mysqldump -R old_db | mysql new_db
источник
DROP VIEW
иCREATE VIEW
вместо. Неуклюжий, да. Возможно, вы захотите сделать,mysqldump
чтобы переместить представления, после первого перемещения всех таблиц. Также обратите внимание, чтоSHOW TABLES
будут показаны таблицы и представления, так что будьте осторожны.RENAME DATABASE
была удалена: dev.mysql.com/worklog/task/?id=4030Используйте эти несколько простых команд:
Или, чтобы уменьшить количество операций ввода / вывода, используйте следующее, предложенное @Pablo Marin-Garcia:
источник
-p<password>
вместо-p
везде, чтобы операторы выполнялись без появления подсказки ,Enter password: Enter password:
кажется, что используется один пароль, но не оба. Я упускаю детали?--routines
флаг в команды mysqldump, чтобы гарантировать копирование хранимых процедур.Я думаю, что решение проще и было предложено некоторыми разработчиками. У phpMyAdmin есть операция для этого.
В phpMyAdmin выберите базу данных, которую вы хотите выбрать. Во вкладках есть одна, которая называется Операции, перейдите в раздел переименования. Это все.
Он, как многие предлагали, создает новую базу данных с новым именем, сбрасывает все таблицы старой базы данных в новую базу данных и удаляет старую базу данных.
источник
Вы можете использовать SQL для создания сценария SQL для передачи каждой таблицы в исходной базе данных в целевую базу данных.
Вы должны создать базу данных назначения перед запуском скрипта, сгенерированного из команды.
Вы можете использовать любой из этих двух сценариев (я изначально предложил первый, а кто-то «улучшил» мой ответ
GROUP_CONCAT
. Выберите, но я предпочитаю оригинал)или
($ 1 и $ 2 - источник и цель соответственно)
Это сгенерирует команду SQL, которую вам нужно будет выполнить.
Обратите внимание, что
GROUP_CONCAT
по умолчанию установлен предел длины, который может быть превышен для баз данных с большим количеством таблиц. Вы можете изменить это ограничение, запустивSET SESSION group_concat_max_len = 100000000;
(или другое большое число).источник
Эмуляция отсутствующей
RENAME DATABASE
команды в MySQL:Создайте запросы на переименование с помощью:
Запустите этот вывод
Он был взят из эмуляции отсутствующей команды RENAME DATABASE в MySQL .
источник
Три варианта:
Создайте новую базу данных, выключите сервер, переместите файлы из одной папки базы данных в другую и перезапустите сервер. Обратите внимание, что это будет работать, только если ВСЕ ваши таблицы являются MyISAM.
Создайте новую базу данных, используйте операторы CREATE TABLE ... LIKE, а затем используйте операторы INSERT ... SELECT * FROM.
Используйте mysqldump и перезагрузите этот файл.
источник
Простой способ
Перейдите в каталог базы данных:
Выключите MySQL ... Это важно!
Хорошо, этот способ не работает для InnoDB или BDB-баз данных.
Переименовать базу данных:
... или стол ...
Перезапустите MySQL
Выполнено...
ОК, этот способ не работает с базами данных InnoDB или BDB. В этом случае вы должны сбросить базу данных и повторно импортировать ее.
источник
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist cd /usr/local/var/mysql mv old-name new-name launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Вы можете использовать этот скрипт:
Справка: Как переименовать базу данных MySQL?
Работает:
источник
set -e
в начало сценария, что приведет к прекращению выполнения при сбое и должно смягчить эту проблему.Я только недавно нашел очень хороший способ сделать это, работает с MyISAM и InnoDB и работает очень быстро:
Я не помню, где я читал это, но заслуга идет кому-то еще, а не мне.
источник
Самый простой способ сделать полное переименование безошибочным (включая удаление старой базы данных в конце, так что это переименование, а не копия) :
шаги:
источник
Это то, что я использую:
источник
В настоящее время MySQL не поддерживает переименование базы данных через ее командный интерфейс, но вы можете переименовать базу данных, если у вас есть доступ к каталогу, в котором MySQL хранит свои базы данных. Для установок по умолчанию MySQL это обычно находится в каталоге данных в каталоге, где был установлен MySQL. Найдите в базе данных имя базы данных, которую вы хотите переименовать, и переименуйте ее. Переименование каталога может вызвать проблемы с разрешениями. Быть в курсе
Примечание: вы должны остановить MySQL, прежде чем вы сможете переименовать базу данных
Я бы порекомендовал создать новую базу данных (используя нужное имя) и экспортировать / импортировать нужные данные из старой в новую. Довольно просто
источник
Когда вы переименовываете базу данных в PHPMyAdmin, она создает дамп, затем удаляет и заново создает базу данных с новым именем.
источник
Ну есть 2 метода:
Метод 1: Хорошо известный метод для переименования схемы базы данных - выгрузка схемы с использованием Mysqldump и восстановление ее в другой схеме, а затем удаление старой схемы (если необходимо).
Из оболочки
Хотя описанный выше метод прост, он требует много времени и пространства. Что делать, если схема больше 100 ГБ? Существуют методы, где вы можете объединить вышеперечисленные команды вместе, чтобы сэкономить место, однако это не сэкономит время.
Чтобы исправить такие ситуации, существует другой быстрый способ переименования схем, однако, при этом необходимо соблюдать осторожность.
Метод 2: MySQL имеет очень хорошую функцию для переименования таблиц, которая работает даже в разных схемах. Эта операция переименования является атомарной, и никто другой не может получить доступ к таблице во время ее переименования. Это займет короткое время, поскольку изменение имени таблицы или ее схемы - это только изменение метаданных. Вот процедурный подход к переименованию:
Создайте новую схему базы данных с нужным именем. Переименуйте таблицы из старой схемы в новую, используя команду MySQL «RENAME TABLE». Удалите старую схему базы данных.
If there are views, triggers, functions, stored procedures in the schema, those will need to be recreated too
, «RENAME TABLE» MySQL завершается ошибкой, если в таблицах существуют триггеры. Чтобы исправить это, мы можем сделать следующие вещи:1)
Dump the triggers, events and stored routines in a separate file.
Это делается с помощью флагов -E, -R (в дополнение к -t -d, который выводит триггеры) в команду mysqldump. После сброса триггеров нам нужно будет удалить их из схемы, чтобы команда RENAME TABLE работала.2) Сформировать список только «БАЗОВЫХ» таблиц. Их можно найти с помощью запроса к
information_schema.TABLES
таблице.3) Дамп представления в выходной файл. Представления могут быть найдены с помощью запроса к той же
information_schema.TABLES
таблице.4) Отбросьте триггеры на текущих таблицах в old_schema.
5) Восстановите вышеуказанные файлы дампа, как только все «базовые» таблицы, найденные на шаге №2, будут переименованы.
Сложности с вышеуказанными методами: нам может потребоваться обновить GRANTS для пользователей, чтобы они соответствовали правильному имени схемы. Они могут быть исправлены с помощью простого UPDATE для таблиц mysql.columns_priv, mysql.procs_priv, mysql.tables_priv, mysql.db, обновляющих имя old_schema до new_schema и вызывающих «Flush privileges;». Хотя «метод 2» кажется немного более сложным, чем «метод 1», он полностью подходит для сценариев. Простой скрипт bash для выполнения вышеуказанных шагов в правильной последовательности поможет сэкономить место и время при следующем переименовании схем базы данных.
Команда Percona Remote DBA написала сценарий «rename_db», который работает следующим образом:
Чтобы продемонстрировать использование этого скрипта, использовали образец схемы «emp», создали триггеры тестирования, сохранили подпрограммы в этой схеме. Попытается переименовать схему базы данных с помощью сценария, который занимает несколько секунд, в отличие от трудоемкого метода дампа / восстановления.
Как видно из вышеприведенного вывода, схема базы данных «emp» была переименована в «emp_test» менее чем за секунду. Наконец, это скрипт из Percona, который используется выше для «метода 2».
источник
Шаги:
источник
Для тех, кто является пользователями Mac, Sequel Pro имеет опцию Rename Database в меню Database. http://www.sequelpro.com/
источник
Большинство ответов здесь неверны по одной из двух причин:
У Percona есть запись в блоге о том, как сделать это хорошо: https://www.percona.com/blog/2013/12/24/renaming-database-schema-mysql/
и сценарий, опубликованный (сделанный?) Саймоном Р. Джонсом, который делает то, что предлагается в этом посте. Я исправил ошибку, обнаруженную в скрипте. Вы можете видеть это здесь:
https://gist.github.com/ryantm/76944318b0473ff25993ef2a7186213d
Вот копия этого:
Сохраните его в файл с именем
rename_db
и сделайте скрипт исполняемым, аchmod +x rename_db
затем используйте его как./rename_db localhost old_db new_db
источник
Можно переименовать все таблицы в базе данных, чтобы они были в другой базе данных без необходимости выполнять полный дамп и восстановление.
Однако любые триггеры в целевой БД не будут счастливы. Сначала вам нужно будет удалить их, а затем переименовать.
источник
mysql --batch-uroot -e "call mysql.rename_db('test', 'blah2');" | mysql -uroot
Обратите внимание, вы должны использовать --batch, чтобы изменить форматирование на необработанное форматирование, которое выводит результаты с нулевым форматированием.Вот командный файл, который я написал, чтобы автоматизировать его из командной строки, но это для Windows / MS-DOS.
Синтаксис базы данных rename_mysqldb newdatabase -u [пользователь] -p [пароль]
источник
Хранимая процедура TodoInTX для меня не совсем работает. Вот мой удар в этом:
источник
Самый простой способ - использовать программное обеспечение HeidiSQL. Это бесплатно и с открытым исходным кодом. Он работает на Windows и на любом Linux с Wine (запускайте приложения Windows на Linux, BSD, Solaris и Mac OS X).
Чтобы загрузить HeidiSQL, перейдите по ссылке http://www.heidisql.com/download.php .
Чтобы скачать Wine, перейдите по ссылке http://www.winehq.org/ .
Чтобы переименовать базу данных в HeidiSQL, просто щелкните правой кнопкой мыши на имени базы данных и выберите «Изменить». Затем введите новое имя и нажмите «ОК».
Это так просто.
источник
Database "database_name" contains stored routine(s) which cannot be moved.
триггеры сообщений (по крайней мере, для базы данных MariDB), которые считаются хранимыми процедурами. У меня не было никаких хранимых процедур, но я не мог переименовать базу данных, пока я не сбросил все триггеры.Для пользователей Mac вы можете использовать
Sequel Pro
(бесплатно), которые просто предоставляют возможность переименовать базы данных. Хотя это не удаляет старую БД.После открытия соответствующей БД просто нажмите:
Database
->Rename database...
источник
Я задал вопрос о сбое сервера, пытаясь обойти время простоя при восстановлении очень больших баз данных с помощью MySQL Proxy. У меня не было никакого успеха, но в конце концов я понял, что мне нужна функциональность RENAME DATABASE, потому что выгрузка / импорт не была возможной из-за размера нашей базы данных.
В MySQL встроена функциональность RENAME TABLE, поэтому в итоге я написал простой скрипт на Python, который сделает эту работу за меня. Я разместил его на GitHub на случай, если он будет полезен другим.
источник
RENAME TABLE
, что этот оператор был добавлен в MySQL 5.1.7, но был признан опасным и был удален в MySQL 5.1.23.Для вашего удобства ниже приведен небольшой шелл-скрипт, который должен быть выполнен с двумя параметрами: db-name и new db-name.
Вам может потребоваться добавить параметры входа в mysql-строки, если вы не используете .my.cnf-файл в вашем домашнем каталоге. Пожалуйста, сделайте резервную копию перед выполнением этого скрипта.
источник
Кажется, никто не упомянул об этом, но вот другой способ:
Затем для каждой таблицы выполните:
тогда, если вы хотите,
Преимущество этого подхода состоит в том, что вся передача выполняется на сервере с почти нулевым сетевым трафиком, поэтому он будет выполняться намного быстрее, чем дамп / восстановление.
Если у вас есть хранимые процедуры / представления / и т. Д., Вы можете также перенести их.
источник
create database
выражении? Откуда ты это взял?create table like
синтаксис: dev.mysql.com/doc/refman/5.7/en/create-table-like.html . Что касается создания базы данных, похоже, MySQL с тех пор отбросил это предложение.Вот быстрый способ создания сценария переименования SQL, если у вас есть много таблиц для перемещения.
источник
ALTER DATABASE
предложенный способ обойти это MySQL иRENAME DATABASE
отброшен.С 13.1.32 СМЕНА БАЗЫ ДАННЫХ RENAME :
Этот оператор был добавлен в MySQL 5.1.7, но он был признан опасным и был удален в MySQL 5.1.23.
источник
alter database
для переименования базы данных, и документация, на которую вы ссылались, не предполагает, что это возможно.В MySQL Administrator сделайте следующее:
источник
в phpmyadmin вы можете легко переименовать базу данных
попросить удалить старую таблицу и перезагрузить данные таблицы, нажмите OK в обоих
Ваша база данных переименована
источник
Если вы используете phpMyAdmin, вы можете перейти на вкладку «Операции», выбрав базу данных, которую вы хотите переименовать. Затем перейдите к последнему разделу «Копировать базу данных» (или что-то в этом роде), введите имя и выберите параметры ниже. В этом случае, я думаю, вы должны установить флажки «структура и данные» и «создать базу данных перед копированием» и, наконец, нажать кнопку «Перейти» в этом разделе.
Кстати, я использую phpMyAdmin на испанском языке, поэтому я не уверен, какие названия разделов на английском языке.
источник