Olá, amantes do Habra! Hoje eu decidi compartilhar minha versão do backup de dados do MySql e falar sobre como ele pode ser usado para controle de versão no Git. E se você estiver interessado em saber como pode monitorar o estado do banco de dados em todas as etapas do desenvolvimento, ou apenas fazer os backups corretos do banco de dados do projeto e implantá-lo a qualquer momento, leia-o!
O que é isso
Este é um conjunto de scripts escritos em BASH, que permitem trabalhar em praticamente qualquer máquina em que esse shell funcione, projetado para facilitar a criação e implantação de backups. A idéia original era que você pudesse criar pontos de interrupção do banco de dados ao escrever um projeto por uma equipe de desenvolvedores e armazená-lo em um gita, sei que existem coisas mais sérias para esse propósito, e essa solução não afirma estar no seu lugar.
Para quem?
Por exemplo, você prefere desenvolver o site imediatamente na hospedagem do cliente e monitorar o progresso do desenvolvimento e as alterações no banco de dados. Você tem pouco dinheiro (ou o sapo estrangula) para gastá-lo em bons produtos de controle de versão de banco de dados. Você também pode usar o projeto como um backup de dados para determinadas regras, que podem ser usadas pelo crown. E é claro que é útil se você é um desenvolvedor iniciante e está começando a aprender os conceitos básicos do desenvolvimento, e periodicamente possui o 500º e não sabe o porquê. Ou você está desenvolvendo um produto como uma equipe e deseja sincronizá-lo automaticamente com a produção ao enviar para o mestre a avaliação do cliente.
Considere um exemplo de desenvolvimento de site padrão no lado do host (na maioria dos casos):
- Há um servidor no qual o projeto está girando e, provavelmente, é uma máquina local ou um cliente que hospeda o projeto atual.
- Existe um computador local no qual você trabalha e, de acordo com a tradição, armazena arquivos e instantâneos de estados lá.
- E Produção, é aqui que o produto final se funde - mas também pode ser o 1º item, apenas mais uma pasta.
Como trabalhar com isso?
Para estar em conformidade com o controle de versão do banco de dados usando o git, obviamente você precisa obter seus dumps em alguns estágios, onde armazená-los em algum lugar e, ao alternar ramificações, leve esse ponto em consideração. Para isso, usei git hooks, que são os arquivos dos scripts correspondentes (eles devem ser instalados no computador local em que o git é usado). Dependendo das configurações do arquivo de configuração, o processo de trabalho pode ser da seguinte maneira:
Criamos uma filial (o backup ocorreu automaticamente) e alternamos, trabalhamos, adicionamos arquivos, criamos uma confirmação (o backup ocorreu automaticamente) ...
alternado para verificação mestre, o banco de dados mudou para o estado anterior ...
retornou ao desenvolvimento, filiais mescladas, iniciadas. I.e. os backups são criados automaticamente durante as confirmações,
forçado antes da finalização da compra, o comportamento é configurado na configuração. Você pode chamar manualmente para exportar ou importar o banco de dados no servidor, do computador local, executando o script apropriado.
Para cada script, você pode obter ajuda da maneira clássica usando os argumentos -h ou --help.
Eu não recomendo fazer backup de todo o banco de dados, o git não gosta de arquivos grandes e, na maioria dos casos, isso não é necessário. Portanto, você pode configurar facilmente usando o config.ini
as configurações são usadas no servidor (no qual o mySql é gerado) e no cliente (computador do desenvolvedor), o mesmo arquivo é responsável pela configuração. E, claro, pode ser o mesmo computador se você estiver desenvolvendo localmente.
O que pode ser configurado para criar um despejo
- Configurações de conexão com o banco de dados e caminhos de armazenamento de despejo
- Indicação de um provedor que poderá não apenas obter dados de conexão com o banco de dados, mas
e limpe corretamente o cache no servidor ao alternar ramificações. - Exportar banco de dados inteiro
- Lista de tabelas a serem excluídas da exportação
- Ou exporte tabelas específicas
- Salvando uma estrutura sem inserir dados em determinadas tabelas
- A especificação de campos para tabelas cujos valores não devem ser exportados e deve
ser substituído pelos valores padrão. - Conjuntos de regras separados em uma configuração, o que permitirá que você faça backups diferentes pelo CRON
Para facilitar o processo de criação de lixões. Eu usei provedores de arquivos. E configurado (até agora o único) para a revolução do CMS MODX. Com base nisso, você pode escrever o mesmo provedor para qualquer CMS.
Breves etapas para começar
, .git, , git [git clone ](https://github.com/Setest/.git-db-watcher) chmod +x install.sh; ./install.sh , ./install.sh -nh
Agora você precisa fazer alterações no config.ini
. Por exemplo, assim:
; [hooks] ; H_CHECK_DB_HASH_BEFORE_CHECKOUT=1 ; checkout ; ; git checkout -b new_branch_name H_CHECKOUT_FORCE=0 ; H_CHECKOUT_EVERCOM=1 ; H_CHECKOUT_CLEARCACHE=1 [common] ; EXPORT_FILE="db.sql" ; ; ./export.sh [develop] ; db_export.sh CLI_DB_EXPORT="ssh host '/path/to/project/on/server/.git-db-watcher/db_export.sh'" CLI_DB_IMPORT="ssh host '/path/to/project/on/server/.git-db-watcher/db_import.sh'" ; [server] PHP_PATH="/usr/local/bin/php" CONFIG_INC_PATH="/path/to/project/on/server/core/config/config.inc.php" PROVIDER=modx DB_TABLES_INCLUDE=site_content DB_TABLES_AUTOPREFIX=1 [server_full_site] PHP_PATH="/usr/local/bin/php" CONFIG_INC_PATH="/path/to/project/on/server/core/config/config.inc.php" ; '' - DB_CONFIG_ ; providers PROVIDER=modx ; DB_CONFIG_HOST= DB_CONFIG_TYPE= DB_CONFIG_USER= DB_CONFIG_PASSWORD= DB_CONFIG_CONNECTION_CHARSET= DB_CONFIG_DBASE= DB_CONFIG_TABLE_PREFIX= DB_CONFIG_DATABASE_DSN= ; ( ) ; ; DB_TABLES_INCLUDE=manager_log register_messages user_attributes ; DB_TABLES_INCLUDE=site_content ; ; DB_TABLES_EXCLUDE=session register_messages mse2_words ec_messages ; , , DB_TABLES_AUTOPREFIX=1 ; INSERT DB_TABLES_REMOVE_INSERT="manager_log session register_messages" ; DB_TABLES_REMOVE_INSERT="manager_log" ; ; DB_TABLES_DEFAULT=user_attributes users DB_TABLES_DEFAULT=user_attributes ; , ; , ; DB_TABLES_DEFAULT_user_attributes=sessionid logincount lastlogin thislogin ; DB_TABLES_DEFAULT_users=session_stale ; , [only_users] DB_TABLES_INCLUDE=user user_attributes EXPORT_FILE="users.sql" DB_TABLES_DEFAULT=user_attributes user DB_TABLES_DEFAULT_user_attributes=sessionid logincount lastlogin thislogin DB_TABLES_DEFAULT_users=session_stale
Se tudo estiver configurado corretamente, você poderá executar ./export.sh
e deverá
Um dump do banco de dados aparecerá no computador local e no servidor.
Outras perguntas
Preciso salvar o resultado no servidor em outro local:
./db_export.sh --output 1>./xxx.sql
Quero exportar no servidor usando os dados na minha seção do arquivo de configuração:
./db_export.sh -=only_users --output 1>./users.sql
Quero importar um arquivo de banco de dados, mas não quero fazer isso por meio de interceptadores GIT?
./import.sh ./import.sh EXPORT_FILE=site_name.sql ./import.sh DB_BACKUP_FILE=/.../../site_name.sql ./import.sh --config=site DB_BACKUP_FILE=./site_name.sql
A como importar enquanto estiver no servidor?
./db_import.sh < db_backup/db.sql
Em projetos diferentes, eu uso o CMS xxx e estou cansado de inserir dados sempre
para gerenciamento de banco de dados, como posso simplificar o processo?
Para fazer isso, é necessário gravar o arquivo do provedor por analogia com os existentes.
Criei um trabalho e configuração CRON usando o provedor php, mas ele
não está em execução ou o cache do site do CMS não foi limpo, qual poderia ser o problema?
Dependendo das configurações do servidor e do trabalho em si, os trabalhos CRON podem ser executados em um ambiente completamente diferente, no qual o caminho para o pré-processador php pode diferir e, como resultado, executar uma versão completamente diferente do php que não é compatível com a execução do seu CMS.
Posfácio
Eu nunca escrevi scripts no BASH e, portanto, provavelmente nagovokodil , Tenho certeza de que há profissionais competentes que, se estiverem interessados, poderão adicionar suas edições. Vou desenvolver o projeto como o interesse recebido e a identificação de erros no trabalho.
E não fede imediatamente que nada está funcionando, talvez você não consiga descobrir como configurar e instalar corretamente (especialmente se estiver trabalhando no Windows, mas o BASH é um ambiente Linux).
As instruções de instalação e uso estão em README. Tentei escrever imediatamente em inglês, mas também por causa do meu nível de amador, talvez nem tudo fique claro, no futuro escreverei em russo. Se você quiser fazer alterações na tradução ou no código, garfo para a saúde! E se houver um bom conselho - compartilhe-o.
PS: se você ler no final, ficou interessante e ansioso para tentar :-)
Então vá mais ousado a esta referência!