Halo, pecinta Habra! Hari ini saya memutuskan untuk membagikan versi cadangan data saya dari MySql dan berbicara tentang bagaimana itu dapat digunakan untuk kontrol versi di Git. Dan jika Anda tertarik mengetahui bagaimana Anda dapat memantau keadaan database di semua tahap pengembangan, atau hanya membuat cadangan yang benar dari database proyek Anda dan menyebarkannya kapan saja, maka silakan baca!
Apa ini
Ini adalah sekumpulan skrip yang ditulis dalam BASH, yang memungkinkan mereka untuk bekerja di hampir semua mesin tempat cangkang ini bekerja, yang dirancang untuk memfasilitasi pembuatan dan penyebaran cadangan. Gagasan orisinalnya adalah Anda dapat membuat breakpoint basis data saat menulis proyek oleh tim pengembang, dan menyimpannya dalam gita, saya tahu bahwa ada hal yang lebih serius untuk tujuan ini, dan solusi ini tidak mengklaim berada di tempatnya.
Untuk siapa?
Misalnya, Anda lebih suka untuk mengembangkan situs segera di hosting pelanggan dan memantau kemajuan pengembangan dan perubahan dalam database. Entah Anda memiliki sedikit uang (atau kodok tercekik) untuk membelanjakannya pada produk kontrol versi database yang baik. Anda juga dapat menggunakan proyek sebagai cadangan data untuk aturan tertentu, yang dapat digunakan oleh mahkota. Dan tentu saja, ini akan berguna jika Anda adalah pengembang pemula dan baru mulai mempelajari dasar-dasar pengembangan, dan Anda secara berkala memiliki yang ke-500 dan Anda tidak tahu mengapa. Atau Anda sedang mengembangkan produk sebagai tim dan ingin menyinkronkannya secara otomatis dengan produksi ketika mendorong ke master untuk mengevaluasi pelanggan.
Pertimbangkan contoh pengembangan situs standar di sisi host (kebanyakan kasus):
- Ada server tempat proyek berputar dan kemungkinan besar itu adalah mesin lokal atau klien hosting dari proyek saat ini.
- Ada komputer lokal tempat Anda bekerja dan, menurut tradisi, menyimpan file dan potret keadaan di sana.
- Dan Produksi, di sinilah produk akhir bergabung - tetapi juga bisa menjadi item pertama, hanya folder lain.
Bagaimana cara mengatasinya?
Untuk mematuhi kontrol versi dari database menggunakan git, jelas Anda perlu mendapatkan dump-nya pada beberapa tahap, tempat menyimpannya di suatu tempat, dan ketika berpindah cabang, pertimbangkan hal ini. Untuk ini, saya menggunakan kait git, yang merupakan file dari skrip yang sesuai (mereka harus diinstal pada komputer lokal tempat git digunakan). Bergantung pada pengaturan file konfigurasi, proses kerja mungkin terlihat sebagai berikut:
Kami membuat cabang (pencadangan berlangsung secara otomatis) dan beralih, bekerja, menambahkan file, membuat komit (pencadangan berlangsung secara otomatis) ...
beralih ke verifikasi induk, basis data beralih ke status sebelumnya ...
kembali ke pengembangan, menggabungkan cabang, dimulai. Yaitu cadangan secara otomatis dibuat selama komit,
baik dipaksakan sebelum checkout, perilaku ini dikonfigurasi dalam konfigurasi. Anda dapat secara manual memanggil ekspor atau impor database di server, dari komputer lokal Anda, dengan menjalankan skrip yang sesuai.
Untuk setiap skrip, Anda bisa mendapatkan bantuan dengan cara klasik menggunakan argumen -h atau --help.
Saya tidak menyarankan untuk mencadangkan seluruh database, git tidak suka file besar, dan dalam kebanyakan kasus ini tidak diperlukan. Oleh karena itu, Anda dapat dengan mudah mengkonfigurasi menggunakan config.ini
Karena pengaturan digunakan baik di sisi server (di mana mySql dinaikkan) dan sisi klien (komputer pengembang), file yang sama bertanggung jawab untuk konfigurasi. Dan tentu saja, itu bisa menjadi komputer yang sama jika Anda mengembangkan secara lokal.
Apa yang bisa dikonfigurasi untuk membuat dump
- Pengaturan koneksi basis data dan jalur penyimpanan dump
- Indikasi penyedia yang akan dapat tidak hanya memperoleh data koneksi database, tetapi
dan menghapus cache di server dengan benar saat berpindah cabang. - Ekspor seluruh basis data
- Daftar tabel yang akan dikecualikan dari ekspor
- Atau ekspor tabel spesifik
- Menyimpan struktur tanpa memasukkan data dalam tabel tertentu
- Menentukan bidang untuk tabel yang nilainya tidak boleh diekspor, dan harus
diganti dengan nilai default. - Aturan terpisah diatur dalam satu konfigurasi, yang akan memungkinkan Anda untuk melakukan backup yang berbeda dengan CRON
Untuk memfasilitasi proses pembuatan dump. Saya menggunakan penyedia file. Dan mengatur (sejauh ini satu-satunya) untuk revolusi CMS MODX. Berdasarkan itu, Anda dapat menulis penyedia yang sama untuk CMS apa pun.
Langkah singkat untuk memulai
, .git, , git [git clone ](https://github.com/Setest/.git-db-watcher) chmod +x install.sh; ./install.sh , ./install.sh -nh
Sekarang Anda perlu membuat perubahan ke config.ini
. Misalnya, seperti ini:
; [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
Jika semuanya dikonfigurasi dengan benar, Anda dapat menjalankan ./export.sh
dan Anda harus melakukannya
Database dump akan muncul di komputer lokal dan di server.
Pertanyaan lain
Saya perlu menyimpan hasilnya di server ke tempat lain:
./db_export.sh --output 1>./xxx.sql
Saya ingin mengekspor di server menggunakan data di bagian saya dari file konfigurasi:
./db_export.sh -=only_users --output 1>./users.sql
Saya ingin mengimpor file database, tetapi saya tidak ingin melakukan ini melalui interceptor 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 cara mengimpor saat berada di server?
./db_import.sh < db_backup/db.sql
Dalam proyek yang berbeda, saya menggunakan CMS xxx dan saya bosan memasukkan data setiap kali
untuk manajemen basis data, bagaimana saya bisa menyederhanakan prosesnya?
Untuk melakukan ini, Anda perlu menulis file penyedia Anda dengan analogi dengan yang sudah ada.
Saya membuat pekerjaan CRON dan konfigurasi menggunakan penyedia php, tetapi itu
tidak berjalan, atau cache situs CMS tidak dihapus, apa masalahnya?
Bergantung pada pengaturan server dan pekerjaan itu sendiri, pekerjaan CRON dapat berjalan di lingkungan yang sama sekali berbeda, di mana jalur ke preprosesor php mungkin berbeda dan, sebagai akibatnya, menjalankan versi php yang sama sekali berbeda yang tidak kompatibel dengan yang sedang dijalankan oleh CMS Anda.
Kata penutup
Saya tidak pernah menulis skrip pada BASH dan karena itu mungkin nagovokodil , Saya yakin ada orang-orang yang kompeten yang, jika tertarik, akan dapat menambahkan suntingan mereka. Saya akan mengembangkan proyek sebagai minat yang masuk dan identifikasi kesalahan dalam pekerjaan.
Dan jangan langsung bau bahwa tidak ada yang berfungsi, mungkin Anda tidak bisa mengetahui cara mengkonfigurasi dan menginstal dengan benar (terutama jika Anda bekerja pada Windows, namun BASH adalah lingkungan Linux).
Petunjuk instalasi dan penggunaan ada di README. Saya mencoba untuk segera menulis dalam bahasa Inggris, tetapi juga karena tingkat amatir saya, mungkin tidak semuanya akan jelas, di masa depan saya akan menulis dalam bahasa Rusia. Jika Anda ingin membuat perubahan pada terjemahan atau kode, garpu untuk kesehatan! Dan jika ada saran yang bagus - bagikan.
PS: jika Anda membaca sampai ke bawah, maka menjadi menarik dan bersemangat untuk mencoba :-)
Lalu, lebih berani untuk referensi ini!