Quero despejar o banco de dados no meu site hospedado remotamente em intervalos regulares usando um script de shell. Infelizmente, o servidor está bloqueado, não há mysqldump
arquivos instalados, os arquivos binários não podem ser executados por usuários normais / em diretórios pessoais (por isso não consigo "instalá-lo") e o banco de dados fica em um servidor separado. não pode pegar os arquivos diretamente.
A única coisa que posso fazer é efetuar login no servidor da web via SSH e estabelecer uma conexão com o servidor de banco de dados usando o mysql
cliente de linha de comando. Como posso despejar o conteúdo para um arquivo à la mysqldump
no formato SQL?
Bônus: se possível, como posso despejar o conteúdo diretamente no final da conexão SSH?
Eu gosto da idéia do túnel SSH proposta abaixo, no entanto, eu precisaria dobrar o túnel.
localhost -> remote web server -> remote database server
Isso funciona bem:
$ ssh -f -L 3306:mysql.example.com:3306 user@ssh.example.com -N
No entanto, a tentativa de efetuar login no mysql falha:
$ mysqldump -P 3306 -h localhost -u user -p db
Enter password:
mysqldump: Got error: 1045: Access denied for user 'user'@'localhost'
(using password: YES) when trying to connect
Eu acho que espera que as credenciais do usuário sejam 'user'@'mysql.example.com'
. Como posso convencê-lo a usá-lo em vez do host "real"?
Ok, eu consegui trabalhar adicionando 127.0.0.1 mysql.example.com
ao meu arquivo de hosts e conectando via mysqldump -P 3306 -h mysql.example.com -u user -p db
. Problema resolvido! Eu ainda estaria interessado em uma solução que não exija a edição do arquivo hosts.
'user'@'localhost'
além'user'@'mysql.example.com'
do MySQL, em vez de editar o arquivo hosts.