Скриптинг MySQL из BASH через SSH

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

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

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

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

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

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

3 ответа

Вы можете указать команды для запуска на удаленной машине в качестве последнего аргумента для 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.

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

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

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

Вы можете сделать то, что сказал @WishCow, или вы можете поместить все операторы MySQL в .sql file, скопируйте этот файл на сервер и затем вызовите 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'
Другие вопросы по тегам