Viktige Merknader om Oppgradering av Databaseserverprogramvare

[Notat]

Notat

Denne delen handler om å installere databaseprogramvare på nytt når en eksisterende database er i bruk. Det gjelder ikke for innledende installasjoner eller hvis det ikke finnes en eksisterende database for pakken som oppdateres, men brukere bør lese gjennom den for å bli bevisst på problemer som kan oppstå i fremtiden.

La oss starte dette kapittelet med et dramatisk skjermbilde av en feil som virkelig skjedde. Denne feilen vil ikke oppstå hvis du installerer databaseprogramvaren for første gang:

$ sudo systemctl status postgresql
-- postgresql.service - PostgreSQL database server
     Loaded: loaded (/usr/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2021-10-26 17:11:53 CDT; 2min 49s ago
    Process: 17336 ExecStart=/usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120 (code=exited, status=1/FAILURE)
        CPU: 7ms

Oct 26 17:11:53 SVRNAME systemd[1]: Starting PostgreSQL database server...
Oct 26 17:11:53 SRVNAME postgres[17338]: 2021-10-26 17:11:53.420 CDT [17338] FATAL:
                database files are incompatible with server
Oct 26 17:11:53 SRVNAME postgres[17338]: 2021-10-26 17:11:53.420 CDT [17338] DETAIL:
                The data directory was initialized by PostgreSQL version 13,
                which is not compatible with this version 14.0.
Oct 26 17:11:53 SRVNAME postgres[17336]: pg_ctl: could not start server
Oct 26 17:11:53 SRVNAME postgres[17336]: Examine the log output.
Oct 26 17:11:53 SRVNAME systemd[1]: postgresql.service: Control process exited, code=exited, status=1/FAILURE
Oct 26 17:11:53 SRVNAME systemd[1]: postgresql.service: Failed with result 'exit-code'.
Oct 26 17:11:53 SRVNAME systemd[1]: Failed to start PostgreSQL database server.

For å unngå situasjoner som dette (dvs. databaseserverprogramvaren din nekter å starte), les følgende diskusjon om den beste måten å oppgradere en DBMS (Databasestyringssystem).

Grunnårsaken til feilen vist ovenfor var en oppgradering av serverprogramvaren til en nyere hovedversjon som forlot datafiler urørt. I dette tilfellet var administratoren i stand til å gjenopprette DBMS uten tap av data.

Selv om du gjør en innledende DBMS installasjon, les gjennom denne seksjonen. Den gir informasjon om implementering av sikkerhetskopiering og gjenopprettings prosedyrer (eller i det minste en strategi for å lage dem) som vil tilfredsstille dine behov og garantere sikkerheten av dataene dine.

Oppgrader Databaseserverpakker

Databasesystemer fungerer på filer som inneholder databasens metadata og data. Den interne strukturen til disse filene er optimalisert for bruk av serverprogramvaren. Når slik serverprogramvare oppgraderes, den nye programvaren kan bruke et annet filformat enn som tidligere var brukt. Noen ganger kan den nye programvaren arbeide med det gamle formatet så vel som det nye—men uten ytelsesforbedringer det nye formatet gir. Andre ganger vil den nye serverprogramvaren formatere datafilene automatisk etter oppgraderingen.

Dessverre er det mest sannsynlige tilfellet at den nye serverprogramvaren klager på utdaterte filformater og utdataer. Når dette skjer, og du har overskrevet den gamle serverprogramvaren, kan du ende opp med et ødelagt system og tapte data.

Endringer i datafilformater skjer vanligvis ved større versjonsendringer, men de kan også forekomme på andre tidspunkter. Før du oppgraderer noen DBMS programvare, sjekk dokumentasjonen for å se om denne oppgraderingen gjør endringer som krever omformatering av databasen.

Selvfølgelig, hvis du har databaser med innhold som ikke er lett gjenoppbygd, er det alltid en god idé å lage sikkerhetskopier av databasen fra fra tid til annen. Før du oppgraderer serverprogramvaren, bør du kjøre en annen sikkerhetskopi.

Oppgrader med Sikkerhetskopiering og Gjenoppretting

[Notat]

Notat

En sikkerhetskopi er ubrukelig hvis det ikke er noen bekreftet prosess for å gjenopprette dataene fra denne sikkerhetskopien. Når du kjører en databaseserver, bør du ikke bare lage sikkerhetskopier; du bør også bekrefte at gjenopprettingsprosessen virkelig fungerer. Tiden for å teste gjenopprettingsprosedyren er før du som snarest trenger å gjenopprette tapte data.

De fleste databaseserverprogramvare gir noen grunnleggende verktøy for å lage sikkerhetskopier av dataene dine. Vanligvis sikkerhetskopiene opprettet med disse verktøyene kan leses av nyere versjoner av programvaren (via en gjenopprettingsverktøy). Bruk av eldre gjenopprettingsverktøy med nyere sikkerhetskopieringsdata er en dårlig idé; du burde aldri blindt anta det vil fungere. Det kan det, men vanligvis gjør det ikke det.

Den enkleste måten å oppgradere databasefilene på er å

  • Lag en fullstendig sikkerhetskopi av databasen ved å bruke de gamle verktøyene.

    Dette trinnet oppretter en frakoblet kopi av databasefilene—for langsiktig arkivering, for katastrofegjenoppretting, eller som forberedelse til en oppgradering. Denne offline sikkerhetskopien består av enten (1) en full en-til-en kopi av gjeldende databasefiler, eller (2) en fullstendig sikkerhetskopi av databasefiler for et bestemt tidspunkt, pluss alle journaldataene (det vil si Oracle® terminologi, kalles det "Kontinuerlig arkivering" eller "write ahead log (WAL)" i Postgresql) som beskriver endringer gjort etter dette tidspunktet. Denne andre formen tar mindre tid å lage (hvis DB programvaren gir denne typen journalføring) fordi du bare har å lagre dataene som er endret siden siste fullstendige sikkerhetskopi ble opprettet.

    Ved oppgradering av databaseserverprogramvare, en fullstendig sikkerhetskopi (som kan brukes til påfølgende inkrementelle sikkerhetskopier) bør være opprettet; men hvis det er mye data, vil en inkrementell sikkerhetskopi være nok. Den beste strategien for deg avhenger av mengden data som er lagret i databasen din (er det noen hundre tabeller rader, eller er det hundrevis av terabyte?). En full backup i sistnevnte tilfelle kan ikke gjøres raskt. For å fullstendig beskytte dataene dine, lag en sikkerhetskopi av de gamle programmene (og/eller deres kilder) og lagre det sammen med datafilene, for å være sikker på at det finnes en reserveløsning hvis den nye programvaren ikke kan lese de gamle dataene.

  • Oppgrader serverprogramvaren

    I dette trinnet, instruksjoner for å bygge databaseserverprogramvaren kjøres akkurat slik de er vist i påfølgende avsnitt om DBM-ene som MariaDB eller Postgresql. Det vil si å bygge programvaren som vanlig ved å bruke BLFS instruksjoner.

  • Gjenopprett databasen ved å bruke de nye verktøyene.

    For å gjenopprette dataene, verktøyene til den nylig installerte serverprogramvaren skal brukes. Under restaureringsprosessen, den nye verktøyet vil opprette og/eller oppgradere datafilene i formatet som ny programvare krever. Det antas at nyere programvare er i stand til lese gamle data.

Siden du allerede har en sikkerhetskopiprosedyre på plass (og du har testet gjenopprettingsprosedyren din, ikke sant?), kan dette være den enkleste måten å oppgradere siden du kan bruke dine velkjente prosesser for å oppgradere akkurat som du alltid gjør—i det minste når det gjelder sikkerhetskopieringen og gjenopprettingen.

Oppgrader Databasefilene ved å Bruke Systemverktøy

Noen databasesystemer (for eksempel Postgresql) gir et verktøy som kan omformatere (oppgradere) de eksisterende databasefilene til det nye formatet. Hvis du trenger å gjenopprette fra en sikkerhetskopi (for eksempel kjøring av oppgraderingsverktøyet mislyktes) må du installere den gamle programvaren på nytt for å gjenopprette dataene dine.

Selv om omformateringsverktøyene kan fungere som annonsert, bør du lage en fullstendig sikkerhetskopi før du kjører dem. En feil kan forårsake alvorlig skade på databasen.

Merknader for spesifikke DBMS

PostgreSQL

Oppstrøms dokumentasjon for sikkerhetskopiering/gjenoppretting: https://www.postgresql.org/docs/current/backup.html

MariaDB

Oppstrøms dokumentasjon for sikkerhetskopiering/gjenoppretting: https://mariadb.com/kb/en/backup-and-restore-overview/

Sqlite

Ikke undervurder Sqlite. Det er en funksjonsrikt DBMS. Hovedforskjellen fra de to store aktørene ovenfor er at Sqlite ikke gir tilgang via en nettverks API. SQLite databaser er alltid lagret på maskinen som kjører programmet som bruker databasen. Manipulering av datainnhold gjøres via API kall til bibliotekfunksjoner direkte i programmet.

I oppstrømsdokumentasjonen kan du finne følgende nyttig:

Dokumentasjon av kommandolinjeverktøyet sqlite3: https://www.sqlite.org/cli.html

Dokumentasjon av sikkerhetskopiering API kall: https://www.sqlite.org/backup.html

Dessverre er det ikke noe dedikert kapittel i oppstrøms dokumentasjon som snakker om sikkerhetskopiering/gjenoppretting, men det er flere artikler om det på Internett. Her er et eksempel.

Dokumentasjon for sikkerhetskopiering/gjenoppretting: https://database.guide/backup-sqlite-database/

LMDB

Som Sqlite, denne programvaren virker på lokale databasefiler; det er ingen nettverksgrensesnitt.

De relevante ressursene for å sikkerhetskopiere/gjenopprette en LMDB-database er manualsidene for mdb_dump og dets motpart mdb_load.