Versionskontrollmechanismus der GIT-Datenbank (MySQL-Dump-Management)

Hallo Habra-Liebhaber! Heute habe ich beschlossen, meine Version der Datensicherung von MySql zu teilen und darüber zu sprechen, wie sie für die Versionskontrolle in Git verwendet werden kann. Wenn Sie wissen möchten, wie Sie den Status der Datenbank in allen Entwicklungsphasen überwachen oder einfach die richtigen Sicherungen Ihrer Projektdatenbank erstellen und jederzeit bereitstellen können, lesen Sie diese bitte!


Was ist das?


Dies ist eine Reihe von in BASH geschriebenen Skripten, mit denen sie auf fast jedem Computer arbeiten können, auf dem diese Shell funktioniert, um die Erstellung und Bereitstellung von Sicherungen zu erleichtern. Die ursprüngliche Idee war, dass Sie Datenbank-Haltepunkte erstellen können, wenn Sie ein Projekt von einem Entwicklerteam schreiben und in einer Gita speichern. Ich weiß, dass es für diesen Zweck ernstere Dinge gibt, und diese Lösung behauptet nicht, an ihrer Stelle zu sein.


Für wen?


Sie möchten die Site beispielsweise lieber sofort auf dem Hosting des Kunden entwickeln und den Entwicklungsfortschritt und die Änderungen in der Datenbank überwachen. Entweder haben Sie wenig Geld (oder die Kröte erwürgt), um es für gute Datenbankversionskontrollprodukte auszugeben. Sie können das Projekt auch als Datensicherung für bestimmte Regeln verwenden, die von Crown verwendet werden können. Und natürlich ist es praktisch, wenn Sie ein unerfahrener Entwickler sind und gerade erst anfangen, die Grundlagen der Entwicklung zu erlernen. Sie haben regelmäßig den 500. und wissen nicht warum. Oder Sie entwickeln ein Produkt als Team und möchten es automatisch mit der Produktion synchronisieren, wenn Sie sich an den Master wenden, um den Kunden zu bewerten.


Betrachten Sie ein Beispiel für die Standard-Site-Entwicklung auf der Host-Seite (in den meisten Fällen):


  1. Es gibt einen Server, auf dem sich das Projekt dreht, und höchstwahrscheinlich handelt es sich entweder um einen lokalen Computer oder um einen Client, auf dem das aktuelle Projekt gehostet wird.
  2. Es gibt einen lokalen Computer, für den Sie arbeiten und der traditionell dort Dateien und Schnappschüsse von Zuständen speichert.
  3. Und in der Produktion wird hier das Endprodukt zusammengeführt - es kann aber auch das erste Element sein, nur ein weiterer Ordner.

Wie arbeite ich damit?


Um die Versionskontrolle der Datenbank mit git zu gewährleisten, müssen Sie die Dumps natürlich in einigen Phasen abrufen, wo sie irgendwo gespeichert werden sollen, und beim Wechseln der Zweige diesen Punkt berücksichtigen. Dafür habe ich Git-Hooks verwendet, die die Dateien der entsprechenden Skripte sind (sie müssen auf dem lokalen Computer installiert sein, auf dem Git verwendet wird). Abhängig von den Einstellungen der Konfigurationsdatei kann der Arbeitsprozess wie folgt aussehen:


Wir erstellen einen Zweig (Sicherung erfolgte automatisch) und wechseln, arbeiten, fügen Dateien hinzu, erstellen ein Commit (Sicherung erfolgte automatisch) ...
auf Master-Verifikation umgestellt, die Datenbank auf den vorherigen Zustand umgestellt ...
kehrte zur Entwicklung zurück, fusionierte Niederlassungen, begann. Das heißt, Backups werden automatisch während Commits erstellt.
Entweder vor dem Auschecken erzwungen, wird das Verhalten in der Konfiguration konfiguriert. Sie können den Export oder Import der Datenbank auf dem Server von Ihrem lokalen Computer aus manuell aufrufen, indem Sie das entsprechende Skript ausführen.


Für jedes Skript können Sie mithilfe der Argumente -h oder --help auf klassische Weise Hilfe erhalten.


Ich empfehle nicht, die gesamte Datenbank zu sichern, git mag keine großen Dateien, und in den meisten Fällen ist dies nicht erforderlich. Daher können Sie die Konfiguration einfach mit config.ini Da die Einstellungen sowohl auf der Serverseite (auf der mySql ausgelöst wird) als auch auf der Clientseite (dem Computer des Entwicklers) verwendet werden, ist dieselbe Datei für die Konfiguration verantwortlich. Und natürlich kann es derselbe Computer sein, wenn Sie lokal entwickeln.


Was kann konfiguriert werden, um einen Speicherauszug zu erstellen


  • Datenbankverbindungseinstellungen und Speicherauszugspfade
  • Angabe eines Anbieters, der nicht nur Datenbankverbindungsdaten abrufen kann, sondern
    und leeren Sie den Cache auf dem Server korrekt, wenn Sie die Zweige wechseln.
  • Exportieren Sie die gesamte Datenbank
  • Liste der Tabellen, die vom Export ausgeschlossen werden sollen
  • Oder exportieren Sie bestimmte Tabellen
  • Speichern einer Struktur ohne Einfügen von Daten in bestimmte Tabellen
  • Angeben von Feldern für Tabellen, deren Werte nicht exportiert werden sollen und sollten
    durch Standardwerte ersetzt werden.
  • Separate Regelsätze in einer Konfiguration, mit denen Sie verschiedene Sicherungen von CRON durchführen können

Um den Prozess der Erstellung von Dumps zu erleichtern. Ich habe Dateianbieter verwendet. Und einrichten (bisher die einzige) für die CMS MODX-Revolution. Basierend darauf können Sie für jedes CMS denselben Anbieter schreiben.


Kurze Schritte, um loszulegen


  ,       .git,   ,     git [git clone ](https://github.com/Setest/.git-db-watcher)          chmod +x install.sh;   ./install.sh   ,     ./install.sh -nh 

Jetzt müssen Sie Änderungen an config.ini . Zum Beispiel so:


 ;  [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 

Wenn alles richtig konfiguriert ist, können Sie ./export.sh und Sie sollten
Auf dem lokalen Computer und auf dem Server wird ein Datenbankspeicherauszug angezeigt.


Andere Fragen


Ich muss das Ergebnis auf dem Server an einem anderen Ort speichern:

  ./db_export.sh --output 1>./xxx.sql 

Ich möchte mit den Daten in meinem Abschnitt der Konfigurationsdatei auf den Server exportieren:

  ./db_export.sh -=only_users --output 1>./users.sql 

Ich möchte eine Datenbankdatei importieren, dies jedoch nicht über GIT-Interceptors.

  ./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 

Wie importiere ich auf dem Server?

  ./db_import.sh < db_backup/db.sql 

In verschiedenen Projekten verwende ich CMS xxx und habe es satt, jedes Mal Daten einzugeben
Wie kann ich den Prozess für die Datenbankverwaltung vereinfachen?

Dazu müssen Sie Ihre Provider-Datei analog zu den vorhandenen schreiben.


Ich habe einen CRON-Job und eine Konfiguration mit dem PHP-Anbieter erstellt, aber es
läuft nicht oder der CMS-Site-Cache wird nicht geleert. Was könnte los sein?

Abhängig von den Servereinstellungen und dem Job selbst können CRON-Jobs in einer völlig anderen Umgebung ausgeführt werden, in der sich der Pfad zum PHP-Präprozessor unterscheiden kann. Infolgedessen wird eine völlig andere Version von PHP ausgeführt, die nicht mit der Version kompatibel ist, auf der Ihr CMS ausgeführt wird.


Nachwort


Ich habe nie Skripte auf BASH geschrieben und daher wahrscheinlich Nagovokodil Ich bin sicher, es gibt kompetente Leute, die bei Interesse ihre Änderungen hinzufügen können. Ich werde das Projekt als das ankommende Interesse und die Identifizierung von Fehlern in der Arbeit entwickeln.


Und stinken Sie nicht sofort, dass nichts funktioniert. Vielleicht können Sie nicht herausfinden, wie Sie es richtig konfigurieren und installieren (insbesondere, wenn Sie unter Windows arbeiten, BASH jedoch eine Linux-Umgebung ist).


Installations- und Gebrauchsanweisungen finden Sie in README. Ich habe versucht, sofort auf Englisch zu schreiben, aber auch wegen meines Amateurlevels wird vielleicht nicht alles klar sein, in Zukunft werde ich auf Russisch schreiben. Wenn Sie Änderungen an der Übersetzung oder am Code vornehmen möchten, geben Sie Ihre Gesundheit! Und wenn es gute Ratschläge gibt - teilen Sie sie.


PS: Wenn du ganz unten liest, wurde es interessant und wollte es unbedingt versuchen :-)


Dann gehen Sie mutiger zu dieser Referenz!

Source: https://habr.com/ru/post/de449868/


All Articles