Скриптинг 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'