Wie können wir MySQL-Datenbank mit anderen Namen aus MySQL-Dump-Datei wiederherstellen. Ich möchte die Dump-Datei nicht öffnen und bearbeiten. Irgendwelche anderen besseren Methoden?
41
Sie können mysqldump den Dump so erstellen lassen, dass er die Datenbank nicht erstellt oder auswählt.
BEISPIEL: Sie sichern die Datenbank db1 und laden sie in die Datenbank db2
Dadurch werden die Befehle CREATE DATABASE und USE in den Speicherauszug eingefügt
mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql
Dadurch werden die Befehle CREATE DATABASE und USE nicht in den Dump eingefügt ( dies ist das, was Sie möchten ).
mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
Sie können es auf eine von vier (4) Arten in eine andere Datenbank (wie z. B. db2) laden:
OPTION 1
$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2
OPTION 2
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql
OPTION 3
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql
OPTION 4
$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql
Versuche es !!!
-Ddb2
sollte kein Bindestrich davor stehen. Zumindest habe ich einen MySQL-Syntaxfehler erhalten, als ich ihn eingefügt habe.ALTER DATABASE ... CHARACTER SET ...
, die meinen Import bricht. Bearbeiten: Oracle ignoriert den Fehler grundsätzlich .Ich bin ein großer Fan von Dump, Edit und Insert. Sie müssen die Textdatei (Dump-Datei) jedoch nicht öffnen, um sie zu ändern (dies ist besonders nützlich, wenn sie mehrere Millionen Zeilen lang ist). wenn Sie die Datenbank sichern wollen
MYDATABASE
.Verwenden Sie dann sed, um den alten Datenbanknamen durch einen neuen wie diesen zu ersetzen
dann können Sie einfach die neue Datenbank erstellen und erneut importieren, und es werden alle Tabellen mit in der neuen Datenbank MYNEWDATABASE erstellt. '
Edit: Wie einige nette Leute im Kommentarbereich hervorgehoben haben, kann dies gefährlich sein, wenn einige der Daten auch dadurch verändert werden, so dass konkrete Möglichkeiten bestehen, dies zu vermeiden.
1) Greife dazu in den Dump, bevor du ihn änderst.
und
2) Wir können einige hinzufügen, um es sicherer zu machen:
Wenn noch jemand konkrete Vorschläge hat, bearbeite ich meine Antwort gerne in weiteren 4 Jahren.
quelle
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
) ausführen, überprüfen Sie alle Vorkommen von MYDATABASE mitcat mydump.sql | grep "MYDATABASE"
, um sicherzustellen, dass nur der Datenbankname geändert wird. Andere Daten bleiben unberührt.sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# potenziell sicherer dampf bearbeiten. Mein Datenbank-Dump enthält keine USE- oder CREATE DATABASE-Anweisungen, aber der Datenbankname steht in SQL-Kommentaren, Ansichten und Triggern (MySQL 5.7). Dies ersetzt NICHT den Datenbanknamen in den Kommentaren, hat jedoch keine Auswirkungen auf die resultierende Datenbank. Das hat bei mir gut funktioniert.Das habe ich schon vor langer Zeit gemacht.
Wenn Sie alle Ihre Daten exportieren, können Sie den Datenbanknamen am Anfang der Datei wie folgt festlegen: "use database x"
Sie können diese Deklaration also ändern.
quelle
Wenn die Datei ist , was Sie in der Hand haben und Sie es von einer Shell / Konsole manipulieren, würde ich verwenden
sed
String Ersatz auf den Leitungen zu tun , beginnend mitCREATE DABATASE
,CREATE TABLE
,USE
und optionnally--
(mysqldump Kommentare)Ersetzen des Datenbanknamens in Zeilen, die den Kommentaren Create Database, Create Table, Use und mysqldump entsprechen
Wie in vielen Antworten erwähnt, ist es natürlich einfacher, wenn das mysqldump-Backup keine CREATE DATABASE- und keine USE-Zeile enthält. Bedeutung der Optionen
--all-databases
,--databases
oder die Kurzversionen-A
oder-B
nicht verwendet wurden.quelle
--no-create-db
und ohne--database
oder--databases
.Wenn Sie einen Dump nach den folgenden zwei Regeln ausführen:
--databases
,--database
und einfach nur den Namen der Datenbank ohne diese Optionen am Ende des Befehls gesetzt.--no-create-db
Wenn Sie folgendermaßen vorgehen, erstellt mysqldump die SQL, ohne auf die Datenbank zu verweisen, und Sie können den neuen Datenbanknamen am Ende Ihres mysql-Befehls während des Imports verwenden!
quelle
--no-create-db
und ohne--database
oder--databases
.Hier ist das Shell-Skript, mit dem Sie alle Schemanamen im Handumdrehen mit einem Suffix / Affix versehen können.
http://snippets.dzone.com/posts/show/13749
quelle