Mysql

Dokumentation

Hemsida:  http://www.mysql.com/
Manualer: http://dev.mysql.com/

http://www.slackware.se under Artiklar, Mysql: Signaturen "exz" har skrivit 2 artiklar om Mysql

Mysql Handboken (ISBN: 9163608308, glöm ej söka för bästa pris, kolla även http://www.bokkap.se/)

Dessutom läser vi naturligtvis README och INSTALL dokumenten i mysql-katalogen. ;-)


Konfiguration

Kom ihåg att bli "root" och ställa dig i /usr/local/mysql-standard-4.1.10a-pc-linux-gnu-i686
sedan skapar vi standard databaserna(finns i "scrips")..

# scripts/mysql_install_db

Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
./bin/mysqladmin -u root password 'new-password'
./bin/mysqladmin -u root -h haze password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the ./bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at https://order.mysql.com

..Vi vill inte att servern ska köras som "root" utan vi 
skapar en grupp "mysql" och en användare "mysql"..

# groupadd mysql
groupadd: group mysql exists

# useradd -g mysql mysql
useradd: user mysql exists

..med "-g mysql" menas "initial grupp mysql", som synes
finns dom redan i Slackware.

Då ändrar vi "rättigheterna" så att "root" äger allt 
(-R . (punkt) menas "den katalog du står i och allt "nedanför")..

# chown -R root .

..utom katalogen "data" som vi ger till "mysql"..

# chown -R mysql data

..och gruppen "mysql" överallt.

# chgrp -R mysql .

Konfigurationsfilen ska vara /etc/my.cnf så vi tar en
exempelfil som vi kan redigera om vi vill, dom ligger i "support-files"..

# cp support-files/my-small.cnf /etc/my.cnf 

..den duger som den är

Det finns olika sätt att sätta lösenord, ett ser du ovan
i utskriften från när du skapade databaserna, ett annat är som jag gör. :-).
Först startar vi servern, som du ser ligger inte /usr/local/mysql/bin ännu i
vår PATH (sökväg, det fixar vi sedan, d.v.s. om allt fungerar :-) ..)

# bin/mysqld_safe --user=mysql &
[1] 5981
# Starting mysqld daemon with databases from /usr/local/mysql/data

..och går in i mysql-monitor, som är "textprogrammet" för Mysql..

# bin/mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.10a-standard

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

Byt ut "x-en" mot ditt lösen, men "fnuttarna" ska vara med.

mysql> set password for root@localhost=password('xxxxxxxx');
Query OK, 0 rows affected (0.04 sec)

..logga ut..

mysql> \q
Bye

Logga in och kontrollera.

# bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.10-max-log

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

Det rekommenderas att skapa ett användarkonto för grundläggande
användning, naturligtvis använder du ett bättre lösenord än jag gjort. ;-)
(to användarnamn identified by 'lösenord')

mysql> grant create, create temporary tables, delete, execute,
    -> index, insert, lock tables, select, show databases,
    -> update on *.* to hakan identified by 'hakan';
Query OK, 0 rows affected (0.01 sec)

I och med att jag ansluter till mysqlservern i mina PHP-filer,
måste jag också gör en till "hakan@localhost".

mysql> grant create, create temporary tables, delete, execute,
    -> index, insert, lock tables, select, show databases,
    -> update on *.* to hakan@localhost identified by 'hakan';
Query OK, 0 rows affected (0.01 sec)


mysql> \q
Bye

Då provar vi..
root@haze:~# mysql -u hakan -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.10-max-log

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

mysql> \q
Bye

Bra, det fungerar, då stänger vi servern.

root@haze:~# mysqladmin -p shutdown
Enter password:
STOPPING server from pid file /usr/local/mysql/data/haze.pid
050331 20:52:05  mysqld ended

[1]+  Done                    mysqld_safe --user=mysql
root@haze:~# 

Då ska vi lägga /usr/local/mysql/bin till vår PATH, finns många sätt,
jag gör det "globalt" via /etc/profile, så här blir raden..

# Set the default system $PATH:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/usr/local/mysql/bin"

..kom nu ihåg att bli "root" via "su -", vanliga "su" har inte
"sökvägen".

Exempel

Alla dataprogram är svåra, så det kommer inte som någon överraskning att det också gäller databaser ;-). Manualen för Mysql innehåller "allt", men är du som jag, d.v.s. vill ha en bok, så är min 1:a rekommendation "Mysql Handboken". Den är både för nybörjaren och innehåller även mer komplicerade saker för senare inlärning "nångång".

De båda böckerna om PHP (se PHP-sidan) innehäller också lite grundläggande "sql"-kommandon för att snabbt komma igång.

Även om "exz"(se ovan) inte är nöjd med sin artikel, så tycker jag att den är väl värd en genomläsning :-).

Kort,kort, nyckelord (kommandon) i SQL är inte skifteskänsliga, men identifierarna (databasnamn,tabellnamn m.m.) är det i ett UNIX-system.

Starta servern och logga in med din användare, först
ska vi skapa en egen databas MIN_DATA..

mysql> create database MIN_DATA;

..och så går vi in i den..

mysql> use MIN_DATA;

..och skapar 3 st. tabeller, ADRESSER, ADRESSER1,
ADRESSER2 och TELEFON är redan upptagna av min egen "Adressbok",
så jag har fått använda andra nummer, du kan naturligtvis "börja från
början", se bara till att du är konsekvent.
Radbrytningen är bara för att det ska bli tydligare..

ADRESSER3

mysql> create table ADRESSER3 (
    -> ID int not null auto_increment primary key,
    -> EFTERNAMN varchar(15) not null,
    -> FORNAMN varchar(15) not null,
    -> ADRESS varchar(30),
    -> POSTNR int(6),
    -> ORT varchar(15),
    -> HEM varchar(15),
    -> ARB varchar(15),
    -> MOBIL varchar(15),
    -> EPOST varchar(35);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual 
that corresponds to your MySQL server version for the right syntax to use 
near '' at line 11

Garanterat inte sista gången ni ser nåt sånt, ser ni att jag glömt
stänga parentesen, jag kan bläddra i angivna kommandon med piltangenterna 
upp/ner så jag behöver inte skriva om, nu kommer kommandot "på rad"

mysql> create table ADRESSER3 ( ID int not null auto_increment primary key,
 EFTERNAMN varchar(15) not null, FORNAMN varchar(15) not null, ADRESS varchar(30),
 POSTNR int(6), ORT varchar(15), HEM varchar(15), ARB varchar(15), MOBIL varchar(15),
 EPOST varchar(35));
Query OK, 0 rows affected (0.04 sec)

Nu ska vi sätta in lite värden..

mysql> insert into ADRESSER3 values (null,"Nilsson","Nils","Nilsvägen 10",
    -> 12345,"Nilsstad","0110-12345","0120-54321","070-7654321",
    -> "nils.nilsson@nilsson.ni");
Query OK, 1 row affected (0.00 sec)

mysql> insert into ADRESSER3 values (null,"Nilsson","Sven","Svenvägen 10",
    -> 12345,"Svenstad","0110-65432","0120-23456","070-1234567",
    -> "sven.nilsson@nilsson.sv")
Query OK, 1 row affected (0.00 sec)

mysql> insert into ADRESSER3 values (null,"Karlsson","Sven","Karlsvägen 10",
    -> 12345,"Karlstad","4444-12345","4444-54321","070-4567891",
    -> "sven.karlsson@karlsson.ka");
Query OK, 1 row affected (0.00 sec)

Värdet "null" för ID gör att, via "auto_increment",
mysql sätter ett unikt värde där (ökas med 1 som förval).

Utskriften blir väldigt konstig i mysql-monitor med så många kolumner så jag delar upp ADRESSER i två mindre..

ADRESSER4

mysql> create table ADRESSER4 (
    -> ID int not null auto_increment primary key,
    -> EFTERNAMN varchar(15) not null,
    -> FORNAMN varchar(15) not null,
    -> ADRESS varchar(30),
    -> POSTNR int(6),
    -> ORT varchar(15));
Query OK, 0 rows affected (0.00 sec)

..värden..

mysql> insert into ADRESSER4 values (null,"Nilsson","Nils","Nilsvägen 10"
    -> 12345,"Nilsstad");
Query OK, 1 row affected (0.00 sec)

mysql> insert into ADRESSER4 values (null,"Nilsson","Sven","Svenvägen 10"
    ->54321,"Svenstad");
Query OK, 1 row affected (0.00 sec)

mysql> insert into ADRESSER4 values (null,"Karlsson","Sven","Karlsvägen 10"
    -> 12345,"Karlstad");
Query OK, 1 row affected (0.00 sec)

..nu tittar vi..

mysql> select * from ADRESSER4;
+----+-----------+---------+---------------+--------+----------+
| ID | EFTERNAMN | FORNAMN | ADRESS        | POSTNR | ORT      |
+----+-----------+---------+---------------+--------+----------+
|  1 | Nilsson   | Nils    | Nilsvägen 10  |  12345 | Nilsstad |
|  2 | Nilsson   | Sven    | Svenvägen 10  |  54321 | Svenstad |
|  3 | Karlsson  | Sven    | Karlsvägen 10 |  12345 | Karlstad |
+----+-----------+---------+---------------+--------+----------+
3 rows in set (0.00 sec)

TELEFON1

mysql> create table TELEFON1 (
    -> ID int not null primary key,
    -> HEM varchar(15),
    -> ARB varchar(15),
    -> MOBIL varchar(15),
    -> EPOST varchar(35));
Query OK, 0 rows affected (0.00 sec)

..värden, lägg märke till att jag använder det ID-nr som har tilldelats i ADRESSER4..

mysql> insert into TELEFON1 values (1,"0110-12345","0120-54321","070-7654321",
    -> "nils.nilsson@nilsson.ni");
Query OK, 1 row affected (0.00 sec)

mysql> insert into TELEFON1 values (2,"0110-65432","0120-23456","070-1234567",
    -> "sven.nilsson@nilsson.sv");
Query OK, 1 rows affected (0.00 sec)

mysql> insert into TELEFON1 values (3,"4444-12345","4444-54321","070-4567891",
    -> "sven.karlsson@karlsson.ka");
Query OK, 1 row affected (0.00 sec)

..nu tittar vi..
mysql> select * from TELEFON1;
+----+------------+------------+-------------+---------------------------+
| ID | HEM        | ARB        | MOBIL       | EPOST                     |
+----+------------+------------+-------------+---------------------------+
|  1 | 0110-12345 | 0120-54321 | 070-7654321 | nils.nilsson@nilsson.ni   |
|  2 | 0110-65432 | 0120-23456 | 070-1234567 | sven.nilsson@nilsson.sv   |
|  3 | 4444-12345 | 4444-54321 | 070-4567891 | sven.karlsson@karlsson.ka |
+----+------------+------------+-------------+---------------------------+
3 rows in set (0.00 sec)

Då ska vi titta på lite på det hela..

mysql> show databases;
+----------+
| Database |
+----------+
| MIN_DATA |
| dynsite  |
| mysql    |
| test     |
+----------+
4 rows in set (0.00 sec)

mysql> use MIN_DATA;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_MIN_DATA |
+--------------------+
| ADRESSER           |
| ADRESSER2          |
| ADRESSER3          |
| ADRESSER4          |
| TELEFON            |
| TELEFON1           |
+--------------------+
6 rows in set (0.00 sec)

mysql> describe ADRESSER4;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| ID        | int(11)     |      | PRI | NULL    | auto_increment |
| EFTERNAMN | varchar(15) |      |     |         |                |
| FORNAMN   | varchar(15) |      |     |         |                |
| ADRESS    | varchar(30) | YES  |     | NULL    |                |
| POSTNR    | int(6)      | YES  |     | NULL    |                |
| ORT       | varchar(15) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

..sedan kan du själv börja experimentera med dom..lycka till..och titta också under PHP-sidan så fär du lite mer att "joxa" med. :-).


Grafik!

Jag har nästan alla "libs" som finns.. ;-), så det är lite svårt att säga vilka som behövs, men enklast brukar vara att prova köra kommandot. Programmet säger då till vad som fattas, du kan även titta på dom olika "specialsidorna" som jag visar under "Manual".


Mysql-Administration

Manual: http://dev.mysql.com/doc/administrator/en/index.html

root@haze:/usr/local# cd mysql-administrator/bin/

root@haze:/usr/local/mysql-administrator/bin# ./mysql-administrator

bild
Prova med 127.0.0.1 om inte "localhost" fungerar..

bild
..jag har inte lärt mig ett dugg ännu.. jag sparar det till någon regning dag. ;-)
..men snyggt är det!


Mysql-Query-browser

Manual: http://dev.mysql.com/doc/query-browser/en/index.html

root@haze:/usr/local# cd mysql-query-browser/bin/
root@haze:/usr/local/mysql-query-browser/bi# ./mysql-query-browser

./mysql-query-browser-bin: error while loading shared libraries:
libstdc++.so.6: cannot open shared object file:
No such file or directory

Söker, och hittar paketet cxxlibs-6.0.0-i486-1.tgz

finns också här

http://ftp.tcrc.edu.tw/Linux/Slackware/9.0-current/slackware/a/

Gå till katalogen där du laddat ner det och..

#installpkg cxxlibs-6.0.0-i486-1.tgz

..sedan..

# cd mysql-query-browser/bin/

root@haze:/usr/local/mysql-query-browser/bin# ./mysql-query-browser

bild
..och sedan..

bild
..titta under "Help".


Mysqlcc

"Hemsida": http://www.mysql.com/products/mysqlcc/index.html , utvecklas inte längre!

root@haze:/usr/local# cd mysqlcc

root@haze:/usr/local/mysqlcc# ./mysqlcc

bild
Samma här..

bild
..får väl hoppas att det regnar hela sommaren.. :-)

Valid HTML 4.01!