Si të automatizoni migrimet e bazës së të dhënave MySQL me Skeema


Skeema është një mjet CLI me burim të hapur që ju lejon të sinkronizoni skemat e bazës së të dhënave MySQL në disa hoste. Ai funksionon me skedarë të thjeshtë SQL që përmbajnë deklarata CREATE TABLE.

Migrimet e bazës së të dhënave janë një nga sfidat më të zakonshme në procesin e zhvillimit të softuerit. Si e versiononi skemën tuaj dhe si aplikoni ndryshime në të gjitha mjediset tuaja?

Skeema ndihmon në zbutjen e kësaj pike dhimbjeje duke ju lejuar të menaxhoni skemën tuaj si SQL të rregullt. Nuk ka asnjë sintaksë të veçantë ose format skedari konfigurimi për të mësuar. Kur e shtyni skemën tuaj deri te një host, Skeema do të tërheqë përkufizimet e tabelave në atë host dhe do t'i ndajë ato me skedarët tuaj lokalë. Më pas do të llogaritë deklaratat CREATE, ALTER dhe DROP për të bërë që hosti në distancë të përputhet me skedarët tuaj SQL.

Ju do të duhet të përdorni tabelat InnoDB për të përfituar sa më shumë nga Skeema. Mund të funksionojë me tabelat MyISAM, por jo të gjitha veçoritë mbështeten dhe mund të hasni probleme.

Fillimi

Skeema është në dispozicion për Linux dhe Mac. Ofrohen paketa DEB dhe RPM, si dhe binare të pavarura të para-ndërtuara. Merrni shkarkimin e duhur për sistemin tuaj dhe ose instaloni paketën ose nxirrni binarin në një drejtori që është në rrugën tuaj.

Faza e parë në përdorimin e Skeema është të merrni skemën ekzistuese të bazës së të dhënave tuaja. Nëse keni tashmë një koleksion skedarësh SQL me deklarata KRIJO TABELA, mund t'i përdorni ato siç janë. Përndryshe, ekzekutoni komandën skeema init për të marrë SQL që përfaqëson një bazë të dhënash të drejtpërdrejtë.

CLI i Skeema pranon të njëjtat argumente si komanda e rregullt mysql. Përdorni flamujt -h, -u dhe -p për të specifikuar hostin tuaj MySQL, emrin e përdoruesit dhe fjalëkalimin. Përdoruesi i MySQL duhet të ketë akses administrativ në skemat tuaja; përndryshe, Skeema mund të mos jetë në gjendje t'i inspektojë ato ose të zbatojë të gjitha ndryshimet. Skeema do të depozitojë skedarët tuaj SQL në një direktori të re brenda drejtorisë tuaj të punës; shtoni flamurin -d për të zgjedhur se si quhet.

skeema init -h example.com -u root -p -d my-sql

Skeema paracakton eksportimin e SQL për të gjitha skemat në host. Çdo skemë do të marrë nëndirektorinë e vet brenda dosjes my-sql. Përdorni flamurin --schema për të treguar një skemë specifike për eksport. Ai do të vendoset drejtpërdrejt në my-sql, pa ndonjë fole nëndirektorie.

Skemat sinkronizuese

Pasi të keni marrë SQL-në tuaj, jeni gati ta sinkronizoni atë me një host tjetër. Përdorni komandën skeema push për të dalluar SQL-në tuaj lokale nga një server tjetër MySQL. Skeema do të zbatojë automatikisht çdo ndryshim që zbulon.

cd my-sql
skeema push -h example.com -u root -p -d my-sql

Provoni të redaktoni një nga deklaratat CREATE TABLE në SQL tuaj. Shtoni një kolonë të re ose ndryshoni llojin e një kolone ekzistuese. Kur skeema shtyn, Skeema do të gjenerojë një deklaratë ALTER TABLE që përditëson tabelën në distancë për t'u përshtatur.

Operacionet potencialisht shkatërruese si heqja e një tabele ose ndryshimi i llojit të të dhënave të një kolone janë çaktivizuar si parazgjedhje. Kjo ju ndihmon të shmangni humbjen e paqëllimshme të të dhënave nëse përdorni Skeema aksidentalisht ose specifikoni një server të pasaktë. Operacionet destruktive aktivizohen duke shtuar flamurin --allow-unsafe në komandat skeema push.

Përdorimi i mjediseve të shumta

Një përdorim i zakonshëm i Skeema është mbajtja e mjediseve të shumta në sinkron. Nëse keni serverë lokalë, zhvillues dhe prodhimi, Skeema ju lejon t'i emërtoni ata në mënyrë që të mund t'i shtyni dhe tërhiqni pa probleme midis tyre.

Redaktoni skedarin .skeema në drejtorinë tuaj të skemës për të aktivizuar këtë funksionalitet. Kjo është një strukturë konfigurimi e ngjashme me INI ku çdo seksion përcakton një mjedis të ri të emërtuar. Do të keni një mjedis të vetëm prodhimi, të shtuar nga skeema init, si fillim.

Specifikoni detajet e lidhjes së secilit server në mënyrë që të mund të shtyni dhe tërhiqni për të mbajtur gjithçka të sinkronizuar. Tastet në krye të skedarit, jashtë çdo seksioni, janë cilësime globale të aplikuara në të gjitha mjediset.

default-character-set=utf8mb4
default-collation=utf8mb4_general_ci
generator=skeema:1.5.2-community
schema=example-db

[production]
flavor=mysql:8.0
host=example.com
port=3306
password=example
user=mysql

[local]
flavor=mysql:8.0
host=localhost
port=3306
password=example
user=mysql

Tani mund të sinkronizoni lehtësisht ndryshimet midis mjediseve:

skeema pull local
skeema push production

Kjo sekuencë komanduese së pari përditëson skedarët tuaj SQL në disk që të përputhen me skemën e serverit tuaj lokal. Ndryshimet aplikohen më pas në mjedisin e drejtpërdrejtë prodhimi. Përndryshe, mund të redaktoni manualisht SQL-në në disk dhe më pas të shtyni te local dhe prodhimi.

Kjo qasje e bën migrimin e bazës së të dhënave të thjeshta, të përsëritshme dhe më pak të prirur ndaj gabimeve. Ju mund të inkorporoni Skeema në një tubacion CI për të futur ndryshimet e bazës së të dhënave në prodhim si pjesë e rrjedhës suaj të rregullt të vendosjes.

Vrapime të thata dhe linte

Ndonjëherë mund të dëshironi të kontrolloni ndryshimet që i nevojiten një mjedisi pa i zbatuar ato. Në këtë rast, përdorni skeema diff për të krahasuar një mjedis të emërtuar me skedarët tuaj SQL në disk. Skeema do t'ju tregojë ndryshimet në mënyrë që të mund të parashikoni efektet e një shtytjeje skeema.

Skeema gjithashtu ka një vegël të integruar të gardhit. Ekzekutoni skeema lint për të analizuar skedarët tuaj SQL dhe për të gjetur probleme të mundshme. Mbështeten disa rregulla të konfigurueshme. Këto ju ndihmojnë të siguroheni që SQL-ja juaj të jetë e qëndrueshme, e mbështetur dhe e pajtueshme me praktikat më të mira moderne të MySQL. Rezultatet e Lint shfaqen gjithashtu gjatë komandave skeema push dhe skeema pull.

Me shume opsione

Komandat Skeema kanë disa flamuj të përbashkët që ju lejojnë të personalizoni operacionet. Këtu janë disa nga më të rëndësishmet:

  • tabela e injorimit – Përcaktoni një listë me emrat e tabelave për t'u përjashtuar nga sinkronizimi. Këto tabela nuk do të shtyhen në një host të largët ose nuk do të tërhiqen prej tij. Flamuri mbështet sintaksën regex.
  • injoro-aktivizuesinjoro-tabela por zbatohet për aktivizuesit.
  • temp-schema – Emri i skemës së përkohshme për t'u krijuar në hostin e bazës së të dhënave. Kjo bazë të dhënash përdoret nga Skeema si një terren për ndryshime të ndërmjetme gjatë operacioneve shtytje/tërheqje. Ajo fshihet automatikisht pasi të përfundojë operacioni.
  • hapësira e punës – Kontrollon se ku krijohet skema e përkohshme. Parazgjedhja është përdorimi i hostit në distancë, por docker mbështetet si një vlerë alternative. Kjo do të krijojë një kontejner të ri MySQL Docker në makinën tuaj lokale për çdo operacion Skeema. Do të funksionojë vetëm nëse keni të instaluar Docker.
  • opsionet e lidhjes – Një listë e veçuar me presje opsionesh MySQL për t'u vendosur në lidhjen e bazës së të dhënave në distancë, si p.sh. sql_mode=ALLOW_INVALID_DATES,innodb_lock_wait_timeout=1.

Këto opsione ju japin më shumë kontroll mbi operacionet e Skeema. Ata ju lejojnë të konfiguroni lidhjen e bazës së të dhënave që të përputhet saktësisht me konfigurimin MySQL të aplikacionit tuaj.

konkluzioni

Skeema largon dhimbjen nga migrimet e bazës së të dhënave duke ofruar automatizim dhe pajtueshmëri me tubacionet e vendosjes CI/CD. Ai përfshin një linter të integruar SQL, mjet diff dhe mekanizëm sinkronizimi.

Një version premium shton funksionalitet shtesë duke përfshirë aftësinë për të punuar me pamjet dhe aktivizuesit. Skeema Premium është një ofertë komerciale e ndërtuar mbi bazën e Komunitetit Skeema me burim të hapur. Shitet me pakicë me 99 dollarë në muaj dhe gjithashtu mbështet sistemet Windows.

Miratimi i Skeema e bën më të lehtë për ju që të ndani ndryshimet e skemës së bazës së të dhënave me ekipin tuaj, duke i mbajtur të gjitha mjediset tuaja të sinkronizuara. Është një zgjedhje më e sigurt sesa ndarja manuale e deklaratave ALTER TABLE që mund të jenë të gabuara dhe të mos krijojnë një paraqitje kanonike të skemës tuaj aktuale.