ローカルマシンからリモートdbを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の親切な人々があなたをよりよく支援できると思います。
Piskvorは

MSQL WorkBench 5.2.22を見てください。これを簡単に行うことができます。
ゲイリー

1
注:リモートmysqlサーバーをダンプするには、
-host

私は、それがDBAに属しているため、オフトピックとして、この質問を閉じるために投票しています
ローン侯爵

回答:


244

私はまだserverfaultで見たことがないので、答えは非常に簡単です。

変化する:

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は使用しないでください。これは、ポートではなくソケットで接続する、これらの「特別な意味」の意味のない意味の1つです)

編集:まあ、詳しく説明します。ホストがに設定されているlocalhost場合、構成済み(またはデフォルト)の--socketオプションが想定されます。どのオプションファイルが求められ、使用されるかについては、マニュアルを参照してください。Windowsでは、これは名前付きパイプにすることができます。


3
注意:localhostデフォルトでは、多くの場合、::1IPv6にデフォルト設定されます127.0.0.1
polkovnikov.ph 2016年

112

mysqldumpをリモートサーバーに対してローカルに呼び出すことができます。

私のために働いた例:

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

接続オプションについては、mysqldumpのドキュメントに従いました。


9
以前にSSHトンネルを開く必要はもうありません。+1
学習者

1
最も単純なアプローチ、ssh経由で接続してファイルをローカルマシンに戻す必要はありません。直接ダンプをお持ちください!
theGabyRod

3
これは非常に危険です。mysqlのポートが公開されている必要があります。これはボットによって簡単にブルートフォースされる可能性があります。
volkovmqx 2018

5
VPNにいるのはどうですか?または、SSHで接続したマシンからダンプを実行して、データベースマシンにアクセスできますか?ポートは公開する必要はありません。
Ondrej Burkert 2018

3
ここで-p、データベース名ではなく、パスワードの引数に注意することが重要です。ただし、プレーンテキストで保存するのは安全ではないため、追加-pすると、ログイン時にパスワードの入力を求められます。多分それは私だけかもしれませんが、mysqlしたがって、mysqlダンプ構文はコマンドライン引数に関する限り単純ではありませんでした。
anon58192932

0

ここのこのページに基づいています:

2つのMySQLデータベースを比較する

別のホストでddbbを使用できるように変更しました。

#!/ bin / sh

echo "使用方法:dbdiff [user1:pass1 @ dbname1:host] [user2:pass2 @ dbname2:host] [ignore_table1:ignore_table2 ...]"

投げ捨てる () {
  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

#比較
up = $ {1 %% @ *}; down = $ {1 ## * @}; user = $ {up %%:*}; pass = $ {up ## *:}; dbname = $ {down %%:*}; host = $ {down ## *:};
`mysql -u $ user -p $ pass $ dbname -h $ host -N -e" show tables "--batch`のテーブル用 行う
  if ["` echo $ 3 | grep $ table` "=" "]; その後
    echo "'$ table'を比較しています..."
    ダンプ$ 1 /tmp/file1.sql
    ダンプ$ 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-ローカルサーバー

リモアサーバー

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によるセキュリティ(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 / 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

(REQUIRE X509)のリモートサーバーからこのファイルをコピーするか、(REQUIRE X509)なしのSSLがコピーしない場合


リモートサーバー

/ 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

パスワードのセキュリティを強化する

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.