скриптинг MySQL из BASH через SSH - PullRequest
5 голосов
/ 31 марта 2012

У меня есть сервер CentOS, который я хочу создать сценарий из BASH и запустить его на своем ноутбуке.

локально запустить сценарий, который: - входит на сервер через ssh и выполняет некоторые операторы mysql - копирует файлынадо туда, где они мне нужны

Копирование файлов легко.Я могу это сделать.

Но как подключиться к серверу MySQL через порт SSH и выполнить операторы?Я думаю, что я просто застрял на соединительной части.выполнение операторов, которые я могу создать на основе переменной, и пакетное выполнение.

У меня есть пара ключей SSH pub / priv от моего ноутбука до этого сервера.

любая помощь?

Ответы [ 3 ]

9 голосов
/ 31 марта 2012

Вы можете указать команды для запуска на удаленном компьютере в качестве последнего аргумента для ssh:

ssh user@remote 'mysql -u user ...'

Проблема с этим заключается в том, что это будет хлопотно иметь дело с различными "" выходами в команде (ах) mysql.

На мой взгляд, лучший способ - открыть туннель SSH для удаленного компьютера при подключении:

ssh -L 12341:127.0.0.1:3306 user@server &

Это подключит ваш локальный порт 12341 к порту удаленного компьютера 3306 (mysqld). После того, как соединение установлено, вы можете подключиться к нему с локального компьютера, например:

mysql -h 127.0.0.1 -p 12341

Таким образом, вы можете поместить свои операторы SQL в файл и поместить его в mysql:

cat commands | mysql -h 127.0.0.1 -p 12341

Не забудьте прервать соединение SSH после того, как вы закончите.

Обратите внимание, что для туннелирования требуется, чтобы на удаленном сервере было PermitTunnel "yes" в его sshd_config.

5 голосов
/ 02 апреля 2012

Вы можете сделать то, что сказал @WishCow, или вы можете поместить все операторы MySQL в файл .sql, скопировать этот файл на сервер и затем вызвать mysql для выполнения этих операторов, что-то вроде этого:

echo "show databases;" > test.sql
echo "use some_database;" >> test.sql
echo "show tables;" >> test.sql
scp test.sql remote-user@remote-server:
ssh remote-user@remote-server 'mysql -u mysql-user -pmysql-pass < test.sql'
5 голосов
/ 31 марта 2012

просто используйте ssh для запуска mysql на удаленном сервере. Например

ssh user@server 'mysql -uimauser -p imadb -e "select * from table"'.

Все в кавычках будет запускаться удаленно по ssh.

...