В някои случаи може да е желателно бързо да се промени името на MySQL база данни. Докато съществуваше просто RENAME DATABASE
команда в по-стари версии на MySQL, която е предназначена да изпълни тази задача, RENAME DATABASE
оттогава е премахнат от всички по-нови версии, за да се избегнат рискове за сигурността.
Вместо това ще разгледаме накратко няколко незадължителни методи, които могат да се използват за бързо и безопасно преименуване на вашата MySQL база данни.
Изхвърляне и повторно импортиране
Когато работите с относително малка база данни, най-бързият метод обикновено е да използвате mysqldump
shell, за да създадете изхвърлено копие на цялата база данни, след което импортирайте всички данни в новосъздадената база данни с правилното име.
Започнете с издаване на следния mysqldump
команда от подканата на вашата обвивка, като замените подходящото username
, password
и oldDbName
стойности. mysqldump
се използва за създаване на физически резервни копия на база данни, така че можем да използваме това копие, за да импортираме данните обратно в нова база данни.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Използваме -p
флаг, непосредствено последван от нашата парола, за да се свържете с базата данни (без интервал между тях) и да избегнете подкани за въвеждане на парола при издаване на тези команди. Не забравяйте да оставите заобикалящите цитати, защото паролите с уникални знаци в противен случай могат да причинят проблеми с изпълнението. -R
флагът също е важен и казва на mysqldump
да копирате съхранени процедури и функции заедно с нормалните данни от базата данни.
След това използвайте mysqladmin
команда за създаване на нова база данни:
$ mysqladmin -u username -p"password" create newDbName
И накрая, със създадената нова база данни, използвайте mysql
за да импортирате дъмп файла, който създадохме в новата база данни.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Три основни команди и вашата нова база данни е създадена. След като потвърдите, че всичко е според предназначението, можете да продължите с премахването на старата база данни.
Преименуване на таблици с InnoDB
Ако използвате MySQL версия 5.5 (или по-нова), вероятно използвате механизма за съхранение InnoDB, което прави задачата за преименуване на бази данни доста проста.
Накратко, можете да използвате RENAME TABLE
команда в подканата на MySQL, за да промените ефективно името на базата данни на конкретна таблица, като се запази името на таблицата непокътнато. Това обаче изисква базата данни с новото име вече да съществува, така че започнете със създаване на нова база данни с помощта на mysqladmin
shell команда, както се вижда по-горе.
Например, ако вече имаме catalog
база данни, която искаме да преименуваме на library
, първо ще създадем новата library
база данни:
$ mysqladmin -u username -p"password" create library
Сега се свържете с mysql
подканете и издадете следния MySQL RENAME TABLE
изявление за таблица по ваш избор:
mysql> RENAME TABLE catalog.books TO library.books;
Току-що преместихме всички books
таблица от catalog
база данни към нашата нова library
база данни. Тази команда може да се изпълни ръчно за всички съответни таблици, както желаете, или можем да опростим задачата с шел скрипт, както се вижда по-долу.
Използване на команден скрипт на Shell
За всички бази данни с изключение на най-малките, ръчно издаване на RENAME TABLE
командите за всяка таблица няма да бъдат много практични или ефективни, но за щастие можем да използваме проста команда на обвивката, използвайки mysql
помощна програма, за да прегледате всички таблици в нашата стара база данни и да ги преименувате, като по този начин ги преместите в новата база данни.
Това е основната структура на командата:
$ mysql -u dbUsername -p"dbPassword" oldDatabase -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE oldDatabase.$table TO newDatabase.$table"; done
По този начин, за нашия преход от стария catalog
база данни към новата library
база данни, бихме променили изявлението, както следва:
$ mysql -u dbUsername -p"dbPassword" catalog -sNe 'show tables' | while read table; do mysql -u dbUsername -p"dbPassword" -sNe "RENAME TABLE catalog.$table TO library.$table"; done
Добавихме и няколко флага към нашите команди:
-s
е флагът заsilent mode
така че има по-малко изход към обвивката.-N
предотвратява извеждането на имена на колони от резултатите.-e
обозначава израза, който следва-e
флагът трябва да се изпълни след това обвивката е изключена. Това означава изразите'show tables'
и"RENAME TABLE catalog.$table TO library.$table"
се изпълняват като нормални SQL оператори, както желаете.
Това е всичко. Вашата MySQL база данни вече е ефективно преименувана.