วิธีการ mysqldump ระยะไกล db จากเครื่องท้องถิ่น


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สามารถช่วยเหลือคุณได้ดีกว่า
Piskvor ออกจากอาคาร

ดูที่MSQL WorkBench 5.2.22 มันจะช่วยให้คุณทำเช่นนี้ได้อย่างง่ายดาย
Gary

1
หมายเหตุ: สำหรับการทิ้งเซิร์ฟเวอร์ระยะไกล mysql โปรดทำ --host = sqlserver.host.name --port = 3306
ro0ter

ฉันลงคะแนนเพื่อปิดคำถามนี้เป็นหัวข้อนอกเพราะมันเป็นของ DBA
Marquis of Lorne

คำตอบ:


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 เป็นหนึ่งใน 'ความหมายพิเศษ' ไร้สาระเหล่านี้ที่อาจเชื่อมต่อด้วยซ็อกเก็ตแทนที่จะใช้พอร์ต)

แก้ไข : ดีที่จะทำอย่างละเอียด: ถ้าโฮสต์ถูกกำหนดlocalhostเป็น--socketตัวเลือกที่กำหนด (หรือค่าเริ่มต้น) จะถือว่า ดูคู่มือการค้นหา / ใช้ไฟล์ตัวเลือก ภายใต้ Windows นี่อาจเป็นไพพ์ที่มีชื่อ


3
ระวัง: localhostมักจะเริ่มต้นที่::1IPv6 127.0.0.1ไม่
polkovnikov.ph

112

หนึ่งสามารถเรียกใช้ mysqldump ภายในกับเซิร์ฟเวอร์ระยะไกล

ตัวอย่างที่เหมาะกับฉัน:

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

ฉันติดตามเอกสาร mysqldump ในตัวเลือกการเชื่อมต่อ


9
ไม่จำเป็นต้องเปิดอุโมงค์ ssh อีกแล้ว +1
ผู้เรียน

1
aproach ที่ง่ายที่สุดไม่มีความจำเป็นต้องเชื่อมต่อผ่าน ssh และนำไฟล์กลับไปที่เครื่องของคุณ! เพียงนำดัมพ์โดยตรง!
theGabyRod

3
สิ่งนี้เป็นอันตรายและอันตรายมาก มันต้องการให้พอร์ตของ mysql เปิดให้สาธารณะ ซึ่งสามารถถูกสัตว์เดรัจฉานถูกบอทบังคับได้ง่าย
volkovmqx

5
เกี่ยวกับการอยู่ใน VPN? หรือทำดัมพ์จากเครื่องที่คุณใช้ SSHed เพื่อเข้าถึงเครื่องฐานข้อมูล พอร์ตไม่จำเป็นต้องเป็นแบบสาธารณะ
Ondrej Burkert

3
สิ่งสำคัญคือให้จำที่นี่ซึ่ง-pมีไว้สำหรับอาร์กิวเมนต์รหัสผ่านไม่ใช่ชื่อฐานข้อมูล แต่มันไม่ปลอดภัยที่จะเก็บไว้เป็นข้อความธรรมดาดังนั้นการเพิ่ม-pหมายความว่าคุณจะได้รับแจ้งให้ใส่รหัสผ่านเมื่อเข้าสู่ระบบ บางทีมันอาจจะเป็นเพียงฉัน แต่mysqlและทำให้mysqlไวยากรณ์การถ่ายโอนข้อมูลก็ไม่เคยทั้งหมดที่ตรงไปตรงมาเท่าที่อาร์กิวเมนต์บรรทัดคำสั่ง
anon58192932

0

เบสในหน้านี้ที่นี่:

เปรียบเทียบฐานข้อมูล MySQL สองตัว

ฉันแก้ไขมันเพื่อให้คุณสามารถใช้ ddbb ในโฮสต์ที่แตกต่างกัน

#! / bin / ดวลจุดโทษ

echo "การใช้งาน: dbdiff [user1: pass1 @ dbname1: host] [user2: pass2 @ dbname2: host]] [ign_table1: ign_table2 ... ]"

dump () {
  ขึ้น = $ {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`; ทำ
  ถ้า ["` echo $ 3 | grep $ table` "=" "]; แล้วก็
    echo "เปรียบเทียบ '$ table' ... "
    dump $ 1 /tmp/file1.sql
    dump $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  อื่น
    echo "ข้าม '$ table' ... "
  Fi
เสร็จแล้ว
น้อยกว่า /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

mysqldump จากเซิร์ฟเวอร์ระยะไกลใช้ SSL

1- ความปลอดภัยด้วย SSL

192.168.0.101 - เซิร์ฟเวอร์ระยะไกล

192.168.0.102 - เซิร์ฟเวอร์ท้องถิ่น

เซิร์ฟเวอร์ remore

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 - เซิร์ฟเวอร์ท้องถิ่น

เซิร์ฟเวอร์ remore

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 / local / 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 / local / 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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.