MySQL-databasemigraties automatiseren met Skeema

Skeema is een open-source CLI-tool waarmee u MySQL-databaseschema's kunt synchroniseren over meerdere hosts. Het werkt met gewone SQL-bestanden die CREATE TABLE-instructies bevatten.

Databasemigraties zijn een van de meest voorkomende uitdagingen in het softwareontwikkelingsproces. Hoe versier je je schema en pas je wijzigingen toe in al je omgevingen?

Skeema helpt dit pijnpunt te verlichten door je je schema te laten beheren als gewone SQL. Er is geen speciale syntaxis of configuratiebestandsindeling om te leren. Wanneer je je schema naar een host pusht, zal Skeema de definities van de tabellen op die host ophalen en ze vergelijken met je lokale bestanden. Het berekent dan de CREATE-, ALTER- en DROP-statements om ervoor te zorgen dat de externe host overeenkomt met uw SQL-bestanden.

U moet InnoDB-tabellen gebruiken om het meeste uit Skeema te halen. Het kan werken met MyISAM-tabellen, maar niet alle functies worden ondersteund en u kunt problemen tegenkomen.

Aan de slag

Skeema is beschikbaar voor Linux en Mac. Er worden DEB- en RPM-pakketten aangeboden, evenals vooraf gebouwde zelfstandige binaire bestanden. Pak de juiste download voor uw systeem en installeer het pakket of extraheer het binaire bestand naar een map die op uw pad staat.

Advertentie

De eerste stap bij het gebruik van Skeema is om het bestaande schema van uw database op te halen. Als u al een verzameling SQL-bestanden met CREATE TABLE-instructies hebt, kunt u deze ongewijzigd gebruiken. Voer anders de opdracht skeema init uit om de SQL te krijgen die een live database vertegenwoordigt.

De CLI van Skeema accepteert dezelfde argumenten als het reguliere mysql-commando. Gebruik de vlaggen -h, -u en -p om uw MySQL-host, gebruikersnaam en wachtwoord op te geven. De MySQL-gebruiker moet beheerderstoegang hebben tot uw schema's; anders kan Skeema ze mogelijk niet inspecteren of alle wijzigingen toepassen. Skeema zal uw SQL-bestanden in een nieuwe directory binnen uw werkdirectory plaatsen; voeg de vlag -d toe om te kiezen hoe dit wordt genoemd.

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

Skeema exporteert standaard de SQL voor alle schema's op de host. Elk schema krijgt zijn eigen submap in de map my-sql. Gebruik de vlag –schema om een ​​specifiek schema aan te geven dat u wilt exporteren. Het wordt direct in my-sql geplaatst, zonder enige subdirectory nesting.

Schema's synchroniseren

Zodra u uw SQL hebt, bent u klaar om deze met een andere host te synchroniseren. Gebruik het skeema push-commando om uw lokale SQL te differentiëren met een andere MySQL-server. Skeema zal automatisch alle gedetecteerde wijzigingen toepassen.

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

Probeer een van de CREATE TABLE-instructies in uw SQL te bewerken. Voeg een nieuwe kolom toe of wijzig het type van een bestaande. Wanneer u skeema pusht, genereert Skeema een ALTER TABLE-instructie die de externe tabel bijwerkt zodat deze overeenkomt.

Potentieel destructieve bewerkingen zoals het verwijderen van een tabel of het wijzigen van het gegevenstype van een kolom zijn standaard uitgeschakeld. Dit helpt u onbedoeld gegevensverlies te voorkomen als u Skeema per ongeluk uitvoert of een onjuiste server opgeeft. Destructieve bewerkingen worden geactiveerd door de vlag –allow-unsafe toe te voegen aan skeema push-commando's.

Meerdere omgevingen gebruiken

Een veelvoorkomend gebruik van Skeema is het synchroon houden van meerdere omgevingen. Als je lokale, ontwikkel- en productieservers hebt, kun je ze met Skeema een naam geven zodat je er naadloos tussen kunt pushen en pullen.

Advertentie

Bewerk het .skeema-bestand in je schemadirectory om deze functionaliteit in te schakelen. Dit is een INI-achtige configuratiestructuur waarbij elke sectie een nieuwe benoemde omgeving definieert. Je hebt om te beginnen een enkele productieomgeving, toegevoegd door skeema init.

Specificeer de verbindingsdetails van elke server, zodat u kunt pushen en trekken om alles synchroon te houden. Sleutels boven aan het bestand, buiten elke sectie, zijn globale instellingen die op alle omgevingen worden toegepast.

default-character-set=utf8mb4 default-collation=utf8mb4_general_ci generator=skeema:1.5.2-community schema=example-db [productie] flavour=mysql:8.0 host=example.com port=3306 password=example user=mysql [local] flavour=mysql:8.0 host=localhost port=3306 password=example user=mysql

Nu kunt u eenvoudig wijzigingen tussen omgevingen synchroniseren:

skeema pull lokale skeema push-productie

Deze opdrachtreeks werkt eerst uw SQL-bestanden op de schijf bij zodat ze overeenkomen met het schema van uw lokale server. De wijzigingen worden vervolgens toegepast op de live productieomgeving. Als alternatief kunt u de SQL op de schijf handmatig bewerken en vervolgens naar zowel lokaal als naar productie pushen.

Deze aanpak maakt databasemigraties eenvoudig, herhaalbaar en minder foutgevoelig. U kunt Skeema opnemen in een CI-pipeline om databasewijzigingen in de productie door te voeren als onderdeel van uw normale implementatieproces.

Dry Runs and Lints

< p>Soms wilt u misschien de wijzigingen die een omgeving nodig heeft, controleren zonder ze daadwerkelijk toe te passen. Gebruik in dit geval skeema diff om een ​​benoemde omgeving te vergelijken met uw SQL-bestanden op schijf. Skeema laat je de verschillen zien, zodat je kunt anticiperen op de effecten van een skeema-push.

Advertentie

Skeema heeft ook een ingebouwde pluizentool. Voer skeema lint uit om uw SQL-bestanden te analyseren en mogelijke problemen te vinden. Verschillende configureerbare regels worden ondersteund. Deze helpen u ervoor te zorgen dat uw SQL consistent, ondersteund en compatibel is met moderne MySQL-best practices. Lint-resultaten worden ook getoond tijdens skeema push- en skeema pull-commando's.

Meer opties

Skeema-commando's hebben verschillende gedeelde vlaggen waarmee u bewerkingen kunt aanpassen. Hier zijn enkele van de belangrijkste:

  • negeren-tabel– Geef een lijst op met tabelnamen die u wilt uitsluiten van synchronisatie. Deze tabellen worden niet naar een externe host gepusht of eruit gehaald. De vlag ondersteunt de regex-syntaxis.
  • ignore-trigger – negeer-tabel maar toegepast op triggers.
  • temp-schema – De naam van het tijdelijke schema dat op de databasehost moet worden gemaakt. Deze database wordt door Skeema gebruikt als verzamelplaats voor tussentijdse wijzigingen tijdens push/pull-operaties. Het wordt automatisch verwijderd nadat de bewerking is voltooid.
  • werkruimte – Bepaalt waar het tijdelijke schema wordt gemaakt. De standaard is om de externe host te gebruiken, maar docker wordt ondersteund als een alternatieve waarde. Hiermee wordt voor elke Skeema-bewerking een nieuwe MySQL Docker-container op uw lokale computer gemaakt. Het werkt alleen als je Docker hebt geïnstalleerd.
  • connect-options– Een door komma's gescheiden lijst met MySQL-opties om in te stellen op de externe databaseverbinding, zoals sql_mode='ALLOW_INVALID_DATES',innodb_lock_wait_timeout=1.

Deze opties geven u meer controle over Skeema’ s operaties. Hiermee kunt u de databaseverbinding zo instellen dat deze exact overeenkomt met de MySQL-configuratie van uw toepassing.

Conclusie

Skeema haalt de pijn uit databasemigraties door automatisering te bieden en compatibiliteit met CI/CD-implementatiepijplijnen. Het bevat een ingebouwde SQL-linter, diff-tool en synchronisatiemechanisme.

Een premiumversie voegt extra functionaliteit toe, waaronder de mogelijkheid om met views en triggers te werken. Skeema Premium is een commercieel aanbod dat bovenop de open-source Skeema Community-kern is gebouwd. Het kost $ 99/maand en ondersteunt ook Windows-systemen.

Door Skeema te gebruiken, kunt u gemakkelijker wijzigingen in het databaseschema delen met uw team, waardoor al uw omgevingen gesynchroniseerd blijven. Het is een veiligere keuze dan het handmatig delen van ALTER TABLE-instructies die misplaatst kunnen zijn en die geen canonieke weergave van uw huidige schema creëren.


Posted

in

by

Tags: