Verwendung des MySQL-Dumps von einem Remotecomputer

73

Wie kann ich eine MySQL-Datenbank sichern, die auf einem Remote-Server ausgeführt wird? Ich muss die Sicherungsdatei auf dem lokalen PC speichern.

Harsha
quelle

Antworten:

80

Probieren Sie es mit Mysqldump

#mysqldump --host=the.remotedatabase.com -u yourusername -p yourdatabasename > /User/backups/adump.sql
CloudyMarble
quelle
1
Um diesen Befehl zu verwenden, sollten wir den Zugriff von Remote auf dem MySQL-Server aktivieren.
Gspoon
@Gspoon Ja, es stellt wie jeder andere Client eine Verbindung vom Computer, auf dem es ausgeführt wird, zum Server her.
Alejandro
55

Haben Sie Zugang zu SSH?

Mit diesem Befehl in der Shell können Sie eine gesamte Datenbank sichern:

mysqldump -u [username] -p[password] [databasename] > [filename.sql]

Dies ist tatsächlich ein Befehl, dem der >Operator folgt : "Nehmen Sie die Ausgabe des vorherigen Befehls und speichern Sie ihn in dieser Datei."

Hinweis: Das Fehlen eines Leerzeichens zwischen -p und dem MySQL-Passwort ist kein Tippfehler. Wenn Sie jedoch das -pFlag vorhanden lassen, das tatsächliche Kennwort jedoch leer ist, werden Sie zur Eingabe Ihres Kennworts aufgefordert. Manchmal wird dies empfohlen, um Passwörter aus Ihrem Bash-Verlauf herauszuhalten.

Ian Jamieson
quelle
9
Mann mysql: Wenn Sie die Kurzform der Option (-p) verwenden, Sie können nicht einen haben Raum zwischen der Option und dem Passwort ein .
Tanky Woo
3
Gute Erklärung für das "Leerzeichen" zwischen -p und dem eigentlichen Passwort
okey_on
1
Wenn Sie SSH verwenden, sollten Sie die Verwendung von SCP oder SFTP erwähnen, um die Dump-Datei auf dem lokalen PC zu speichern, wie in der Frage gestellt
izzulmakin
Sie sollten sicherstellen, dass in der Firewall-Einstellung der 3306-Port für TCP geöffnet ist.
Gspoon
41

Niemand erwähnt etwas über die Option --single-transaction . Benutzer sollten es standardmäßig für InnoDB-Tabellen verwenden, um die Datenkonsistenz sicherzustellen. In diesem Fall:

mysqldump --single-transaction -h [remoteserver.com] -u [username] -p [password] [yourdatabase] > [dump_file.sql]

Dadurch wird sichergestellt, dass der Speicherauszug in einer einzelnen Transaktion ausgeführt wird, die von den anderen isoliert ist, wodurch die Sicherung einer Teiltransaktion verhindert wird.

Angenommen, Sie haben einen Spieleserver, auf dem Benutzer mit ihrem Kontoguthaben Zahnräder kaufen können. Es gibt im Wesentlichen zwei Operationen gegen die Datenbank:

  1. Ziehen Sie den Betrag von ihrem Guthaben ab
  2. Fügen Sie die Ausrüstung ihrem Arsenal hinzu

Wenn der Speicherauszug zwischen diesen Vorgängen erfolgt, führt das nächste Mal, wenn Sie die Sicherung wiederherstellen, dazu, dass der Benutzer das gekaufte Element verliert, da der zweite Vorgang nicht in der SQL-Speicherauszugsdatei gespeichert wird.

Obwohl dies nur eine Option ist , gibt es im Grunde keinen Grund, warum Sie diese Option nicht mit mysqldump verwenden.

datasn.io
quelle
1
Ausgezeichnet! Danke, Mann. Ich hatte MySQL-Zugriff auf Remote-Server, konnte aber keine DBs sichern. Der Fehler war mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DB_NAME'" when using LOCK TABLES, aber die Verwendung der --single-transactionOption in mysqldumplöste mein Problem.
Ali Yousefi Sabzevar
20

Dieses Thema wird auf der ersten Seite meines Google-Ergebnisses angezeigt. Hier ist ein kleiner nützlicher Tipp für Neuankömmlinge.

Sie können die SQL auch ausgeben und in einer Zeile gzipen:

mysqldump -u [username] -p[password] [database_name] | gzip > [filename.sql.gz]
Unnawut
quelle
3
mysqldump -h [domain name/ip] -u [username] -p[password] [databasename] > [filename.sql]
Artjom B.
quelle
3
Ist es wirklich -p[password]und nicht -p [password]?
Artjom B.
4
@ArtjomB. Ja, und wenn Ihr Passwort Sonderzeichen enthält, setzen Sie es in Anführungszeichen:-p'pa$$w0rd!!!!'
Ryan Taylor
1

Versuchte alle Kombinationen hier, aber das hat bei mir funktioniert:

mysqldump -u root -p --default-character-set=utf8mb4 [DATABASE TO BE COPIED NAME] > [NEW DATABASE NAME]
jsibs
quelle
-4

Auf diese Weise würden Sie eine Sicherung wiederherstellen, nachdem Sie Ihre SQL-Datei erfolgreich gesichert haben

mysql -u [username] [databasename]

Und wählen Sie Ihre SQL-Datei mit diesem Befehl:

source MY-BACKED-UP-DATABASE-FILE.sql
Nico
quelle
3
Das ist , wie Sie wiederherstellen eine Sicherung, nicht , wie Sie eines erstellen.
Quentin