yerel makineden uzak db mysqldump nasıl


177

Uzak bir sunucuda bir veritabanı mysqldump yapmak gerekiyor, ancak sunucu mysqldump yüklü değil. Uzak veritabanına bağlanmak ve makinemdeki dökümü yapmak için makinemdeki mysqldump'ı kullanmak istiyorum.

Bir ssh tüneli oluşturmaya çalıştım ve sonra dökümü yaptım, ama bu işe yaramıyor gibi görünüyor. Denedim:

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

Tünel başarıyla oluşturuldu. Eğer yaparsam

telnet localhost 3310

Doğru sunucu mysql sürümünü gösteren bazı bulanıklık olsun. Ancak, aşağıdakileri yapmak yerel olarak bağlanmaya çalışıyor gibi görünüyor

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

9
Bu soru yönetim ile programlamayla ilgili olduğundan, serverfault.com'daki nazik insanların size daha iyi yardımcı olabileceğini söyleyebilirim .
Piskvor binadan

MSQL WorkBench 5.2.22'ye bir göz atın . Bunu kolayca yapmanıza izin verecektir.
Gary

1
NOT: uzak bir mysql sunucusunu boşaltmak için lütfen --host = sqlserver.host.name --port = 3306
ro0ter

Bu soruyu konu dışı olarak kapatmak için oy veriyorum çünkü DBA'ya ait,
Marquis of Lorne

Yanıtlar:


244

Ben henüz serverfault görmedim ve cevap oldukça basit:

Değişiklik:

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

Kime:

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

Ve değişim:

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

Kime:

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

(localhost kullanmayın, muhtemelen porttan ziyade sokete bağlanan bu 'özel anlam' saçmalıklarından biridir)

edit : well, ayrıntılı olarak: ana bilgisayar olarak ayarlanmışsa localhost, yapılandırılmış (veya varsayılan) bir --socketseçenek varsayılır. Hangi seçenek dosyalarının aranıp kullanıldığının kılavuzuna bakın . Windows altında, bu adlandırılmış bir kanal olabilir.


3
Dikkat: localhostgenellikle varsayılan ::1IPv6, değil 127.0.0.1.
polkovnikov.ph

112

Bir uzak sunucuya karşı yerel olarak mysqldump çağırabilir.

Benim için çalışan örnek:

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

Bağlantı seçenekleriyle ilgili mysqldump belgelerini takip ettim .


9
Daha önce ssh tünelini açmaya gerek yok. +1
Öğrenci

1
en basit yaklaşım, ssh üzerinden bağlanmaya ve dosyayı yerel makinenize geri getirmeye gerek yoktur! Sadece çöplüğü doğrudan getirin!
theGabyRod

3
bu tehlikeli, çok tehlikeli. mysql limanının halka açık olmasını gerektirir. botlar tarafından zorla kolayca kaba olabilir.
volkovmqx

5
Bir VPN'de olmaya ne dersiniz? Ya da SSHed'in içine veritabanı makinesine erişimi olan bir makineden bir dökümü yapmak mı? Limanın halka açık olması gerekmez.
Ondrej Burkert

3
Burada -p, veritabanı adı için değil, şifre argümanı için olduğunu hatırlamak önemlidir . Ancak düz metin olarak saklamak güvenli değildir, bu nedenle ekleme -pişlemi, girişte parola istenmeniz anlamına gelir. Belki de sadece benim ama mysqlve böylece mysqldökümü sözdizimi, komut satırı argümanları kadar ileriye doğru hiç bu kadar ileri gitmedi.
anon58192932

0

Burada bu sayfada bulunan:

İki MySQL veritabanını karşılaştırın

Farklı ana bilgisayarlarda ddbb kullanabilmek için değiştirdim.

#! / Bin / sh

echo "Kullanım: dbdiff [kullanıcı1: pass1 @ dbname1: ana bilgisayar] [kullanıcı2: pass2 @ dbname2: ana bilgisayar] [ignore_table1: ignore_table2 ...]"

döküm () {
  = $ {1 %% @ *} kadar; Aşağı = $ {1 ## * '}; user = $ {yukarı %%: *}; geçmesi = $ {kadar ## *:}; dbname = $ {%% aşağı: *}; konak = $ {aşağı ## *:};
  mysqldump --opt --compact --skip-extended-insert -u $ kullanıcı -p $ pass $ dbname -h $ ana bilgisayar $ tablo> $ 2
}

rm -f /tmp/db.diff

# Karşılaştırmak
= $ {1 %% @ *} kadar; Aşağı = $ {1 ## * '}; user = $ {yukarı %%: *}; geçmesi = $ {kadar ## *:}; dbname = $ {%% aşağı: *}; konak = $ {aşağı ## *:};
mysql -u $ kullanıcı -p $ pass $ dbname -h $ host -N -e "tabloları göster" --batch`daki tablo için; yapmak
  eğer ["` echo $ 3 | grep $ table` "=" "]; sonra
    echo "'$ table' karşılaştırılıyor ..."
    dökümü $ 1 /tmp/file1.sql
    dökümü $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  Başka
    echo "Yok sayıldı '$ table' ..."
  fi
tamam
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

Uzak sunucudan gelen mysqldump SSL kullanıyor

1- SSL ile güvenlik

192.168.0.101 - uzak sunucu

192.168.0.102 - yerel sunucu

Sunucuyu yeniden al

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;

-

Yerel sunucu

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 - SSL ile güvenlik (REQUIRE X509)

192.168.0.101 - uzak sunucu

192.168.0.102 - yerel sunucu

Sunucuyu yeniden al

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;

-

Yerel sunucu

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

[Not]

Yerel sunucuda

/ 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

Bu dosyaları (REQUIRE X509) için veya (REQUIRE X509) olmayan SSL kopyalamıyorsa uzak sunucudan kopyalayın


Uzak sunucuda

/ 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

Şifre Güvenliğini Artırın

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.