2012-03-30 16 views
5

Ich habe einen CentOS Server, den ich von BASH Skript auf meinem Laptop ausführen möchte.MySQL von BASH über SSH scripten

ein Skript lokal, dass: - Logs in den Server über ssh und führt einige mysql-Anweisungen - kopiert Dateien, die ich brauche, wo ich sie brauche

Kopieren der Datei ist einfach. Ich kann das machen.

Aber wie kann man sich über den SSH-Port mit einem MySQL-Server verbinden und Anweisungen ausführen? Ich denke, ich bin gerade auf dem Connect-Teil fest. Ausführen der Anweisungen, die ich auf einer Variablen aufbauen kann und Batch-Ausführung.

Ich habe ein SSH Pub/priv Schlüsselpaar von meinem Laptop zu diesem Server.

Hilfe?

+0

Ist das, was du schaust nach? http://www.wallpaperama.com/forums/_zwxwzy.html – mikevoermans

Antwort

5

Verwenden Sie einfach ssh zum Ausführen mysql auf dem Remote-Server. Zum Beispiel

ssh [email protected] 'mysql -uimauser -p imadb -e "select * from table"'.

Alles in Anführungszeichen wird remote von ssh ausgeführt.

9

Sie Befehle angeben können auf dem entfernten Rechner, als das letzte Argument zu ssh auszuführen:

ssh [email protected] 'mysql -u user ...' 

Das Problem dabei ist, dass es ein Streit mit den verschiedenen ‚“ Flucht in die beschäftigen . mysql-Kommando (s)

Ein besserer Weg, meiner Meinung nach, ist einen SSH-Tunnel zum Remote-Rechner zu öffnen, wenn Sie eine Verbindung:

ssh -L 12341:127.0.0.1:3306 [email protected] & 

Dies würde die lokal 12341-Port anschließen, t o Der 3306 (mysqld) -Port der entfernten Maschine. Nachdem die Verbindung hergestellt ist, können Sie wie es von Ihrem lokalen Rechner verbinden:

mysql -h 127.0.0.1 -p 12341 

So können Sie Ihre SQL-Anweisungen in eine Datei einfügen, und Katze es in mysql:

cat commands | mysql -h 127.0.0.1 -p 12341 

Don‘ Vergessen Sie nicht, die SSH-Verbindung zu beenden, nachdem Sie fertig sind.

Beachten Sie, dass Tunneling erfordert den Remote-Server PermitTunnel "Ja" in seiner sshd_config zu haben.

5

können Sie tun, was @WishCow gesagt oder Sie alle MySQL-Anweisungen in einer .sql Datei setzen, diese Datei zu Server kopieren und dann mysql diese Anweisungen auszuführen nennen, das so etwas wie:

echo "show databases;" > test.sql 
echo "use some_database;" >> test.sql 
echo "show tables;" >> test.sql 
scp test.sql [email protected]: 
ssh [email protected] 'mysql -u mysql-user -pmysql-pass < test.sql'