Jak możemy przywrócić bazę danych mysql o innej nazwie niż plik mysqldump. Nie chcę otwierać pliku zrzutu i edytować go. Jakieś inne lepsze metody?
41
Możesz pozwolić mysqldump utworzyć zrzut w taki sposób, aby nie tworzył ani nie wybierał bazy danych.
PRZYKŁAD: Zrzucasz bazę danych db1 i ładujesz ją do bazy danych db2
Spowoduje to wstawienie poleceń CREATE DATABASE i USE do zrzutu
mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql
Nie spowoduje to wstawienia poleceń CREATE DATABASE i USE do zrzutu ( to jest to, czego chcesz )
mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
Możesz załadować go do innej bazy danych (np. Db2) na jeden z czterech (4) sposobów:
OPCJA 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
OPCJA 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
OPCJA 3
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql
OPCJA 4
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql
Spróbuj !!!
-Ddb2
nie powinien mieć przed nim myślnika. Przynajmniej dostałem błąd składni MySQL, gdy go załączyłem.ALTER DATABASE ... CHARACTER SET ...
, które psują import. Edycja: Oracle zasadniczo ignoruje błąd .Jestem wielkim fanem zrzutu, edycji i wstawiania. ale nie trzeba otwierać pliku tekstowego (pliku zrzutu), aby go zmienić (jest to szczególnie przydatne, gdy ma on kilka milionów linii). jeśli chcesz zrzucić bazę danych
MYDATABASE
.następnie użyj sed, aby zastąpić starą nazwę bazy danych nową taką jak ta
możesz po prostu utworzyć nową bazę danych i zaimportować ją ponownie, a wszystkie tabele zostaną utworzone w nowej bazie danych MYNEWDATABASE ”
Edycja: Jak zauważyli niektórzy mili ludzie w sekcji komentarzy, może to być niebezpieczne, jeśli niektóre dane zostaną również zmienione powyżej, więc wymyślenie sposobów na uniknięcie tego jest.
1) Grep za to na wysypisku, zanim to zmienisz, w ten sposób.
i
2) możemy dodać trochę `, aby było bezpieczniej:
jeśli ktoś ma konkretne sugestie, chętnie zredaguję swoją odpowiedź za kolejne 4 lata.
źródło
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
) sprawdza wszystkie wystąpień o MyDatabase zcat mydump.sql | grep "MYDATABASE"
upewnić się tylko nazwa bazy danych zostanie zmieniona, inne dane pozostają nietknięte.sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# potencjalnie bezpieczniejsza edycja Steam. mój zrzut bazy danych nie zawiera żadnych instrukcji USE lub CREATE DATABASE, ale nazwa db znajduje się w komentarzach, widokach i wyzwalaczach SQL (MySQL 5.7). To NIE zastępuje nazwy bazy danych w komentarzach, ale nie ma to wpływu na wynikową bazę danych. To działało dobrze dla mnie.Zrobiłem to raz, dawno temu.
Podczas eksportowania wszystkich danych istnieje możliwość ustawienia nazwy bazy danych na początku pliku, na przykład: „użyj bazy danych x”
Możesz więc zmienić tę deklarację.
źródło
Jeśli plik jest to, co masz w ręku, a ty manipulujesz go z powłoki / konsoli, użyłbym
sed
zrobić zamienniki ciąg na linii zaczynającCREATE DABATASE
,CREATE TABLE
,USE
a optionnally--
(komentarze mysqldump)Zastępowanie nazwy db w wierszach pasujących do opcji Utwórz bazę danych, Utwórz tabelę, Użyj i mysqldump
Oczywiście, jak wspomina wiele odpowiedzi tutaj, łatwiej jest, jeśli kopia zapasowa mysqldump nie zawierała instrukcji CREATE DATABASE i USE. Znaczenie opcji
--all-databases
,--databases
lub ich krótkie wersje-A
lub-B
nie zostały wykorzystane.źródło
--no-create-db
bez--database
lub--databases
.Jeśli wykonasz zrzut przy użyciu następujących dwóch reguł:
--databases
,--database
i po prostu wystarczy umieścić nazwę bazy danych na końcu polecenia bez tych opcji.--no-create-db
Jeśli wykonasz następujące czynności, mysqldump utworzy kod SQL bez odwoływania się do bazy danych, wtedy możesz użyć nowej nazwy bazy danych na końcu polecenia mysql podczas importowania!
źródło
--no-create-db
bez--database
lub--databases
.Oto skrypt powłoki, który pozwoli Ci dodawać sufiks / afiks do wszystkich nazw schematów w locie.
http://snippets.dzone.com/posts/show/13749
źródło