Задавайте вопросы, мы ответим
Вы не зашли.
http://dev.mysql.com/doc/refman/5.1/en/ … abase.html
RENAME {DATABASE | SCHEMA} db_name TO new_db_name;
This statement was added in MySQL 5.1.7 but was found to be dangerous and was removed in MySQL 5.1.23.
И как теперь базы переименовывать?
Неактивен
Остановить MySQL переименовать каталог, запустить MySQL. Лучше не переимновывать, а сохранить старое название и создать символическую ссылку.
Неактивен
Понятно..
Я так и не понял, почему они эту возможность убрали. Что за идиотизм..
Неактивен
Каталоги переименовывать опасно. Например, с innodb_file_per_table это
гарантирует, что таблички не подцепятся. И именно поэтому rename database
выкинули — это опасная операция.
Неактивен
Я бы понял, если бы они именно поэтому RENAME DATABASE исправили, а не выкинули
Неактивен
Ммм.. Миш, ну как тут объяснить. Пусть у тебя в руках есть циркулярная пила
большого диаметра. Она большая, тяжелая и крутится быстро. Аналогом RENAME
DATABASE в этом примере будет тяжелый маховик, который приделывается к
лезвию для того, чтобы снизить нагрузку на двигатель, когда ты вдруг начинаешь
пилить толстый бетонный столб. Но, если ты когда-нибудь держал маховик в ру-
ках, ты знаешь, что один неудачный поворот — и эта штука движется совсем не
туда, куда ты хочешь. А если это насажено на циркулярную пилу, оно тебе в
лучшем случае обрезает ноги, а в худшем — голову. И правильное решение тут
не доработать конструкцию маховика, а оторвать его совсем
Неактивен
Зато бетонные столбы теперь не спилить, а только выкапывать
В общем, как я понял, порядок действий такой:
1) Каталог переименовать
2) UPDATE mysql.db SET Db = 'newname' WHERE Db = 'oldname';
Что еще? Ничего не забыл?
Да, это для муисамной базы. А как быть с InnoDB?
Неактивен
Брр, зачем же ты раскручиваешь циркулярку веревкой? Второй пункт — дикое
непотребное зло, срочно сотри его
mysqldump | mysql — единственный правильный способ переименовывать базы,
содержащие innodb. И mysqlhotcopy — если все таблички MyISAM.
Неактивен
Э, погоди. Мы щас именно о переименовании говорим.
mysqldump | mysql - это копирование.
Копирование отличается от переименования тем, что:
1. Все выданные на старую базу права придется выдавать заново на новую
2. Если база больших размеров, то это займет дофига системных ресурсов вообще.
Так что, выходит, именно переименовать вообще никак нельзя?
Неактивен
Нет, нельзя.
Неактивен
CREATE DATABASE `test2` /*!40100 COLLATE 'latin1_swedish_ci' */;
RENAME TABLE `test1`.`table1` TO `test2`.`table1`, `test1`.`table2` TO `test2`.`table2`, `test1`.`table3` TO `test2`.`table3`;
DROP DATABASE `test1`;
например. Если нет триггеров, функций и т.д. а только таблички
Неактивен
Прикольно, про такое решение не думали
Неактивен
paulus написал:
И правильное решение тут не доработать конструкцию маховика, а оторвать его совсем
Вот тут я с Вами не согласен. Иногда все-таки лучше доработать, чем оторвать. Принцип "ломать не строить" далеко не всегда бывает правилен. Оторвать - дело не хитрое, но иногда и подумать бывает неплохо...
Неактивен