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-aktivizues
–injoro-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ë, pordocker
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.