Wie kann ich eine MySQL-Datenbank sichern, die auf einem Remote-Server ausgeführt wird? Ich muss die Sicherungsdatei auf dem lokalen PC speichern.
Antworten:
Probieren Sie es mit Mysqldump
#mysqldump --host=the.remotedatabase.com -u yourusername -p yourdatabasename > /User/backups/adump.sql
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 -p
Flag 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.
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:
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.
mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DB_NAME'" when using LOCK TABLES
, aber die Verwendung der --single-transaction
Option in mysqldump
löste mein Problem.
mysqldump -h [domain name/ip] -u [username] -p[password] [databasename] > [filename.sql]
-p[password]
und nicht -p [password]
?
-p'pa$$w0rd!!!!'
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