MYSQL Start Wie geht das ? zurück

Als früherer Nutzer von DBASE3+ und MSACCESS 2.0 kommt einem mysql am Anfang ziemlich kryptisch vor.

Kompliziert wird die Sache auch dadurch dass es eine SERVER CLIENT Datenbank ist , die für Netzwerke konzipiert ist.

Zunächst braucht man aber mal eine ganz stinknormale Tabelle auf dem lokalen Rechner.

##################

1.Erleichtern kann man sich den Zugriff mit phpAdmin , dieser erlaubt einen Zugriff über eine interaktive Website auf localhost:

http://localhost/phpMyAdmin/

Die Frage ist dann wo phpAdmin die Tabellen hinspeichert ? file:/var/lib/mysql ??

Man kann Sie aber als csv excel file exportieren und dann wieder in andere Programme einlesen .

Außerdem muß erst einmal laufen:



  1. mysql

  2. apache

  3. konqueror oder anderer browser

  4. und man muß wo der phpAdmin steht bzw hininstalliert wurde

  5. php muß auch vorhanden sein



-#-#-#-#-#-#-

Ganz gut geht der Zugriff auch über den Gambas Datenbankmangager im Projektfenster

Dazu muß Gambas installiert sein

Die Gambas Datenbank Komponente muß vorhanden sein.

mysql muß gestartet sein

Die Datenbankbeispielprogramme laufen irgendwie ziemlich schlecht.

Ganz gut zum Test ist das Gambasprogramm db11

-#-#-#-#-#-#-

MYSQL Starten

/etc/init.d/mysql start

Stoppen

/etc/init.d/mysql stop

Beispiel

linux:~ # /etc/init.d/mysql start

Starting service MySQL

done

linux:~ # mysql

ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)

linux:~ # mysql -p diesisteintest54

Enter password:

ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES)

linux:~ # mysql -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 3 to server version: 4.0.18



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

mysql>



Wichtig sind die Zugangspasswörter zu mysql . Die muß man sich unbedingt merken

Am Anfang ist der USER root und das Passwort ist NO also keines



+++++++++++++++++++++++++++++++++++++++++

mysql> status

--------------

mysql Ver 12.22 Distrib 4.0.18, for suse-linux (i686)



Connection id: 3

Current database:

Current user: root@localhost

SSL: Not in use

Current pager: less

Using outfile: ''

Server version: 4.0.18

Protocol version: 10

Connection: Localhost via UNIX socket

Client characterset: latin1

Server characterset: latin1

UNIX socket: /var/lib/mysql/mysql.sock

Uptime: 9 min 27 sec



Threads: 1 Questions: 2 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 0 Queries per second avg: 0.004

+++++++++++++++++++++++++++

wwwrun was steht dort ?



Es gibt eine log Datei für mysql

Beispiel:

050322 23:40:24 mysqld ended

050324 09:01:00 mysqld started

/usr/sbin/mysqld: ready for connections.

Version: '4.0.18' socket: '/var/lib/mysql/mysql.sock' port: 3306



Die ersten Versuche mysql in Gang zu bringen

Vorher muss man alles in YAST2 installiert haben !!



Starte ich mysql von der Konsole erhalte ich folgende Fehlermeldung :



mysql

ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)



Startet man MYSQL mit dem Befehl mysqladmin

Daraufhin kommt eine große Anzeige mit vielen Hilfstexten: siehe mysqladmin.htm



rho@linux:~> mysqladmin start slave

mysqladmin: connect to server at 'localhost' failed

error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'

Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!



rho@linux:~> cd /var/lib/mysql

rho@linux:/var/lib/mysql> ls -la

insgesamt 1

drwxr-xr-x 2 mysql daemon 48 2004-04-06 04:16 .

drwxr-xr-x 28 root root 744 2004-06-19 22:51 ..

rho@linux:/var/lib/mysql>

==> Existiert nicht wie kann man es anlegen



Unter su kann man mit dem Befehl ifconfig einiges über die Netzwerkverbindung abfragen:

( Dieser Befehl funktioniert nur mit Rootrechten )



linux:/home/rho # ifconfig

lo Protokoll:Lokale Schleife

inet Adresse:127.0.0.1 Maske:255.0.0.0

inet6 Adresse: ::1/128 Gültigkeitsbereich:Maschine

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:298 errors:0 dropped:0 overruns:0 frame:0

TX packets:298 errors:0 dropped:0 overruns:0 carrier:0

Kollisionen:0 Sendewarteschlangenlänge:0

RX bytes:19804 (19.3 Kb) TX bytes:19804 (19.3 Kb)



Mit netstat -an|more kann man wieder einiges über die Netzwerkkonfiguration herausfinden



bash-2.02# netstat -an|more

Active Internet connections (including servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN

--More--



Thema: MySql server starten

Diskussionsgruppe: Linux

Hi!

Habe ein Problem. Habe mit Yast2 alle Mysql komponenten installiert die bei Suse 8.2 dabei waren. Nur bringe ich jetzt leider den Mysql Server nicht zum laufen.

Wenn ich mich mit

mysql -u root localhost

mit dem server verbinden möchte schreit er

Can't connect to local MYSQL Server through socket 'var/lib/mysql/mysql.sock'

Wie kann ich den mysql server starten?...Komme nämlich von Windows und hab keine Ahnung wie ich ihn unter Linux starte

Bitte um eure Hilfe

Von: martin Bichler

Datum: 17.10.2003



rcmysql start



Erzeugt folgende Meldung:

Creating MySQL privilege database and starting MySQL...

hostname: Unbekannter Rechner

Neither host '' and 'localhost' could not be looked up with

/usr/bin/resolveip

Please configure the 'hostname' command to return a correct hostname.

If you want to solve this at a later stage, restart this script with

the --force option



rcmysql start –force

funktioniert auch nicht



Was steht in der Datei resolveip ?





Irgendwie haben wir die Sache in Gang gebracht



rho@linux:~> mysqladmin -u root -h localhost ping

mysqld is alive



mysql funktioniert anfangs nur als root



Mit mysql -u root -h localhost kann man in auch lokal starten:



Mit dem Befehl mysqlshow bekommen Sie eine Liste aller verfügbaren Datenbanken:

mysqlshow -u root -h localhost



Wie kann man eine Datenbank neu erzeugen ?



mysql> CREATE DATABASE db1 ;

Query OK, 1 row affected (0.10 sec)



mysql> use db1

Database changed

mysql>



Dann muss man eine Tabelle erzeugen

und die tabelle mit Daten füllen

Siehe weiter unten







Die Tabellen stehen in /var/lib/mysql



Wichtige Befehle

CONNECT

USE test

SELECT * FROM test

SHOW TABLES

INSERT

CREATE

VALUES

Das Semicolon scheint recht wichtig und verhält sich etwas zickig



mysql> CONNECT

Connection id: 42

Current database: *** NONE ***



mysql> USE test

Database changed



mysql> SHOW TABLES ;

+----------------+

| Tables_in_test |

+----------------+

| gewuerz |

| test |

+----------------+

2 rows in set (0.03 sec)



mysql> SELECT * FROM test ;

+--------+------+---------+-----+------+

| Nummer | Name | Vorname | geb | Info |

+--------+------+---------+-----+------+

| 88 | 1 | 1 | 1 | 1 |

| 3 | 3 | 3 | 3 | 3 |

| 4 | 4 | 4 | 4 | 4 |

| 0 | 0 | 0 | 0 | |

| 1 | 1 | 1 | 1 | 1 |

| 2 | 2 | 2 | 2 | 2 |

+--------+------+---------+-----+------+

6 rows in set (0.12 sec)



mysql> INSERT INTO test

-> VALUES ('88','1','1','1','1') ;

ERROR 1062: Duplicate entry '88' for key 1

mysql> VALUES ('2','1','1','1','1') ;

ERROR 1064: 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 'VALUES ('2','1','1','1','1')' at line 1

mysql> VALUES ('88','1','1','1','1') ;

ERROR 1064: 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 'VALUES ('88','1','1','1','1')' at line 1

mysql> INSERT INTO test

-> VALUES ('2','1','1','1','1') ;

ERROR 1062: Duplicate entry '2' for key 1

mysql> INSERT INTO test

-> VALUES ('99','1','1','1','1') ;

Query OK, 1 row affected (0.01 sec)



mysql> DESCRIBE test;

+---------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------+--------------+------+-----+---------+-------+

| Nummer | varchar(100) | | PRI | | |

| Name | varchar(100) | | | | |

| Vorname | varchar(100) | | | | |

| geb | varchar(100) | | | | |

| Info | varchar(100) | | | | |

+---------+--------------+------+-----+---------+-------+

5 rows in set (0.02 sec)



Jede Tabelle tabelle wird durch einige Dateien im Datenbank-Verzeichnis dargestellt. Im Falle von MyISAM-Tabellen erhalten Sie:



Datei

Zweck

tabelle.frm

Tabellendefinitionsdatei (form)

tabelle.MYD

Daten-Datei

tabelle.MYI

Index-Datei



CREATE



mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));

Query OK, 0 rows affected (0.31 sec)



mysql> USE test

Database changed

mysql> SHOW TABLES ;

+----------------+

| Tables_in_test |

+----------------+

| gewuerz |

| t1 |

| test |

+----------------+

3 rows in set (0.01 sec)



mysql> INSERT INTO t1

-> VALUES ('2','c') ;

Query OK, 1 row affected (0.00 sec)



mysql> INSERT INTO t1

-> VALUES ('1','a') ;

Query OK, 1 row affected (0.00 sec)



CREATE TABLE erstellt eine neue Tabelle in der aktuellen Datenbank (Datenbank kann mittels USE db_name ausgewählt werden).

Jede Tabelle wird durch drei Dateien im Datenbankverzeichnis dargestellt:



tbl_name.frm - Tabellendefinition

tbl_name.ISD - Datenfile

tbl_name.ISM - Indexfile



Anmerkung: ab MySQL 3.22 kann der Tabellenname mittels db_name.tbl_name angegeben werden.

Was hat es mit den drei Dateien auf sich ?

In der Tabellendefinition befindet sich die Struktur der Datenbank, die Angaben über die Größen der Felder u.s.w.

Im Datenfile befinden sich alle Daten, die dort so abgelegt sind, daß die schnell wiedergefunden werden können.

Im Indexfile ist die Datenbank als HASH-Tabelle abgelegt, welches die Suche im Datenfile drastisch beschleunigt.



Zur Syntax von CREATE

Der CREATE Befehl ist besonders wichtig, da ohne eine solide Datenbankstruktur nichts korrekt läuft. Man sollte sich gut überlegen, welche Typen und Attribute man verwendet, sowie man die Datenbank am geschicktesten anlegt. Spätere Korrekturen sind schlecht möglich. Bevor man nun einfach eine Datenbank erzeugt, sollte man das Kapitel Datenbank Grundlagen und das Kapitel zur Normalisierug von Datenbanken

Wird eine Spalte ohne NULL oder NOT NULL definiert, wird diese automatisch als NULL definiert.

Eine Spalte vom Typ INTEGER kann zusätzlich das Attribut AUTO_INCREMENT erhalten. Wodurch automatisch nach dem Einfügen eines neuen Datensatzes dieses Feld einen um 1 höheren Wert erhält als der höchste in dieser Spalte vorhandene Wert. Wird die Spalte wieder gelöscht, so steht dieser Feldwert bei dem nächsten Datensatz wieder zur Verfügung. Anmerkung: Pro Tabelle kann immer nur 1 Feld das AUTO_INCREMENT Attribut erhalten.

Wird für eine Spalte kein DEFAULT vorgegeben und wird diese als NOT NULL definiert, wird der Wert NULL als DEFAULT verwendet.

Wird eine Spalte ohne DEFAULT-Wert angelegt und als NOT NULL definiert, legt MySQL, abhängig vom Datentyp einen Defaultwert automatisch fest.

Bei nummerischen Datentypen ist dies 0.

Bei DATE und TIME Typen ist dies der Startwert dieses Typs.

Bei String-Typen ist dies ein leerer String.

KEY ist ein Synonym für INDEX

Ein UNIQUE KEY kann nur eindeutige Werte besitzen. Wird mehrmals versucht den gleichen Wert zu verwenden, kommt es zu einer Fehlermeldung

Ein PRIMARY KEY stellt einen eindeutigen Key dar. Jede Tabelle kann maximal einen PRIMARY KEY besitzen. MySQL legt den ersten UNIQUE KEY als PRIMARY KEY fest, sofern kein PRIMARY KEY definiert wurde

Ein PRIMARY KEY kann aus mehreren Spalten zusammengesetzt sein (bis zu 16 bzw. 32 (3.23.x). Allerdings darf ein mehrspaltiger Index keine PRIMARY KEY Spalte enthalten. Dies führt zu einer Fehlermeldung.

Wird beim Definieren eines INDEX kein Name für diesen INDEX angegeben, so wird der Name des ersten Feldes, daß im Index enthalten ist, mit einem Suffix z.B. _2, _3, ... verwendet.

Spalten, welche indiziert oder Teil eines INDEX sind, können keine NULL Werte enthalten. Diese Spalten müssen als NOT NULL deklariert werden.

Mit der col_name(länge)-Syntaxe kann der Teil eines CHAR oder VARCHAR feldes festgelegt werden, der in den Index einfließt.

TEXT und BLOB Felder können nicht iniziert sein.

Die FOREIGN KEY, CHECK und REFERENCES Klausen haben zur Zeit keinerlei Auswirkung. Diese Syntax wird nur zur Verfügung gestellt um kompatibel zu anderen SQL-Servern zu sein.

In manchen Fällen ändert MySQL automatisch die Felddefinitionen, welche in der CREATE-Anweisung enhalten sind um:

VARCHAR Felder mit einer Länge kleiner 4 werden in CHAR umgewandelt



mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));



Um Tabelle von t1 nach t2 umzubenennen:

mysql> ALTER TABLE t1 RENAME t2;



Um einen Index an Spalte d anzufügen, und diese als primary key zu bestimmen:

mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);



Spalte c Löschen:

mysql> ALTER TABLE t2 DROP COLUMN c;



EXPLAIN Befehl



mysql> EXPLAIN t1 ;

+-------+----------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+----------+------+-----+---------+-------+

| a | int(11) | YES | | NULL | |

| b | char(10) | YES | | NULL | |

+-------+----------+------+-----+---------+-------+

2 rows in set (0.02 sec)