Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Por que meu script de backup de banco de dados não está funcionando em php?


Isso não funcionará para fazer backup de seu banco de dados como um script SQL, a menos que seu banco de dados seja apenas um banco de dados de brinquedo, o equivalente a um script "hello world".

Esse roteiro é assustador. Você não deve usá-lo para fazer backup de um banco de dados. Esse script foi postado antes:PHP Database Script de despejo - há algum problema?

  • Nenhuma verificação de erro após mysql_connect() ou mysql_queries(). Você provavelmente acabou de fornecer uma senha errada ou algo assim, mas nunca saberia porque o script não verifica se a conexão foi bem-sucedida.

  • Ele não produzirá a instrução INSERT correta se seu banco de dados contiver NULLs.

  • Os conjuntos de caracteres não são manipulados.

  • addlashes() é não é adequado para escapar de dados.

  • Os nomes das tabelas não são delimitados.

  • Não faz backup de visualizações, procedimentos, funções ou gatilhos.

  • mysql_query() armazena resultados, então se você tiver uma tabela com milhares de linhas ou mais, você excederá seu limite de memória PHP. Na verdade, o script concatena a série de instruções INSERT em uma única variável PHP. Portanto, antes de terminar, você terá todos banco de dados representado na memória.

Ninguém deve usar esse script. É um lixo total, e eu não digo isso de ânimo leve.

Apenas use shellexec() para executar o mysqldump.

@Álvaro G. Vicario tem um bom ponto, você não precisa nem usar PHP para essa tarefa. Eu estava assumindo que você precisa fazer um backup de um script PHP. Veja como eu criaria um backup de um script cron:

Crie um script de shell, ele pode ser chamado do que você quiser, por exemplo. mymysqldump.sh. Veja como eu escreveria:
:
: ${BACKUP_HOST:="localhost"}
: ${BACKUP_DATABASE:="mydatabase"}
: ${BACKUP_DIR:="/opt/local/var/db/mysql5/backups"}
: ${BACKUP_FILE:="${DATABASE}-`date +%Y%m%d%H%M%S`"}

mysqldump -h ${BACKUP_HOST} ${BACKUP_DATABASE} > ${BACKUP_DIR}/${BACKUP_FILE}

Claro que personalize os valores das variáveis ​​conforme necessário para o seu ambiente.

Você pode notar que o nome de usuário e a senha não neste arquivo. Por favor, não coloque senhas em scripts em texto simples para que todos possam lê-los. Em vez disso, vamos colocá-los em um arquivo de opções para torná-lo mais seguro.

Crie um usuário especial do sistema operacional que irá executar o backup do cron. Seu sistema pode ter um usuário especial "mysql" ou "_mysql" para executar o MySQL Server, mas este usuário pode estar configurado para não ter um diretório home válido. Você precisa de um usuário que tenha um diretório inicial. Vamos chamá-lo de "meu backup".

No diretório inicial desse usuário, crie um arquivo .my.cnf com o seguinte conteúdo:
[mysqldump]
user = alupto_backup
password = xyzzy

Onde "alupto_backup" e "xyzzy" são o nome de usuário do MySQL e sua senha (altere-os para o seu ambiente). Defina a propriedade e o modo deste arquivo para que apenas seu proprietário possa lê-lo:
chown mybackup .my.cnf
chmod 600 .my.cnf

Crie um diretório bin na home deste usuário e coloque nosso script de shell nele.
mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin

Agora você pode executar o script de shell para testá-lo:
sh ~mybackup/bin/mymysqldump

Agora crie um arquivo cron para este usuário:
crontab -u mybackup

@daily ~mybackup/bin/mymysqldump

Deve ser isso.