web-dev-qa-db-ja.com

コマンドラインでsshを使用してリモートマシンでMySQLクエリを実行する

次のコマンドを使用して、リモートマシンでMySQLクエリを実行しようとしています。

ssh [email protected] "mysql -uroot -proot -e \"use test";""

そのデータベースを使用できません。

有効なコマンドを提案してください。

23
lk121

これを試して:

mysql -h Host -u root -proot -e "show databases;";
35
kun tang

これを試して:

ssh root@Host "mysql database -e 'query to run on table_name; more queries to run;'"

一般にmysqlを起動することはもちろんのこと、そのユーザーがSQLクエリを実行する権限を持っている場合は、user@Hostでも同じことができます。 -eの使用は--executeと同じです。これは、末尾の引用符(シングルまたはダブル)内にあるものをすべて実行し、終了します。標準出力形式は、--batchを使用した場合と同じです。

11
King-Wzrd

MySqlには、データベースを含む特別なコマンドライン構文があるようです。

mysql -u user -p -e 'SQL Query'データベース

このドキュメントはかなり古いですが、動作するようになりました

http://www.cyberciti.biz/faq/run-sql-query-directly-on-the-command-line/

Sshを使用した最終作業コマンド:

ssh user @ Host "mysql -u user -e 'show tables;'データベース名"

4
Vicky T

これは最終的にbashスクリプトで働いていました:

query='USE [database]; SELECT ...'   
mysql='mysql -u [username] -p[password] -e '"'""$query""'"
ssh [username]@[server] -t "$mysql"

より安全にしたい場合は、安全でない可能性のある場所に保存する代わりに、パスワードのプロンプトを追加します。

1
OZZIE

これは、いくつかのテストの後に機能しました(基本的に@ King-Wzrdと同じ答えです):

ssh -t kom "mysql -uroot -p -e 'show databases;'"
ssh -t kom "mysql -uroot -p < /home/ling/websites/jin_test/.deploy/tmp.sql"

「トリック」はコマンドを囲む引用でした。

-tオプションを使用すると、リモートシェル経由でインタラクティブにパスワードを入力できます。

ここでのkomは、私の〜/ .ssh/configファイルで定義された単なるssh構成識別子です(詳細はこちら:- https://www.cyberciti.biz/faq/create-ssh-config-file-on-linux-unix/ )。

1
ling