シェルスクリプトを使用して、リモートでホストされているサイトのデータベースを定期的にダンプしたいのですが。残念ながら、サーバーはかなりタイトにロックされており、mysqldump
インストールされておらず、バイナリファイルは通常のユーザーやホームディレクトリでは実行できないため(自分で「インストール」することはできません)、データベースは別のサーバーにあるため、ファイルを直接取得することはできません。
私ができる唯一のことは、SSH経由でWebサーバーにログインし、mysql
コマンドラインクライアントを使用してデータベースサーバーへの接続を確立することです。内容をmysqldump
SQL形式でファイルに保存するにはどうすればよいですか?
おまけ:可能であれば、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.com
hostsファイルに追加して経由で接続することで機能しましたmysqldump -P 3306 -h mysql.example.com -u user -p db
。問題は解決された!ただし、hostsファイルを編集する必要がないソリューションにも興味があります。
'user'@'localhost'
に加えて'user'@'mysql.example.com'
、hostsファイルを編集する代わりに、権限を付与することをお勧めします。