6.3. MySQL

MySQL er et stærkt SQL-database program, som folkene bag ikke tøver med at udråbe som "en af de hurtigste databaser, overhovedet"

Siden MySQL i sommeren 2000 ændrede sine licensbetingelser, sådan at alle fremtidige versioner af MySQL bliver udgivet under GPL-licensen, er MySQL efterhånden blevet et fast indslag i alle de store Linux-distributioner.

Hos MySQL anbefaler man dog, at Mandrake-(8.x) og RedHat(7.x)-brugere installerer MySQL ved hjælp af rpm-pakker hentet fra MySQL's websted, da distributions-pakkerne er kompileret med en version af gcc, der er kendt for at være problematisk i forhold til MySQL. Det kan derfor have ført til fejlbehæftede rpm-pakker, og det sikreste er derfor at hente pakkerne hos MySQL.

Hvis formålet med øvelsen er at "prøvekøre" en MySQL-installation, kan der dog næppe ske noget ved at installere pakkerne fra distributions-cd-rommen.. Hvis du vælger, at installere fra cd-rom'en - og har plads nok - så installér blot alle MySQL-pakkerne, så skulle du være kørende.

Hvis du vælger at hente de anbefalede pakker fra nettet, kan de hentes på adressen: www.mysql.com, eller fra sunsite.dk's danske spejling, sunsite.dk/mysql/ De nyeste versioner af MySQL er udviklingsversionerne, og bør derfor undgås. Den version, der er benævnt "stable release", eller "recommended" (i skrivende stund version 3.23.49) er den du ønsker at hente.

For at opnå en brugbar installation skal du som minimum hente og installere følgende pakker:

Når du nu er i gang, så vil følgende pakker sikkert gøre livet nemmere på lang sigt (de er for eksempel krævede i forbindelse med installationen af PHP med MySQL-understøttlse - læs herom senere)

Pakkerne installeres på følgende måde


[root@hven /downloads]# rpm -ivh MySQL-X.XX.XX.i386.rpm
[root@hven /downloads]# rpm -ivh MySQL-client-X.XX.XX.i386.rpm
[root@hven /downloads]# rpm -ivh MySQL-devel-x.XX.XX.i386.rpm
[root@hven /downloads]# rpm -ivh MySQL-shared-X.XX.XX.i386.rpm

Hvor X.XX.XX erstattes med versionsnummeret.

Nu er MySQL installeret, og der er blevet skabt de relevante opstartsfiler således, at MySQL startes automatisk under opstart af maskinen. For at tjekke om programmet allerede kører, kan du prøve at indtaste


[root@hven /root]# mysqladmin version

Hvis du får vist versionsnummer, uptime mm., kører MySQL allerede. Hvis MySQL ikke kører, kan du starte den med:


[root@hven /root]# /etc/rc.d/init.d/mysql start &

Nu er du parat til at gå i gang. Der er allerede under installationen oprettet en bruger, "root" (denne "root" har ikke noget med maskinens "root" at gøre - der er tale om MySQL's "superbruger") som har adgang til at foretage ændringer i databaserne. Denne bruger skal nu have et password:


[root@hven /root]# mysqladmin -u root password 'hemmeligt'

Lad os nu prøve at oprette en database, som vi kalder "bog". Først starter vi klientprogrammet:


[root@hven /root]# mysql -u root --password=hemmeligt

Nu er vi i forbindelse med MySQL og prompten skifter til en MySQL-prompt.

Her følger så lidt (My)SQL-gymnastik. Først skal vi oprette en database


mysql> CREATE DATABASE bog;

Dernæst vælger vi den nye base


mysql> USE bog

Hvorpå vi opretter en simpel tabel i basen


mysql> CREATE TABLE linuxbog(kapitel INT, titel varchar(40));

En database uden indhold er der ikke meget sjov ved, så vi fylder lidt data på tabellen


mysql> INSERT INTO linuxbog (kapitel,titel) VALUES (0,'Forord');
mysql> INSERT INTO linuxbog (kapitel,titel) VALUES (2,'Introduktion');

Der er ikke noget "kapitel 0", så vi retter vores indtastning til "kapitel 1"


mysql> UPDATE linuxbog SET kapitel=1 WHERE kapitel=0;

Nu vil vi gerne se, hvilke data, der rent faktisk er i vores tabel


mysql> SELECT * FROM linuxbog ORDER BY kapitel;

Og så sletter vi kapitel 1 (hvis du undlader at udføre de to sidste trin, kan databasen bruges sammen med PHP-eksemplet i Afsnit 6.3.1.


mysql> DELETE FROM linuxbog WHERE kapitel=1;

Og her sletter vi tabellen


mysql> DROP TABLE linuxbog;

Hvis du synes, at kommandolinje-klienten er lidt tung at danse med, så er du ikke den eneste. Heldigvis findes der flere alternativer. På MySQL's websted kan du under »download«-sektionen finde en lang liste over "contributed software", og på freshmeat.net kan du ligeledes finde mange forskellige grafiske klientprogrammer. Et program, der ser meget lovende ud er MySQL's eget MyCC, som i skrivende stund kan hentes i en alpha-test-udgave fra MySQL's »download«-sektion. Har du mod på at installere apache webserveren og PHP (se nedenfor) kan du hente det glimrende webbaserede program, phpMyAdmin, som gør livet ikke så lidt nemmere for den nye bruger (også for den øvede - for den sags skyld). Pakken kan hentes i forskellige komprimerede formater hoswww.phpwizard.net/projects/phpMyAdmin/

MySQL er mere end blot et database program; det er en database-server. Det betyder, at man - hvis man er oprettet som bruger og er blevet tildelt de passende rettigheder - ved hjælp af et klient-program kan koble sig på serveren via internet, lave opslag, intaste data, ændre data etc. Disse muligheder falder udenfor dette kapitels rammer, men der findes et par tutorials på bl.a http://www.devshed.com, der er værd at læse desangående.

6.3.1. PHP + MySQL

PHP er et fortolket sprog, der kan bruges til at skabe dynamiske websider. En af de helt store fordele ved PHP er evnen til at kommunikere med forskellige databaseprogrammer, og PHP "taler" usædvanlig godt med MySQL.

Før du kan bruge PHP, skal din webserver understøtte sproget. På et RedHat-system (7.x) opnås dette nemmest ved at installere følgende rpm-pakker fra distributions-cd-rommen:


[root@hven /root]# rpm -ivh apache_1.3.XX.i386.rpm
[root@hven /root]# rpm -ivh php-4.0.x.i386.rpm
[root@hven /root]# rpm -ivh php-mysql-4.0.x.i386.rpm

Start Apache med kommandoen


[root@hven /root]# /etc/rc.d/init.d/httpd start

Nu kan det ske, at Apache fortæller, at den ikke kan "determine local host...". I så fald skal du åbne /etc/httpd/conf/httpd.conf i din favorit-editor og finde frem til linjen


#ServerName localhost

Fjern #-symbolet, gem og start Apache igen.

Her er et lille eksempel på, hvorledes Apache, PHP og MySQL kan arbejde sammen om at hente data fra en database i MySQL og præsentere dem på en webside. Databasen der bruges, er basen "bog", som blev oprettet i Afsnit 6.3.


<HTML>
    <HEAD>
        <TITLE>LinuxBog MySQL PHP</TITLE>   
    </HEAD>
<BODY>
<?php  // Her skiftes der fra alm. HTML til PHP-kode

$conn = mysql_connect("localhost","root","hemmeligt");  // Åben en forbindelse til MySQL

$sql="SELECT * FROM linuxbog ORDER BY kapitel";  // Udfør en læsning fra tabellen linuxbog

$res = mysql_db_query("bog",$sql);

echo "<TABLE border=1><TR><TD colspan=2 bgcolor=#CCCCCC>";  //start en tabel
echo "<CENTER>Linuxbog</CENTER></TD></TR>";

  for ($n = 0; $n < mysql_numrows($res); $n++ ) {  // For alle poster (linjer), udskriv indholdet
                                                                      // i en lille tabel
    $post = mysql_fetch_array($res);
    
    echo "<TR><TD>$post[kapitel]</TD><TD> $post[titel]</TD></TR>\n";
  }
  
echo "</TABLE>";  // afslut tabel

mysql_freeresult($res);  // Frigiv hukommelse

mysql_close($conn);  // Luk forbindelsen

?>  

</BODY></HTML>

Kopier eventuelt dette eksempel, og indsæt det i et tomt dokument, som du gemmer som "test.php" i Apaches dokumentrod (/home/httpd/html/test.php). Kald filen igennem en webbrowser (http://localhost/test.php), og se hvad der sker.

Du kan læse meget mere om PHP på www.php.net, og du kan finde tutorials og programmer på www.devshed.com, www.hotwired.com og mange, mange andre steder på nettet.