it-swarm.com.de

Stellen Sie die MySQL-Datenbank mit einem anderen Namen wieder her

Wie können wir die MySQL-Datenbank mit einem anderen Namen als die MySQL-Datei wiederherstellen? Ich möchte die Dump-Datei nicht öffnen und bearbeiten. Irgendwelche anderen besseren Methoden?

42

Sie können den Speicherauszug von mysqldump so erstellen lassen, dass die Datenbank nicht erstellt oder ausgewählt wird.

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

Dies wird nicht in die CREATE DATABASE und die USE-Befehle in den Dump ( dies ist, was Sie wollen )

mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql

Sie können es auf eine von vier (4) Arten in eine andere Datenbank (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

$ 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 !!!

60
RolandoMySQLDBA

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 möchten MYDATABASE.

mysqldump MYDATABASE > mydump.sql

verwenden Sie dann sed, um den alten Datenbanknamen durch einen neuen zu ersetzen

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

dann können Sie einfach die neue Datenbank erstellen und erneut importieren, und es werden alle Tabellen mit in der neuen Datenbank MYNEWDATABASE erstellt. '

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

Bearbeiten: Wie einige nette Leute im Kommentarbereich darauf hingewiesen haben, kann dies gefährlich sein, wenn einige der Daten auch dadurch oben geändert werden, um Wege zu finden, um dies zu vermeiden.

1) Grep dafür in der Müllkippe, bevor du es so änderst.

cat mydump.sql | grep "MYDATABASE"

und

2) Wir können einige hinzufügen, um es sicherer zu machen:

sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql

wenn jemand andere konkrete Vorschläge hat, kann ich meine Antwort gerne in weiteren 4 Jahren bearbeiten.

7
Sverre

Wenn die Datei das ist, was Sie in der Hand haben und Sie sie von einer Shell/Konsole aus bearbeiten, würde ich sed verwenden, um Zeichenfolgen in Zeilen zu ersetzen, die mit CREATE DABATASE, CREATE TABLE Beginnen. , USE und optional -- (mysqldump Kommentare)

Ersetzen des Datenbanknamens in Zeilen, die den Kommentaren Datenbank erstellen, Tabelle erstellen, Verwenden und mysqldump entsprechen

dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile


Natürlich ist es, wie viele der hier erwähnten Antworten, einfacher, wenn das mysqldump-Backup keine CREATE DATABASE und keine USE-Zeile enthielt. Das heißt, die Optionen --all-databases, --databases Oder deren Kurzversionen -A Oder -B Wurden nicht verwendet.

3
bksunday

Ich habe das schon vor langer Zeit einmal gemacht.

Wenn Sie alle Ihre Daten exportieren, können Sie den Datenbanknamen am Anfang der Datei festlegen, z. B.: "Datenbank x verwenden"

Sie können diese Deklaration also ändern.

3
Victor

Wenn Sie einen Dump nach den folgenden zwei Regeln durchführen:

  1. Verwenden Sie keine Optionen wie --databases, --database und setzen Sie einfach den Datenbanknamen ohne diese Optionen am Ende des Befehls ein.
  2. Fügen Sie die Option --no-create-db

Wenn Sie Folgendes tun, erstellt mysqldump die SQL, ohne auf die Datenbank zu verweisen. Sie können dann den neuen Datenbanknamen am Ende Ihres mysql-Befehls während des Imports verwenden!

mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --Host old_db_Host -u old_db_user -pOld_db_password | mysql --Host new_Host -u new_user -pnewpassword new_db_name
2
Neo

Hier ist das Shell-Skript, mit dem Sie allen Schemanamen im laufenden Betrieb Suffix/Affix hinzufügen können.

http://snippets.dzone.com/posts/show/13749

1
shantanuo