V některých případech může být žádoucí rychle změnit název databáze MySQL. Zatímco dříve existoval jednoduchý RENAME DATABASE
příkaz ve starších verzích MySQL, který byl určen k provedení této úlohy, RENAME DATABASE
byl od té doby odstraněn ze všech novějších verzí, aby se předešlo bezpečnostním rizikům.
Místo toho stručně prozkoumáme několik volitelných metod, které lze použít k rychlému a bezpečnému přejmenování vaší databáze MySQL.
Dumping a zpětný import
Při práci s relativně malou databází je obvykle nejrychlejší metodou použití mysqldump
příkaz shell k vytvoření výpisu kopie celé databáze, poté importujte všechna data do nově vytvořené databáze se správným názvem.
Začněte vydáním následujícího mysqldump
příkaz z příkazového řádku, který nahradí příslušné username
, password
a oldDbName
hodnoty. mysqldump
se používá k vytváření fyzických záloh databáze, takže tuto kopii můžeme použít k importu dat zpět do nové databáze.
$ mysqldump -u username -p"password" -R oldDbName > oldDbName.sql
Používáme -p
příznak bezprostředně následovaný naším heslem pro připojení k databázi (bez mezery mezi nimi) a vyhnout se výzvám k zadání hesla při vydávání těchto příkazů. Nezapomeňte ponechat okolní uvozovky, protože hesla s jedinečnými znaky mohou jinak způsobit problémy se spuštěním. -R
příznak je také důležitý a říká mysqldump
kopírovat uložené procedury a funkce spolu s normálními daty z databáze.
Dále použijte mysqladmin
příkaz k vytvoření nové databáze:
$ mysqladmin -u username -p"password" create newDbName
Nakonec s novou databází použijte mysql
importovat soubor výpisu, který jsme vytvořili, do nové databáze.
$ mysql -u username -p"password" newDbName < oldDbName.sql
Tři základní příkazy a vaše nová databáze byla vytvořena. Jakmile ověříte, že je vše v pořádku, můžete pokračovat v odstraňování staré databáze.
Přejmenování tabulek pomocí InnoDB
Pokud používáte MySQL verze 5.5 (nebo vyšší), pravděpodobně používáte úložiště InnoDB, díky kterému je přejmenování databází docela jednoduché.
Stručně řečeno, můžete použít RENAME TABLE
příkaz v rámci výzvy MySQL k efektivní změně názvu databáze konkrétní tabulky při zachování názvu tabulky beze změny. To však vyžaduje, aby databáze s novým názvem již existovala, takže začněte vytvořením nové databáze pomocí mysqladmin
příkaz shell, jak je vidět výše.
Například pokud již máme catalog
databázi, kterou chceme přejmenovat na library
, nejprve bychom vytvořili novou library
databáze:
$ mysqladmin -u username -p"password" create library
Nyní se připojte k mysql
a zadejte následující MySQL RENAME TABLE
výpis pro tabulku dle vašeho výběru:
mysql> RENAME TABLE catalog.books TO library.books;
Právě jsme přesunuli celé books
tabulky z catalog
databáze do naší nové library
databáze. Tento příkaz lze podle potřeby provést ručně pro všechny relevantní tabulky, nebo můžeme úlohu zjednodušit pomocí skriptu shellu, jak je vidět níže.
Použití příkazového skriptu Shell
Pro všechny databáze kromě nejmenších ručně zadejte RENAME TABLE
příkazy pro každou tabulku nebudou příliš praktické ani efektivní, ale naštěstí můžeme použít jednoduchý příkaz shell pomocí mysql
nástroj pro procházení všech tabulek v naší staré databázi a jejich přejmenování, čímž je přesunete do nové databáze.
Toto je základní struktura příkazu:
$ 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
Tedy pro náš přechod ze starého catalog
databáze do nové library
databázi, změnili bychom prohlášení následovně:
$ 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
Do našich příkazů jsme také přidali několik příznaků:
-s
je příznak prosilent mode
takže je méně výstupu do shellu.-N
zabraňuje výstupu názvů sloupců z výsledků.-e
označuje příkaz, který následuje za-e
příznak by měl být spuštěn pak se shell opustí. To znamená příkazy'show tables'
a"RENAME TABLE catalog.$table TO library.$table"
jsou podle potřeby prováděny jako normální příkazy SQL.
To je vše. Vaše databáze MySQL je nyní efektivně přejmenována.