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?
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 !!!
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.
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.
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.
Wenn Sie einen Dump nach den folgenden zwei Regeln durchführen:
--databases
, --database
und setzen Sie einfach den Datenbanknamen ohne diese Optionen am Ende des Befehls ein.--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
Hier ist das Shell-Skript, mit dem Sie allen Schemanamen im laufenden Betrieb Suffix/Affix hinzufügen können.