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:
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:
mysql
apache
konqueror oder anderer browser
und man muß wo der phpAdmin steht bzw hininstalliert wurde
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)