Como despejar banco de dados remoto sem mysqldump?


8

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á mysqldumparquivos 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 mysqlcliente de linha de comando. Como posso despejar o conteúdo para um arquivo à la mysqldumpno 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.comao 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.


1
Eu sugiro que você conceda permissões 'user'@'localhost'além 'user'@'mysql.example.com'do MySQL, em vez de editar o arquivo hosts.
Znarkus

Respostas:


15

Você pode definir um túnel ssh e usar mysqldumpem sua máquina local.

ssh -f -L 3306:localhost:3306 user@remoteserver -N
mysqldump -P 3306 -h localhost -u dbuser dbname

1
No Unix, 'localhost' é tratado de maneira diferente. Na qual, o número da porta é ignorado, você precisa usar 127.0.0.1 para fazer isso funcionar. dev.mysql.com/doc/refman/5.0/en/connecting.html
Adrian Gunawan


0

Carregue este script no seu servidor web (espero que você tenha pelo menos acesso FTP), inicie-o, especifique o nome / host do banco de dados (endereço do seu "servidor separado") / nome de usuário / senha e despeje o banco de dados em qualquer local que desejar ...


0

Se o seu servidor for um servidor Web, você pode usar um script PHP que despeja o banco de dados na tela. No seu servidor de backup, coloque um cron que wget a página de despejo. Em seguida, seu banco de dados é despejado no servidor de backup apenas por HTTP.

Não se esqueça da segurança: todos estão disponíveis para despejar sua base. Coloque uma senha ou uma limitação de IP ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.