cara mysqldump db jarak jauh dari mesin lokal

177

Saya perlu melakukan mysqldump database di server jauh, tetapi server tidak menginstal mysqldump. Saya ingin menggunakan mysqldump di komputer saya untuk terhubung ke basis data jauh dan melakukan dump pada mesin saya.

Saya telah mencoba membuat terowongan ssh dan kemudian melakukan dump, tetapi ini sepertinya tidak berhasil. Saya mencoba:

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

Terowongan itu dibuat dengan sukses. Jika aku melakukan

telnet localhost 3310

Saya mendapatkan beberapa uraian yang menunjukkan versi server mysql yang benar. Namun, melakukan hal berikut nampaknya mencoba untuk terhubung secara lokal

mysqldump -P 3310 -h localhost -u mysql_user -p database_name table_name
Mauritz Hansen
sumber
9
Karena pertanyaan ini lebih terkait dengan administrasi daripada pemrograman, saya katakan orang-orang baik di serverfault.com dapat membantu Anda lebih baik.
Piskvor meninggalkan gedung
Lihatlah MSQL WorkBench 5.2.22. Ini akan dengan mudah memungkinkan Anda untuk melakukan ini.
Gary
1
CATATAN: untuk membuang server mysql jarak jauh, harap sertakan --host = sqlserver.host.name --port = 3306
ro0ter
Saya memberikan suara untuk menutup pertanyaan ini sebagai di luar topik karena itu milik DBA,
Marquis of Lorne

Jawaban:

244

Karena saya belum melihatnya di serverfault, dan jawabannya cukup sederhana:

Perubahan:

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

Untuk:

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

Dan ubah:

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

Untuk:

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

(jangan gunakan localhost, ini adalah salah satu dari omong kosong 'makna khusus' yang mungkin terhubung dengan socket daripada oleh port)

sunting : well, untuk menguraikan: jika host diatur ke localhost, --socketopsi yang dikonfigurasi (atau default) diasumsikan. Lihat manual untuk file opsi mana yang dicari / digunakan. Di bawah Windows, ini bisa berupa pipa bernama.

Terkutuk
sumber
3
Awas: localhostsering default ke ::1IPv6, bukan 127.0.0.1.
polkovnikov.ph
113

Seseorang dapat memanggil mysqldump secara lokal terhadap server jauh.

Contoh yang berhasil untuk saya:

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

Saya mengikuti dokumentasi mysqldump tentang opsi koneksi.

Ondrej Burkert
sumber
9
Tidak perlu lagi membuka ssh tunnel sebelumnya. +1
Pelajar
1
pendekatan yang paling sederhana, tidak perlu terhubung melalui ssh dan membawa file kembali ke mesin lokal Anda! Bawa saja dumpnya langsung!
theGabyRod
3
ini berbahaya, sangat berbahaya. membutuhkan port mysql terbuka untuk umum. yang bisa dengan mudah dipaksa oleh bot.
volkovmqx
5
Bagaimana dengan VPN? Atau melakukan dump dari mesin Anda SSHed ke yang memiliki akses ke mesin database? Port tidak perlu bersifat publik.
Ondrej Burkert
3
Penting untuk diingat di sini -puntuk argumen kata sandi - bukan nama basis data. Tetapi tidak aman untuk menyimpannya dalam teks biasa sehingga menambahkan -pberarti Anda akan diminta untuk memasukkan kata sandi saat login. Mungkin itu hanya saya tetapi mysqldan dengan demikian mysqlsintaks dump tidak pernah begitu lurus sejauh argumen baris perintah.
anon58192932
0

Bassed pada halaman ini di sini:

Bandingkan dua database MySQL

Saya memodifikasinya sehingga Anda dapat menggunakan ddbb di host yang berbeda.

#! / bin / sh

echo "Penggunaan: dbdiff [user1: pass1 @ dbname1: host] [user2: pass2 @ dbname2: host] [ign_table1: ign_table2 ...]"

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

rm -f /tmp/db.diff

# Membandingkan
up = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %%: *}; pass = $ {up ## *:}; dbname = $ {down %%: *}; host = $ {down ## *:};
untuk tabel di `mysql -u $ user -p $ pass $ dbname -h $ host -N -e" tunjukkan tabel "--batch`; melakukan
  jika ["` echo $ 3 | grep $ table` "=" "]; kemudian
    echo "Membandingkan '$ table' ..."
    dump $ 1 /tmp/file1.sql
    dump $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  lain
    gema "Diabaikan '$ table' ..."
  fi
selesai
kurang /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql
Eduard Pertíñez
sumber
0

mysqldump dari server jarak jauh menggunakan SSL

1- Keamanan dengan SSL

192.168.0.101 - server jarak jauh

192.168.0.102 - server lokal

Pulihkan 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 lokal

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 - Keamanan dengan SSL (REQUIRE X509)

192.168.0.101 - server jarak jauh

192.168.0.102 - server lokal

Pulihkan 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 lokal

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

[Catatan]

Di server lokal

/ 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

Salin file ini dari server jauh untuk (REQUIRE X509) atau jika SSL tanpa (REQUIRE X509) jangan salin


Di server jarak jauh

/ 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

Tingkatkan Keamanan Kata Sandi

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

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