कैसे स्थानीय मशीन से mysqldump रिमोट डीबी


177

मुझे किसी दूरस्थ सर्वर पर किसी डेटाबेस का mysqldump करने की आवश्यकता है, लेकिन सर्वर में mysqldump स्थापित नहीं है। मैं दूरस्थ डेटाबेस से कनेक्ट करने के लिए अपनी मशीन पर mysqldump का उपयोग करना चाहूंगा और अपनी मशीन पर डंप करूंगा।

मैंने एक ssh सुरंग बनाने और फिर डंप करने की कोशिश की है, लेकिन यह काम नहीं करता है। मैंने कोशिश की:

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

सुरंग को सफलता के साथ बनाया गया है। यदि मैं करता हूँ

telnet localhost 3310

मुझे कुछ ब्लर्ब मिलते हैं जो सही सर्वर mysql वर्जन को दिखाता है। हालाँकि, निम्न करने से लगता है कि स्थानीय रूप से कनेक्ट करने का प्रयास किया जा रहा है

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

9
चूंकि यह प्रश्न प्रोग्रामिंग से अधिक प्रशासन से संबंधित है, मैं कहता हूं कि serverfault.com पर दयालु लोग आपकी बेहतर सहायता कर सकते हैं।
पिस्कोर ने

MSQL WorkBench 5.2.22 पर एक नज़र डालें। यह आसानी से आपको ऐसा करने की अनुमति देगा।
गैरी

1
नोट: एक दूरस्थ mysql सर्वर को डंप करने के लिए, कृपया शामिल करें --host = sqlserver.host.name --port = 3306
ro0ter

मैं इस प्रश्न को ऑफ-टॉपिक के रूप में बंद करने के लिए मतदान कर रहा हूं क्योंकि यह डीबीए पर है,
लोर्ने के Marquis

जवाबों:


244

जैसा कि मैंने अभी तक इसे सर्वरफॉल्ट पर नहीं देखा है, और इसका उत्तर काफी सरल है:

परिवर्तन:

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

सेवा:

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

और बदलें:

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

सेवा:

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

(लोकलहोस्ट का उपयोग न करें, यह इन 'विशेष अर्थों' में से एक है जो संभवतः सॉकेट द्वारा कनेक्ट होता है, बल्कि पोर्ट द्वारा)

संपादित करें : ठीक है, विस्तृत करने के लिए: यदि होस्ट सेट है localhost, तो एक कॉन्फ़िगर किया हुआ (या डिफ़ॉल्ट) --socketविकल्प मान लिया गया है। वह मैनुअल देखें जिसके लिए विकल्प फ़ाइलों की मांग / उपयोग किया जाता है। विंडोज के तहत, यह एक नामित पाइप हो सकता है।


3
खबरदार: localhostअक्सर ::1आईपीवी 6 में चूक , नहीं 127.0.0.1
पोलोव्निकोव.ऑफ़

112

एक दूरस्थ सर्वर के खिलाफ स्थानीय स्तर पर mysqldump का आह्वान किया जा सकता है।

उदाहरण है कि मेरे लिए काम किया:

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

मैंने कनेक्शन विकल्पों पर mysqldump प्रलेखन का पालन ​​किया ।


9
इससे पहले ssh सुरंग खोलने के लिए और अधिक की जरूरत नहीं है। +1
शिक्षार्थी

1
सरल aproach, theres ssh के माध्यम से कनेक्ट करने और फ़ाइल को अपने स्थानीय मशीन पर वापस लाने की कोई आवश्यकता नहीं है! बस सीधे डंप ले आओ!
theGabyRod

3
यह खतरनाक है, बहुत खतरनाक है। इसके लिए जरूरी है कि mysql का पोर्ट पब्लिक के लिए खुला हो। जो आसानी से बॉट्स द्वारा मजबूर किया जा सकता है।
volkovmqx

5
वीपीएन में होने के बारे में कैसे? या जिस मशीन से आपने SSHed किया है उस मशीन से एक डंप करना डेटाबेस मशीन तक पहुँच है? पोर्ट को सार्वजनिक करने की आवश्यकता नहीं है।
ओन्ड्रेज बर्कर्ट

3
यहां यह याद रखना महत्वपूर्ण है कि -pपासवर्ड तर्क के लिए है - डेटाबेस का नाम नहीं। लेकिन यह इसे सादे पाठ में संग्रहीत करने के लिए असुरक्षित है, इसलिए जोड़ने का -pमतलब है कि आपको लॉगिन पर पासवर्ड के लिए संकेत दिया जाएगा। शायद यह सिर्फ मुझे है, mysqlऔर इस प्रकार mysqlडंप सिंटैक्स यह सब कभी नहीं था जो सीधे कमांड लाइन के तर्क के रूप में आगे था।
Anon58192932

0

इस पृष्ठ पर यहाँ दिया गया:

दो MySQL डेटाबेस की तुलना करें

मैंने इसे संशोधित किया ताकि आप अलग-अलग होस्ट में ddbb का उपयोग कर सकें।

#! / Bin / श

इको "उपयोग: dbdiff [user1: pass1 @ dbname1: होस्ट] [user2: pass2 @ dbname2: होस्ट] [ign_table1: ign_table2 ...]"

डंप () {
  ऊपर = $ {1 %% @ *}; नीचे = $ {1 ## * @}; उपयोगकर्ता = $ {अप %%: *}; पारित = $ {अप ## *:}; dbname = $ {नीचे %%: *}; मेजबान = $ {नीचे ## *:};
  mysqldump --opt --compact --skip-Extended-Insert -u $ user -p $ pass $ dbname -h $ host $ table> $ 2
}

rm -f /tmp/db.diff

# तुलना करें
ऊपर = $ {1 %% @ *}; नीचे = $ {1 ## * @}; उपयोगकर्ता = $ {अप %%: *}; पारित = $ {अप ## *:}; dbname = $ {नीचे %%: *}; मेजबान = $ {नीचे ## *:};
'mysql -u $ user -p $ pass $ dbname -h $ host -N -e "शो टेबल" --batch' में टेबल के लिए; करना
  अगर ["` प्रतिध्वनि $ 3 | grep $ table` "=" "]; फिर
    इको "$ टेबल 'की तुलना ..."
    डंप $ 1 /tmp/file1.sql
    डंप $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/fb.diff
  अन्य
    इको "उपेक्षित '$ टेबल' ..."
  फाई
किया हुआ
कम /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

दूरस्थ सर्वर से mysqldump SSL का उपयोग करते हैं

1- एसएसएल के साथ सुरक्षा

192.168.0.101 - दूरस्थ सर्वर

192.168.0.102 - स्थानीय सर्वर

सर्वर को याद रखें

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;

-

स्थानीय सर्वर

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 के साथ सुरक्षा (REQUIRE X509)

192.168.0.101 - दूरस्थ सर्वर

192.168.0.102 - स्थानीय सर्वर

सर्वर को याद रखें

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;

-

स्थानीय सर्वर

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

[ध्यान दें]

स्थानीय सर्वर पर

/ Usr / स्थानीय / mysql / डेटा / 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

(REQUIRE X509) या SSL बिना (REQUIRE X509) के दूरस्थ सर्वर से इस फाइल को कॉपी न करें


रिमोट सर्वर पर

/ Usr / स्थानीय / mysql / डेटा /

-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

पासवर्ड सुरक्षा बढ़ाएँ

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.