Ausführen einer Remote-MySQL-Abfrage über SSH

Ausführen einer Remote-MySQL-Abfrage über SSH

Ich versuche, eine MySQLAbfrage sshmit dem folgenden Befehl auszuführen:

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')'"

Das Problem besteht darin, dass bei der Ausführung die einfachen Anführungszeichen um foobar, foobar, web2, und mysql1entfernt werden. Hier ist die Fehlerantwort von MySQL:

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)
--------------

Wie kann ich das beheben? Danke.

Antwort1

Die Lösung bestand darin, den Werten eine weitere Ebene mit maskierten einfachen Anführungszeichen hinzuzufügen.

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\'')'"

Antwort2

Folgendes sollte funktionieren:

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"

Sie können auch einen lokalen Port an Ihren Remote-Server weiterleiten:

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

Anschließend können Sie in einem anderen Terminal mit dem folgenden mysqlBefehl eine Verbindung zu Ihrem Remote-MySQL-Server herstellen:

$ mysql --host localhost --port 2206

verwandte Informationen