Databaseserver

Fra Debianguiden
Skift til: Navigation, Søgning

I Debians pakkearkiv kan man finde flere forskellige databaseservere bl.a. MySQL og PostgreSQL. En databaseserver indeholder databaser og dens opgave er at holde styr på hvilke brugere der har adgang til hvilke databaser samt hvilke rettigheder (læse/skrive) brugerne har. Databaser bruges i mange forskellige sammenhænge. Man kan f. eks. bruge en database til at gemme alle sine musik CD'er så man hurtigt kan få en liste frem over dem eller lave søgninger i sin musik samling. Mulighederne med databaser er mange og i de følgende afsnit beskrives det hvordan man kan installere sin helt egen samt værktøjer til administration.

MySQL

MySQL blev i sin tid populær ved at være lille og hurtig, men har siden udviklet sig meget. På MySQLs hjemmeside kan man finde en præcis beskrivelse af hvilke fuktioner de forskellige versioner af MySQL understøtter. Hvis MySQL skal bruges i forbindelse med en applikation, fremgår det som regel af applikationens dokumentation, hvilken version af MySQL der er påkrævet.

Note: Note

Flere applikationer benytter en MySQL database til at gemme deres data i og især webapplikationer som fora, weblogs og ligende. Sådanne applikationer skal som regel kun vide hvilken database de skal bruge og hvilken bruger de kan logge på databaseserveren med, hvorefter de klare resten selv. Derfor vil guiden kun beskæftige sig med nogle grundlæggende ting til at komme hurtig igang. For yderligere dokumentation benytte MySQLs onlinedokumentation. Debian har ingen pakke med MySQL-dokumentation pga. licensproblemer.

Installation

MySQL installeres med:

debian:~#aptitude install mysql-server

Efter installation er MySQL-databaseserveren klar til brug, men administratorbrugeren (root) har ikke noget kodeord. Af sikkerhedsmæssige årsager er det en rigtig god idé at give root et kodeord.

Det følgende eksempel vil give root brugeren kodeordet SiDgAw46:

debian:~# mysqladmin -u root password 'SiDgAw46'

Ved at logge ind på databaseserveren får man præsenteret en kommandoprompt, hvor man kan give databaseserveren kommandoer til f. eks. at oprette en ny database og lægge data ind i den. Følgende eksempel logger root brugeren ind på MySQL-databaseserveren (man bliver selvfølgelig bedt om at angive sit kodeord):

debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 722 to server version: 3.23.49-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> exit
Bye

Når man vil logge ud af MySQL kommandoprompten kan man (præcis som i en almindelig konsol) skrive exit eller bare trykke på Ctrl+D.

Opret en database

For at oprette en database skal du logge på databaseserveren med en bruger der har rettigheder til at oprette nye database som fx root). Log på som vist i afsnittet fra før og skriv følgende på MySQL kommandoprompten for at oprette en database med navnet musik:

mysql> CREATE DATABASE musik;

Opret en bruger

Brugerrettigheder i databaseservere kan være lidt langhåret at komme igang med og MySQL er ingen undtagelse. MySQLs brugerrettigheder ligger i database inde i MySQL databaseserveren, så før en bruger kan blive tilføjet skal man først logge ind på serveren og åbne tabellen mysql.

debian:~# mysql -u root -p mysql

Man kan skræddersy rettighederne til sine brugere, hvilket er en rigtig god ide for at opnår den bedste sikkerhed. Men for at alle kan være med, er det følgende eksempel på at oprette en bruger, forholdsvis enkelt. Vi opretter en bruger der har fulde rettigheder til den nye database oprettet i afsnittet Opret en database.

Følgende opretter brugeren peter med kodeordet GoD4wJ?de og giver ham fuld adgang til databasen musik.

mysql> GRANT ALL PRIVILEGES ON musik.* TO 'peter'@'localhost' IDENTIFIED BY 'GoD4wJ?de';

Note: Note

Adgang via netværk

Debians MySQL standardopsætning gør at man ikke kan forbinde sig til databasen via internettet. Hvis du har brug for at en anden maskine på netværket/internettet skal forbinde til MySQL-serveren, skal du redigere i MySQLs opsætningsfil Opsætningen foregår i filen /etc/mysql/my.cnf og herunder vises den del af filen der har med netværkstilgangen at gøre. bind-address skal være udkommenteret for at man kan få fat i databaseserveren via et netværk.

#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address            = 127.0.0.1

Når man har foretaget ændinger i opsætningsfilen skal man have MySQL serveren til at genindlæse opsætningsfilen. Dette gøres med:

debian:~# /etc/init.d/mysql restart

Backup af database

Samme med MySQL følger nogle værktøjer til at administrere sin databaseserver. En af værktøjerne bruges til at at tage backup af databaser på serveren og hedder mysqldump. Følgende eksempel laver en backup, eller et dump som det hedder af databasen musik.

debian:~# mysqldump -u root -p musik

Andre brugergrænseflader

Når man installere MySQL-serveren får man en kommadoprompt som det eneste interface til sin database. At være nødsaget til at skrive kommandoer til sin databaseserver kan hurtigt blive langhåret og ineffektivt. Heldigvis findes der flere alternativer til at administrere sine databaser. Følgende er en liste over Debian pakker med nogle af disse interfaces.

phpmyadmin

Hvis man bruger MySQL i forbindelse med webudvikling er det nærliggende at bruge PHPMyAdmin, som er en webgrænseflade til databaseserveren. Man kan også sagtens bruge denne selv om man ikke bruger databasen til webudvikling men man skal være klart over at denne grænseflade er afhængig af en webserver med PHP understøttelse.

Hvis man har mere specifikke behov kan man gennem en webserver med PHP understøttelse få adgang til data i databaserne på database serveren. OpenOffice.org kontorpakken har også nogle indbyggede værktøjer til at integrere databaser. Dette er blot et lille udpluk af mulighederne - der er mange flere.

MySQL GUI Tools Bundle

Er du en af de personer der ønsker at benytte et GUI værktøj og ikke vil benytte et web interface som eks. PhpMyAdmin vil du kunne hente MySQLs egen GUI værktøj som er gratis at benytte.

Fordelen ved dette værktøj er at det er nemere for dig at administere din server, du har mulighed for at bruge Stored Producders og Views efterfulgt at rette i dem.

Denne pakke indeholder MySQL Query Browser, MySQL Administrator, MySQL Workbench som værktøj kan du administere din server og database kald direkate fra en Linux, Windows eller OSX platform.

Du kan gratis hente MySQL GUI Tools

PostgreSQL

PostgreSQL er en stærk og pålidelig database som har fokus klassiske database dyder som fks.

  • Standart SQL kompatibel.
  • Komplekse SQL forspøgelser.
  • Mulighedder for at binde tabeller sammen
  • Handlinger som udføres på servere indirekte når man opdaterer data.
  • Alternative måder at se en eller flere tabeller på
  • Mulighed for at binde flere handlinger i en tranaction, så enten alt eller intet bliver gjort.
  • Der er altid styr på hvilke version af data man set på.

Ud over dette har den nogle mulighedder som gør det lettere at udvide og tilpasse ens database, ved at kunne lave nye typer, udvide med server kode i flere sprog for at nævne nogle få.

PostgreSQL har længe haft et ryg for at være svær at arbejde med, hvilke måske nok har været sandt for nogle år siden, men det er bestemt ikke tilfældet mere.

Installation

At installerer PostgreSQL på en Debian platform er lige til.

Følgende skrive blot som "root" bruger.

debian~# apt-get install postgresql

Når det er på plads har du den seneste version af PostgreSQL installeret.

PostgreSQL starter op som "postgres" bruger, så for at kunne gøre noget med den skal man logge ind som denne bruger. Da der ikke er noget password (af sikkerheds grunde), skal man logge ind som root :

debian~# su -

og herefter som "postgres" bruger :

debian# su - postgres

Nu er du postgres super bruger, og det første jeg vil anbefale er at man opretter en super bruger konto, til ens sysadmin (ofte dig der læser dette). Dette kan gøres på følgende måde :

postgres@debian# createuser xx
Shall the new role be a superuser? (y/n)

Svar "y" her og bruger "xx" er nu en super bruger, og denne bruger kan lave næsten alle de ting vi skal bruge fremover.

Opret bruger og database

Vi har set hvordan vi opretter en database super bruger, og denne super bruge kan nu oprette nye databaser og nye brugere.

Den letteste måde er at oprette database brugere der passer sammen med de brugere der er på ens Linux database server.

Så hvis vi vil oprette en bruger der ikke må alting, skriver man følgende som database super bruger :

debian~# createuser bruger
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n

Hvis vi har svaret nej her, vil vi stå med en bruger der kun må komme på en database, men vedkommende må ikke skabe en.

Vi kan efterfølgende lave ham en ny database (stadig som super bruger), som han kan lege med :

debian~# createdb bruger_test --owner=bruger

Nu vil "bruger" kunne bruge databasen "bruger_test".

Dette er en meget enkelt eks. men som ens behov stiger kan er PostgreSQL en virkelig god hjælp da det er muligt at kunne styre tilgangen til en database eller en tabel, på bruger eller gruppe nivaue, så man ender sjældent i en situation hvor databasen ikke kan håndterer den givne situation.

Adgang fra netværk

På en debian er PostgreSQL sat til at lytte på localhost, og argumentet er altid sikkerhed.

Hvis man vil have andre til at tilgå denne database (intranet), kan dette lade sig gøre ved 1 at lytte på maskinens externe IP adresse, og 2 ved at åbne op for extern adgang.

For at få postgreSQL til at lytte på andet end localhost, skal følgende linie ændres i filen "/etc/postgresql/8.3/main/postgresql.conf" (8.3 versions nummeret kan ændre sig).

Lad os sige at vores database server har IP 192.168.1.1, så skal linien :

listen_addresses = 'localhost'

skal ændres til :

listen_addresses = 'localhost,192.168.1.1'

Så vil den lytte til begge IP'er efter genstart, men vil vil også gerne åbne op for at brugere kan komme udefra, og det gøre i filen "/etc/postgresql/8.3/main/pg_hba.conf".

Denne fil indeholder en liste over mulige netværks tilgange, og hvordan PostgreSQL skal forholde sig til det.

Hvis vi skal have mulighed for at få brugere på vores intranet ind, kan vi tilføje følgende linje til denne fil:

# Intranet
host    all         all         192.168.1.0/24       md5

Dette vil åbne op for all brugere der er kendt af databasen, men vil kræve at de logger ind med et password, som der laves en md5 sum af.

Når disse ændringer er lavet skal databasen genstartes, og dette kan gøres ved følgende kommando udført som "root" :

# /etc/init.d/postgresql-8.3 restart

Dette er igen en meget kort gennemgang af postgresql's mulighedder, og der er rigtig mange mulighedder for at tilpasse den til at gøre de ting man lige præcis ønsker. Man kan nøjes med at exportere enkelte databaser, og man kan bede databasen om at bruge "ssl" for at opnå fuld kryptering.

Backup / genskabelse af databaser

Backup af postgreSQL er meget enkelt, og dette er blot en af de simple versioner, da der er flere måder at gøre dette på.

Kommandoen "pg_dump" vil kunne "dumpe" en hel database ud i en fil. Ikke nok med at det er en dump men det er også et "snapshot" eller et øjebliks billed af database sådan som den ser ud når man kører denne kommando. Hvis en anden bruger indsætter, retter eller sletter data fra databasen vil det ikke påvirke dette dump.

Lad os sige at vi har en database der hedder "bruger_test", og vi vil gerne gemme et dump af denne fil i en fil der hedder test_dump.sql, så vil vi skulle lave en kommando der hedder :

debian~# pg_dump bruger_test --file=test_dump.sql 

Når dette er på sin plads har vi en tekst fil der indeholder SQL som vil kunne regenerere en kopi af vores database, sådan som den var da vi satte denne kopi igang.

En ting der er værd at lægge mærke til er at "pg_dump" ikke låser hverken databasen eller tabellen under denne proces.

Hvis vi en dag står og vil genskabe vores database igen, er det meget simpelt, da vi blot skal indlæse hele denne dump fil som en lang SQL kommando fil.

Så vi kunne skrive :

debian~# psql bruger_test --file=test_dump.sql

PostgreSQL's backup system er på den ene side enkelt at bruge, men meget stærkt pga. dens måde at lave snapshots på.

Hintlist

Når man gå igen med at bruge et nyt system, er det altid godt at have en liste af kendte kommandoer ved hånden.

SQL kommando prompt :

debian~# psql [database_navn]

Se en liste af mulige databaser :

debian~# psql -l

Genstart PostgreSQL

# /etc/init.d/postgresql-8.3 restart