mysqldumpなしでリモートデータベースをダンプする方法


8

シェルスクリプトを使用して、リモートでホストされているサイトのデータベースを定期的にダンプしたいのですが。残念ながら、サーバーはかなりタイトにロックされており、mysqldumpインストールされておらず、バイナリファイルは通常のユーザーやホームディレクトリでは実行できないため(自分で「インストール」することはできません)、データベースは別のサーバーにあるため、ファイルを直接取得することはできません。

私ができる唯一のことは、SSH経由でWebサーバーにログインし、mysqlコマンドラインクライアントを使用してデータベースサーバーへの接続を確立することです。内容をmysqldumpSQL形式でファイルに保存するにはどうすればよいですか?
おまけ:可能であれば、SSH接続の最後に直接コンテンツをダンプするにはどうすればよいですか?


以下に提案するSSHトンネルのアイデアは気に入っていますが、二重にトンネルする必要があります。

localhost -> remote web server -> remote database server

これは大丈夫です:

$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N

ただし、mysqlにログインしようとすると失敗します。

$ mysqldump -P 3306 -h localhost -u user -p db
Enter password: 
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost'
   (using password: YES) when trying to connect

ユーザーの資格情報がであることを期待していると思います'user'@'mysql.example.com'。「実際の」ホストの代わりにそれを使用するように調整するにはどうすればよいですか?


さて、127.0.0.1 mysql.example.comhostsファイルに追加して経由で接続することで機能しましたmysqldump -P 3306 -h mysql.example.com -u user -p db。問題は解決された!ただし、hostsファイルを編集する必要がないソリューションにも興味があります。


1
MySQL 'user'@'localhost'に加えて'user'@'mysql.example.com'、hostsファイルを編集する代わりに、権限を付与することをお勧めします。
Znarkus、2011

回答:


15

sshトンネルを設定mysqldumpして、ローカルマシンで使用できます。

ssh -f -L 3306:localhost:3306 user@remoteserver -N
mysqldump -P 3306 -h localhost -u dbuser dbname

1
Unixでは、「localhost」の扱いが異なります。この場合、ポート番号は無視されます。これを機能させるには、127.0.0.1を使用する必要があります。dev.mysql.com/doc/refman/5.0/en/connecting.html
エイドリアン


0

このスクリプトをWebサーバーにアップロードし(少なくともFTPアクセスが可能であることを願います)、スクリプトを開始し、データベース名/ホスト(「別のサーバー」のアドレス)/ユーザー名/パスワードを指定して、データベースを任意の場所にダンプします...


0

サーバーがWebサーバーの場合、データベースを画面にダンプするPHPスクリプトを使用できます。バックアップサーバーで、ダンプページを取得するcronを配置します。次に、データベースはHTTPだけでバックアップサーバーにダンプされます。

セキュリティを忘れないでください:誰でもあなたの基地を捨てることができます。パスワード、またはIP制限を入力してください...

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