Làm thế nào để mysqldump db từ xa từ máy cục bộ


177

Tôi cần thực hiện một mysqldump của cơ sở dữ liệu trên một máy chủ từ xa, nhưng máy chủ không được cài đặt mysqldump. Tôi muốn sử dụng mysqldump trên máy của mình để kết nối với cơ sở dữ liệu từ xa và thực hiện kết xuất trên máy của tôi.

Tôi đã cố gắng tạo một đường hầm ssh và sau đó thực hiện kết xuất, nhưng điều này dường như không hoạt động. Tôi đã thử:

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

Đường hầm được tạo ra với thành công. Nếu tôi làm

telnet localhost 3310

Tôi nhận được một số blurb hiển thị phiên bản mysql máy chủ chính xác. Tuy nhiên, làm như sau dường như cố gắng kết nối cục bộ

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

9
Vì câu hỏi này liên quan đến quản trị nhiều hơn là lập trình, tôi muốn nói rằng những người tốt bụng tại serverfault.com có thể hỗ trợ bạn tốt hơn.
Piskvor rời khỏi tòa nhà vào

Hãy xem MSQL WorkBench 5.2.22. Nó sẽ dễ dàng cho phép bạn làm điều này.
Gary

1
LƯU Ý: để
hủy

Tôi đang bỏ phiếu để đóng câu hỏi này ngoài chủ đề vì nó thuộc về DBA,
Hầu tước Lorne

Câu trả lời:


244

Như tôi chưa thấy nó ở serverfault, và câu trả lời khá đơn giản:

Thay đổi:

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

Đến:

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

Và thay đổi:

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

Đến:

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

(không sử dụng localhost, đây là một trong những 'ý nghĩa đặc biệt' có thể kết nối bằng ổ cắm chứ không phải bằng cổng)

chỉnh sửa : tốt, để giải thích: nếu máy chủ được đặt thành localhost, --sockettùy chọn được cấu hình (hoặc mặc định) được giả sử. Xem hướng dẫn sử dụng các tập tin tùy chọn được tìm kiếm / sử dụng. Trong Windows, đây có thể là một ống có tên.


3
Cẩn thận: localhostthường mặc định là ::1IPv6, không 127.0.0.1.
polkovnikov.ph

112

Người ta có thể gọi mysqldump cục bộ đối với một máy chủ từ xa.

Ví dụ làm việc cho tôi:

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

Tôi đã làm theo tài liệu mysqldump về các tùy chọn kết nối.


9
Không cần phải mở đường hầm ssh trước. +1
Người học

1
Aproach đơn giản nhất, không cần kết nối qua ssh và đưa tập tin trở lại máy cục bộ của bạn! Chỉ cần mang bãi rác trực tiếp!
theGabyRod

3
Điều này là nguy hiểm, rất nguy hiểm. nó đòi hỏi cổng của mysql phải mở cho công chúng. có thể dễ dàng bị vũ phu ép buộc bởi bot.
volkovmqx

5
Làm thế nào về việc ở trong một VPN? Hoặc thực hiện một kết xuất từ ​​một máy bạn SSH vào đó có quyền truy cập vào máy cơ sở dữ liệu? Cổng không cần phải công khai.
Ondrej Burkert

3
Điều quan trọng cần nhớ ở đây -plà đối số mật khẩu - không phải tên cơ sở dữ liệu. Nhưng việc lưu trữ nó trong văn bản đơn giản là không an toàn nên việc thêm -pnghĩa là bạn sẽ được nhắc nhập mật khẩu khi đăng nhập. Có lẽ nó chỉ là tôi nhưng mysqlvà do đó các mysqlcú pháp bãi là không bao giờ tất cả những gì thẳng về phía trước như xa như các đối số dòng lệnh.
anon58192932

0

Bass trên trang này ở đây:

So sánh hai cơ sở dữ liệu MySQL

Tôi đã sửa đổi nó để bạn có thể sử dụng ddbb trong các máy chủ khác nhau.

#! / thùng / sh

echo "Cách sử dụng: dbdiff [user1: pass1 @ dbname1: host] [user2: pass2 @ dbname2: host] [ign_table1: ign_table2 ...]"

đổ () {
  lên = $ {1 %% @ *}; xuống = $ {1 ## * @}; người dùng = $ {tăng %%: *}; pass = $ {lên ## *:}; dbname = $ {xuống %%: *}; máy chủ = $ {xuống ## *:};
  mysqldump --opt --compact --skip-extend-insert -u $ user -p $ pass $ dbname -h $ host $ bảng> $ 2
}

rm -f /tmp/db.diff

# Đối chiếu
lên = $ {1 %% @ *}; xuống = $ {1 ## * @}; người dùng = $ {tăng %%: *}; pass = $ {lên ## *:}; dbname = $ {xuống %%: *}; máy chủ = $ {xuống ## *:};
cho bảng trong `mysql -u $ user -p $ pass $ dbname -h $ host -N -e" hiển thị bảng "--batch`; làm
  if ["` echo $ 3 | grep $ bảng` "=" "]; sau đó
    echo "So sánh '$ bảng' ..."
    đổ $ 1 /tmp/file1.sql
    đổ $ 2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  khác
    tiếng vang "Bỏ qua '$ bảng' ..."
  fi
làm xong
ít hơn / tmp / db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

0

mysqldump từ máy chủ từ xa sử dụng SSL

1- Bảo mật với SSL

192.168.0.101 - máy chủ từ xa

192.168.0.102 - máy chủ cục bộ

Máy chủ 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;

-

Máy chủ cục bộ

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 - Bảo mật bằng SSL (REQUIRE X509)

192.168.0.101 - máy chủ từ xa

192.168.0.102 - máy chủ cục bộ

Máy chủ 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;

-

Máy chủ cục bộ

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

[Ghi chú]

Trên máy chủ cục bộ

/ usr / cục bộ / mysql / dữ liệu / 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

Sao chép tệp này từ máy chủ từ xa cho (REQUIRE X509) hoặc nếu SSL không có (REQUIRE X509) không sao chép


Trên máy chủ từ xa

/ usr / cục bộ / mysql / dữ liệu /

-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

Tăng mật khẩu bảo mật

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.