Aqui estão as informações que tenho:
Estou trabalhando com um sistema baseado em Linux usando MySQL e PHP5. Preciso ser capaz de gerar um mysqldump
de dentro de um arquivo .php e, em seguida, ter esse despejo armazenado em um arquivo no servidor em um local que eu especificaria.
Como sou um novato em PHP, gostaria que alguém me desse alguma assistência, orientação ou código, que faria o que eu solicito. Isso teria que ser executado remotamente a partir da Internet.
mysqldump
porsystem()
.Respostas:
Você pode usar a
exec()
função para executar um comando externo.Nota: entre
shell_exec()
eexec()
, eu escolheria o segundo, que não retorna a saída para o script PHP - não há necessidade do script PHP para obter todo o dump SQL como uma string: você só precisa dele escrito em um arquivo, e isso pode ser feito pelo próprio comando.Esse comando externo irá:
mysqldump
, com os parâmetros certos,Por exemplo :
O que significa que seu código PHP seria assim:
Claro, depende de você usar as informações de conexão corretas, substituindo o
...
por aqueles.fonte
exec()
não retornará até que o comando seja concluído; então, basta colocar um poucoecho "dump complete"
depois de ligarexec()
/usr/local/mysql/bin/mysqldump
exec("C:/pathto/mysql/bin/mysqldump.exe <options as above>");
Se você deseja criar um backup para baixá-lo através do navegador, você também pode fazer isso sem usar um arquivo.
A função php passthru () redirecionará diretamente a saída do mysqldump para o navegador. Neste exemplo, ele também será compactado.
Pro: você não precisa lidar com arquivos temporários.
Con: Não funciona no Windows. Pode ter limites com grandes conjuntos de dados.
fonte
Dê uma olhada aqui: https://github.com/ifsnop/mysqldump-php ! É uma solução nativa escrita em php.
Você pode instalá-lo usando o composer, e é tão fácil quanto fazer:
Ele suporta usuários avançados, com muitas opções copiadas do mysqldump original.
Todas as opções são explicadas na página do github, mas mais ou menos são auto-explicativas:
fonte
exec
e / oushell_exec
desabilitados por segurança, mysqldump-php funciona muito bem! Apenas tentei agora nos servidores do Umbler e consegui o despejo com sucesso. Muito obrigado pela dica!Consulte o seguinte link que contém um scriptlet que o ajudará: http://davidwalsh.name/backup-mysql-database-php
Nota: Este script pode conter bugs com tipos de dados NULL
fonte
Por razões de segurança, é recomendado especificar a senha em um arquivo de configuração e não no comando (um usuário pode executar um
ps aux | grep mysqldump
e ver a senha).fonte
Aqui você pode encontrar uma solução abrangente para descartar a estrutura do mysql e dados como no PMA (e sem usar exec, passthru etc.):
https://github.com/antarasi/MySQL-Dump-with-Foreign-keys
É a bifurcação do projeto dszymczuk com minhas melhorias.
O uso é simples
Funciona como um encanto :-)
fonte
Contanto que você tenha permissão para usar exec () , você pode executar comandos shell por meio de seu código PHP.
Supondo que você saiba como escrever o mysqldump na linha de comando, ou seja,
então você pode usar isso como o parâmetro para a função exec ().
fonte
A resposta do MajorLeo me apontou na direção certa, mas não funcionou para mim. Encontrei este site que segue a mesma abordagem e funcionou.
Espero que ajude mais alguém!
fonte
Bem, você sempre pode usar a chamada de função do sistema do PHP.
http://php.net/manual/en/function.system.php
http://www.php.net/manual/en/function.exec.php
Isso executa qualquer programa de linha de comando do PHP.
fonte
<?php exec('mysqldump --all-databases > /your/path/to/test.sql'); ?>
Você pode estender o comando com qualquer opção do mysqldump, é claro. Use
man mysqldump
para mais opções (mas acho que você sabia disso;))fonte
Aqui está outra opção baseada em PHP nativo: https://github.com/2createStudio/shuttle-export
fonte
fonte
Nenhum dos códigos acima funcionou para mim. Estou usando o windows. O código abaixo funcionou para mim ...
Isso salvará o arquivo na pasta do seu projeto de acordo com a sua consulta, quaisquer dados que você deseja.
fonte
Para despejar o banco de dados usando shell_exec (), a seguir está o método:
fonte
fonte