wie man eine entfernte Datenbank von einem lokalen Computer aus mysqldump

177

Ich muss einen mysqldump einer Datenbank auf einem Remote-Server ausführen, aber auf dem Server ist mysqldump nicht installiert. Ich möchte den mysqldump auf meinem Computer verwenden, um eine Verbindung zur entfernten Datenbank herzustellen und den Speicherauszug auf meinem Computer durchzuführen.

Ich habe versucht, einen SSH-Tunnel zu erstellen und dann den Speicherauszug zu erstellen, aber dies scheint nicht zu funktionieren. Ich habe es versucht:

ssh -f -L3310:remote.server:3306 user@remote.server -N

Der Tunnel wird mit Erfolg erstellt. Wenn ich mache

telnet localhost 3310

Ich bekomme einen Klappentext, der die richtige MySQL-Version des Servers anzeigt. Das Folgende scheint jedoch zu versuchen, eine lokale Verbindung herzustellen

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name
Mauritz Hansen
quelle
9
Da diese Frage mehr mit der Verwaltung als mit der Programmierung zu tun hat , würde ich sagen, dass die freundlichen Mitarbeiter von serverfault.com Ihnen besser helfen könnten.
Piskvor verließ das Gebäude am
Schauen Sie sich MSQL WorkBench 5.2.22 an. Dies wird Ihnen leicht erlauben, dies zu tun.
Gary
1
HINWEIS: Um einen Remote-MySQL-Server zu sichern, geben Sie bitte --host = sqlserver.host.name --port = 3306
ro0ter
Ich stimme dafür, diese Frage als nicht zum Thema gehörend zu schließen, da sie zu DBA gehört
Marquis of Lorne

Antworten:

244

Da ich es bei Serverfault noch nicht gesehen habe und die Antwort ganz einfach ist:

Veränderung:

ssh -f -L3310:remote.server:3306 user@remote.server -N

Zu:

ssh -f -L3310:localhost:3306 user@remote.server -N

Und ändern:

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name

Zu:

mysqldump -P 3310 -h 127.0.0.1 -u mysql_user -p database_name table_name

(Verwenden Sie nicht localhost, es ist einer dieser Unsinns mit besonderer Bedeutung, der wahrscheinlich eher über den Socket als über den Port verbunden wird.)

edit : Nun, um es näher zu erläutern: Wenn Host auf eingestellt ist, localhostwird eine konfigurierte (oder Standard-) --socketOption angenommen. Siehe das Handbuch, für das Optionsdateien gesucht / verwendet werden. Unter Windows kann dies eine Named Pipe sein.

Wrikken
quelle
3
Achtung: localhostStandardmäßig wird standardmäßig ::1IPv6 verwendet, nicht 127.0.0.1.
polkovnikov.ph
112

Man kann mysqldump lokal für einen Remote-Server aufrufen.

Beispiel, das bei mir funktioniert hat:

mysqldump -h hostname-of-the-server -u mysql_user -p database_name > file.sql

Ich habe die mysqldump- Dokumentation zu den Verbindungsoptionen befolgt .

Ondrej Burkert
quelle
9
Sie müssen den SSH-Tunnel nicht mehr öffnen. +1
Lerner
1
Im einfachsten Fall müssen Sie keine Verbindung über ssh herstellen und die Datei auf Ihren lokalen Computer zurückbringen! Bringen Sie einfach die Müllkippe direkt!
TheGabyRod
3
das ist gefährlich, sehr gefährlich. Es erfordert, dass der Port von MySQL für die Öffentlichkeit zugänglich ist. das kann leicht brutal von Bots gezwungen werden.
volkovmqx
5
Wie wäre es mit einem VPN? Oder machen Sie einen Dump von einem Computer, auf den Sie SSHed haben und der Zugriff auf den Datenbankcomputer hat? Der Hafen muss nicht öffentlich sein.
Ondrej Burkert
3
Es ist wichtig, sich hier daran zu erinnern, dass dies -pfür das Kennwortargument gilt - nicht für den Datenbanknamen. Es ist jedoch unsicher, es im Klartext zu speichern. Wenn -pSie also hinzufügen , werden Sie beim Anmelden zur Eingabe des Kennworts aufgefordert. Vielleicht bin ich es nur, aber die mysqlund damit die mysqlDump-Syntax war in Bezug auf Befehlszeilenargumente nie so einfach.
anon58192932
0

Bassed auf dieser Seite hier:

Vergleichen Sie zwei MySQL-Datenbanken

Ich habe es so geändert, dass Sie ddbb auf verschiedenen Hosts verwenden können.

#! / bin / sh

echo "Verwendung: dbdiff [Benutzer1: Pass1 @ Datenbankname1: Host] [Benutzer2: Pass2 @ Datenbankname2: Host] [Ignoriertabelle1: Ignoriertabelle2 ...]"

dump () {
  up = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %%: *}; pass = $ {up ## *:}; Datenbankname = $ {down %%: *}; host = $ {down ## *:};
  mysqldump --opt --compact --skip-extended-insert -u $ user -p $ pass $ Datenbankname -h $ host $ table> $ 2
}}

rm -f /tmp/db.diff

# Vergleichen Sie
up = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %%: *}; pass = $ {up ## *:}; Datenbankname = $ {down %%: *}; host = $ {down ## *:};
für Tabelle in `mysql -u $ user -p $ pass $ dbname -h $ host -N -e" show tables "--batch`; machen
  if ["` echo $ 3 | grep $ table` "=" "]; dann
    echo "Vergleichen von '$ table' ..."
    dump $ 1 /tmp/file1.sql
    dump $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  sonst
    echo "'$ table' ignoriert ..."
  fi
getan
weniger /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql
Eduard Pertíñez
quelle
0

mysqldump vom Remote-Server verwendet SSL

1- Sicherheit mit SSL

192.168.0.101 - Remote-Server

192.168.0.102 - lokaler Server

Server wiederherstellen

CREATE USER 'backup_remote_2'@'192.168.0.102' IDENTIFIED WITH caching_sha2_password BY '3333333' REQUIRE SSL;

GRANT ALL PRIVILEGES ON *.* TO 'backup_remote_2'@'192.168.0.102';

FLUSH PRIVILEGES;

- -

Lokaler Server

sudo /usr/local/mysql/bin/mysqldump \
 --databases test_1 \
 --host=192.168.0.101 \
 --user=backup_remote_2 \
 --password=3333333 \
 --master-data \
 --set-gtid-purged \
 --events \
 --triggers \
 --routines \
 --verbose \
 --ssl-mode=REQUIRED \
 --result-file=/home/db_1.sql

===================================

2 - Sicherheit mit SSL (REQUIRE X509)

192.168.0.101 - Remote-Server

192.168.0.102 - lokaler Server

Server wiederherstellen

CREATE USER 'backup_remote'@'192.168.0.102' IDENTIFIED WITH caching_sha2_password BY '1111111' REQUIRE X509;

GRANT ALL PRIVILEGES ON *.* TO 'backup_remote'@'192.168.0.102';

FLUSH PRIVILEGES;

- -

Lokaler Server

sudo /usr/local/mysql/bin/mysqldump \
 --databases test_1 \
 --host=192.168.0.101 \
 --user=backup_remote \
 --password=1111111 \
 --events \
 --triggers \
 --routines \
 --verbose \
 --ssl-mode=VERIFY_CA \
 --ssl-ca=/usr/local/mysql/data/ssl/ca.pem \
 --ssl-cert=/usr/local/mysql/data/ssl/client-cert.pem \
 --ssl-key=/usr/local/mysql/data/ssl/client-key.pem \
 --result-file=/home/db_name.sql

[Hinweis]

Auf lokalem Server

/ usr / local / mysql / data / ssl /

-rw------- 1 mysql mysql 1.7K Apr 16 22:28 ca-key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28 ca.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28 client-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28 client-key.pem

Kopieren Sie diese Dateien vom Remote-Server für (REQUIRE X509) oder wenn SSL ohne (REQUIRE X509) nicht kopiert wird


Auf dem Remote-Server

/ usr / local / mysql / data /

-rw------- 1 mysql mysql 1.7K Apr 16 22:28  ca-key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  ca.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  client-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  client-key.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  private_key.pem
-rw-r--r-- 1 mysql mysql  451 Apr 16 22:28  public_key.pem
-rw-r--r-- 1 mysql mysql 1.1K Apr 16 22:28  server-cert.pem
-rw------- 1 mysql mysql 1.7K Apr 16 22:28  server-key.pem

my.cnf

[mysqld]
# SSL
ssl_ca=/usr/local/mysql/data/ca.pem
ssl_cert=/usr/local/mysql/data/server-cert.pem
ssl_key=/usr/local/mysql/data/server-key.pem

Erhöhen Sie die Passwortsicherheit

https://dev.mysql.com/doc/refman/8.0/en/password-security-user.html

Юрий Светлов
quelle