come mysqldump db remoto dalla macchina locale


177

Ho bisogno di fare un mysqldump di un database su un server remoto, ma sul server non è installato mysqldump. Vorrei usare mysqldump sulla mia macchina per connettermi al database remoto ed eseguire il dump sulla mia macchina.

Ho provato a creare un tunnel ssh e poi a fare il dump, ma questo non sembra funzionare. Provai:

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

Il tunnel è stato creato con successo. Se lo faccio

telnet localhost 3310

Ottengo un po 'di blurb che mostra la corretta versione mysql del server. Tuttavia, nel modo seguente sembra provare a connettersi localmente

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

9
Poiché questa domanda è più correlata all'amministrazione che alla programmazione, direi che le persone gentili su serverfault.com potrebbero aiutarti meglio.
Piskvor lasciò l'edificio il

Dai un'occhiata a MSQL WorkBench 5.2.22. Ti permetterà facilmente di farlo.
Gary,

1
NOTA: per scaricare un server mysql remoto, si prega di includere --host = sqlserver.host.name --port = 3306
ro0ter

Sto votando per chiudere questa domanda come fuori tema perché appartiene a DBA,
Marchese di Lorne,

Risposte:


244

Come non l'ho ancora visto su serverfault, e la risposta è abbastanza semplice:

Modificare:

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

Per:

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

E cambia:

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

Per:

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

(non usare localhost, è una di queste assurdità di "significato speciale" che probabilmente si connette per socket anziché per porta)

modifica : beh, per elaborare: se l'host è impostato su localhost, --socketsi presume un'opzione configurata (o predefinita) . Consultare il manuale per quali file di opzioni sono richiesti / utilizzati. In Windows, questa può essere una pipe denominata.


3
Attenzione: localhostspesso per impostazione predefinita è ::1IPv6 127.0.0.1.
polkovnikov.ph,

113

Si può invocare mysqldump localmente contro un server remoto.

Esempio che ha funzionato per me:

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

Ho seguito la documentazione di mysqldump sulle opzioni di connessione.


9
Non è più necessario aprire prima il tunnel ssh. +1
Studente

1
approccio più semplice, non è necessario connettersi tramite ssh e riportare il file sul computer locale! Basta portare direttamente la discarica!
theGabyRod

3
questo è pericoloso, molto pericoloso. richiede che il porto di mysql sia aperto al pubblico. che può essere facilmente forzato dai robot.
volkovmqx,

5
Che ne dici di essere in una VPN? O esegui un dump da una macchina in cui hai eseguito l'accesso che ha accesso alla macchina del database? La porta non deve essere pubblica.
Ondrej Burkert,

3
È importante ricordare qui che -pè per l'argomento password, non per il nome del database. Ma non è sicuro memorizzarlo in testo normale, quindi aggiungere -psignifica che ti verrà richiesta la password al momento dell'accesso. Forse sono solo io, ma la sintassi mysqldel mysqldump non è mai stata così semplice per quanto riguarda gli argomenti della riga di comando.
anon58192932

0

Basso su questa pagina qui:

Confronta due database MySQL

L'ho modificato in modo da poter usare ddbb in host diversi.

#! / Bin / sh

echo "Utilizzo: dbdiff [user1: pass1 @ dbname1: host] [user2: pass2 @ dbname2: host] [ignore_table1: ignore_table2 ...]"

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

rm -f /tmp/db.diff

# Confrontare
up = $ {1 %% @ *}; giù = $ {1} ## * @; user = $ {up %%: *}; pass = $ {up ## *:}; dbname = $ {giù %%: *}; host = $ {giù ## *:};
per la tabella in `mysql -u $ user -p $ pass $ dbname -h $ host -N -e" show tables "--batch`; fare
  if ["` echo $ 3 | grep $ table` "=" "]; poi
    echo "Confronto di '$ table' ..."
    dump $ 1 /tmp/file1.sql
    dump $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  altro
    echo "Ignorato '$ table' ..."
  fi
fatto
meno /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

mysqldump dal server remoto usa SSL

1- Sicurezza con SSL

192.168.0.101 - server remoto

192.168.0.102 - server locale

Remore server

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;

-

Server locale

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 - Sicurezza con SSL (REQUIRE X509)

192.168.0.101 - server remoto

192.168.0.102 - server locale

Remore server

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;

-

Server locale

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

[Nota]

Sul server locale

/ Usr / local / mysql / dati / 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

Copia questi file dal server remoto per (REQUIRE X509) o se SSL senza (REQUIRE X509) non viene copiato


Sul server remoto

/ 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

Aumenta la sicurezza della password

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.