SSH経由でリモートMySQLクエリを実行する

SSH経由でリモートMySQLクエリを実行する

次のコマンドを使用してMySQLクエリを実行しようとしています:ssh

ssh -p 2020 [email protected] "mysql --verbose --compress --secure-auth --database ops --execute \
'INSERT INTO \`ops\`.\`accounts\` (\`alias\`, \`id\`, \`web_server\`, \`mysql_server\`) VALUES ('foobar', 'foobar', 'web2', 'mysql1')'"

問題は、これを実行すると、、、を囲​​む一重引用符が削除されることですfoobarfoobar以下web2mysql1MySQL からのエラー応答です。

ERROR 1054 (42S22) at line 1: Unknown column 'foobar' in 'field list'
--------------
INSERT INTO `ops`.`accounts` (`alias`, `id`, `web_server`, `mysql_server`) VALUES (foobar, foobar, web2, mysql1)
--------------

これを修正するにはどうすればいいでしょうか? ありがとうございます。

答え1

解決策は、値の周囲にエスケープされた一重引用符の別のレイヤーを追加することでした。

ssh -p 2020 [email protected] "mysql --verbose --compress --secure-auth --database ops --execute \
'INSERT INTO \`ops\`.\`accounts\` (\`alias\`, \`id\`, \`web_server\`, \`mysql_server\`) VALUES ('\'foobar\'', '\'foobar\'', '\'web2\'', '\'mysql1\'')'"

答え2

次のようにすれば動作するはずです:

echo "INSERT INTO `ops`.`accounts` (`alias`, `id`, `web_server`, `mysql_server`) VALUES ('foobar', 'foobar', 'web2', 'mysql1')" | ssh [email protected] "mysql --verbose --compress --secure-auth --database ops"

ローカル ポートをリモート サーバーに転送することもできます。

$ ssh -L2206:localhost:3306 [email protected]

次に、別のターミナルで、次のコマンドを使用してリモート MySQL サーバーに接続できるようになりますmysql

$ mysql --host localhost --port 2206

関連情報