Computer: MySQL (aus Wiki)

MySQL das führende Open-Source-Datenbanksystem (aus Wiki)

MySQL ist in meiner [[Anwendungskatalog|Anwendungsarchitektur]] das [[Datenbanken|Datenbank-System]] der ersten Wahl (siehe auch: [[OpenSourceSoftware]]).

Siehe auch: [[Unicode|Unicode]], MediaWiki

Wer benötigt MySQL?

Viele Anwendungen benötigen ein Datenbanksystem. Sehr häufig wird MySQL genommen. Z.B. bei:

Installation Server

* Definitive Software Library ID: ”’MySQL”’
* Name: MySQL
* Version: 5.0.41-community-nt ([[ComputerGraumann]]) und 5.0.41-community-nt ([[ComputerKragenbaer]])
* Hersteller/Bezugsquelle: http://www.mysql.com
* Installationsordner: D:\bin\MySQL
* Konfigurationsdateien: D:\bin\MySQL\my.ini —> [[Datensicherung]]
** Datenbank-Ordner: ”’d:\var\MySQL\data”’ —> [[Datensicherung]]
* Programmstart: [[Windows Service]] ”’MySQL”’
* InnoDB tablespace: InstallDir……

== Konfiguration ==
=== my.ini ===
Eine Konfigurationsdatei ”’my.cnf”’ wird nicht verwendet. Alles steht in ”’my.ini”’.
<br />Die wichtigsten Einträge in der Konfigurationsdatei <b>my.ini</b> sind:

<pre>
# CLIENT SECTION
# ———————————————————————-
#
# The following options will be read by MySQL client applications.
# Note that only client applications shipped by MySQL are guaranteed
# to read this section. If you want your own MySQL client program to
# honor these values, you need to specify it as an option during the
# MySQL client library initialization.
#
[client]

port=3306

[mysql]

default-character-set=utf8

</pre>

und

<pre>
# SERVER SECTION
# ———————————————————————-
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.
#
[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306

#Path to installation directory. All paths are usually resolved relative to this.
basedir=”D:/bin/MySQL/”

#Path to the database root
datadir=”D:/var/MySQL/data/”

# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8

# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
</pre>

=== Show Variables ===
mysql> show variables like “%character%”;

{| class=wikitable
|-
| Variable_name || Value
|-
| character_set_client || utf8
|-
| character_set_connection || utf8
|-
| character_set_database || utf8
|-
| character_set_results || utf8
|-
| character_set_server || utf8
|-
| character_set_system || utf8
|-
| character_sets_dir || \xampp\mysql\share\charsets/
|}

mysql> show variables like “%collation%”;

{| class=wikitable
|-
| Variable_name || Value
|-
| collation_connection || utf8_general_ci
|-
| collation_database || utf8_general_ci
|-
| collation_server || utf8_general_ci
|}

== Datenbankadministration ==
* User-Id für Administrator (root) mit Passwort versehen
* User-Id ” (ghost) gelöscht
* Datenbank-Backup / [[Datensicherung]] : d:\bin\jobs\backupMySQL.bat

== Remote Access ==
Manchmal möchte man von einem anderen Computer auf den MySQL-Datenbank-Server zugreifen; z.B. schon im eignen [[LAN]] weil man etwas kopieren will oder zu einem Server bei einem [[WebProvider]], wo man eine MySQL-Anwendung gehosted hat (z.B. ein [[MediaWiki]], [[Joomla]], [[WordPress]], oder, oder…).

Das macht man am besten dadurch, dass der MySQL-Server über eine [[TCP/IP]]-Adresse erreichbar ist. In meiner ersten MySQL-Installation auf den [[Windows Vista]]-Computern war das zunächst nicht möglich.

Der erste Versuch war, in die Konfigurationsdatei ”’my.ini”’ eine Zeile mit der IP-Adresse einzutragen:
bind-address=192.168.1.23

Das erwies sich später aber als verkehrt, weil mit einer solchen Zeile der MySQL-Server nur noch auf der angegebenen Adresse hört (in diesem Beispiel also nicht mehr auf 127.0.0.1 und auf localhost). Ohne eine solche Zeile lauscht der MySQL-Server auf ”’allen”’ IP-Adressen und das ist fürs erste schon das sinnvollste.

Was ich allerdings tun musste war, im [[Firewall]] auf dem MySQL-Server den TCP-Port 3306 freizuschalten. Danach war der MySQL-Server von den anderen Computern in meinem LAN erreichbar. Testweise konnte ich mit dem MySQL-Client [[SQLyog]] eine Verbindung vom Client [[ComputerKragenbaer]] zum Server [[ComputerGraumann]] aufbauen.

=== Datenbank-Synchronisation ===
Wenn der ”Remove Access” dann funktioniert, steht als Anwendung das [[Synchronisieren]] von Datenbanken auf den verschiedenen Computern auf der Tagesordnung. Dafür benötigt man entsprechende Software.

Die freie Ausgabe von [[SQLyog]] unterstützt das nicht mehr, man benötigt die kostenpflichtige Enterprise-Version. Die gibt es als Test-Version für 30 Tage.

Als Test der DB-Synchronisation habe ich meine mit [[MediaWiki]] gemachte [[WebsiteWiki]] mit der Trial-Version von SQLyog Enterprise mal von Graumann auf Kragenbaer, der ja als ”’Standby”’ fungieren soll, synchronisiert. Das hat ganz gut geklappt. Allerdings kan man mit der Trial-Version immer nur 2 Tabellen per Hand synchronisieren….

=== HTTP Tunneling ===
WEnn nun der ”’Remote Access”’ nicht nur im eigenen LAN, sondern auch zum externen [[WebProvider]] gehen soll, hat man das problem, dass fast alle WebProvider den dafür nötigen TCP-Port 3306 abschalten. In so einer Situation soll das sog. ”’SQL Tunnelling”’ helfen; dabei läuft alles über den HTTP-Port 80….

Vorgehensweise mit SQLyog Enterprise:
* PHP-Skript ”’SQLyogTunnel.php”’ auf den gehosteten Server hochgeladen
* Im SQLyog eine neue Connection einrichten mit:
** ”’HTTP”’: Use HTTP-Tunneling, URL: http://kr8.de/SQLyogTunnel.php
** ”’MySQL”’: MySQL Host Adress=localhost, Username= …, Password=…

== Installation ODBC-Treiber ==
Der aktuelle ODBC-Treiber für MySQL kommt direkt von www.mysql.com und trägt die Bezeichnung ”’MySQL Connector/ODBC 3.5.1”’.
* Definitive Software Library ID: ”’MySQL_ODBC”’
* Name: MySQL Connector/ODBC
* Version: 3.5.1
* Hersteller/Bezugsquelle: http://www.mysql.com/downloads

== Installation JDBC-Treiber ==
Der berühmte Treiber von Mark Matthews (1998) (OpenSourceSoftware “MM.MySQL”) wird seit August 2002 von MySQL unter der Bezeichnung ”’MySQL Connector/J 3.0”’ offiziell unterstützt ([[Java|Java]]). Mark Matthews verstärkt jetzt das MySQL-Team.
* Definitive Software Library ID: ”’MySQL_JDBC”’
* Name: MySQL Connector/J
* Version: 3.0.15
* Hersteller/Bezugsquelle: http://www.mysql.com/downloads
* Installations-Ordner: {$JAVA_HOME}\jre\lib\ext Beispielsweise d:\Programme\Java\jdk1.5.0_04\jre\lib\ext
* Installation: Kopieren der Datei mysql-connector-java-3.0.15-ga-bin.jar in den Installationsordner
* Informationen zur Benutzung
** Klasse: com.mysql.jdbc.Driver
** URL: jdbc:mysql://localhost/datenbankname

== Problems and Solutions ==
My SQL 4.1 verwendet zum Passwort-Hashing SHA1 (160 Bit = 40 Zeichen) Infos: http://pajhome.org.uk/crypt/md5/

=== Workaround ===
Angeblich soll das Problem mit der PHP MySQL client library (libmysql.dll) auch durch ein Upgrade von PHP nicht gelöst werden können. Daher habe ich das von MySql veröffentlichte Workaraound [[http://dev.mysql.com/doc/mysql/en/old-client.html|http://dev.mysql.com/doc/mysql/en/old-client.html]] benutzt:

* Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function:
** mysql> SET PASSWORD FOR wikiuser@localhost = OLD_PASSWORD(‘newpwd’);
* Tell the server to use the older password hashing algorithm:
** Start mysqld with the –old-passwords option. (Eingetragen in: my.ini ???)

{| class=wikitable
|-
| ”’User”’ || ”’Password”’ || ”’Hash”’ || ”’Application”’
|-
| root || lotusnotes || SHA1 || …
|-
| knowhowuser || … || old || Know…
|-
| mediauser || … || old || [[MediaWiki]]
|-
| linkuser || … || old || [[PhpLinks]]
|-
| owluser || … || old || [[Owl]]
|-
| pmauser || … || old || PhpMyAdmin
|-
| wikiuser || … || old || Wiki

|}

=== MySql Clients ===
Siehe: [[DatenbankFrontends]]
* [[PHP]] 4.3.9 kann es nicht
* [[PhpMyAdmin]] 2.6.0 kann es nicht (wegen PHP 4.3.9 ???)
* [[MySQL-Front|MySQL-Front]] 3.0 kann es
* [[SQLyog|SQLyog]] v3.11 kann es nicht, v4.1 kann es
* [[Navicat|Navicat]] 6.0.7 kann es
* [[DBManager|DBManager]] professional 2.2.0 kann es nicht, Version 3.1 kann es
* [[DbVisualizer]] Free 4.3.4 kann es

== Datenbanken ==
{| class=wikitable
|-
| ”’Datenbankname”’ || ”’Nutzung”’
|-
| asom || Application Sizing Modell
|-
| fruits || Für SQL-Workshop im [[PhpWorkshop]]
|-
| gmo || Migrierte GMO-Access-Datenbanken
|-
| joomla || für [[WebsiteJoomla]]
|-
| knowhow || Mein KnowlegeManagement: [[phpKnowhow]]
|-
| medien || MediaLibrary mit Videos etc.
|-
| mysql || Die Standard-Datenbank von MySQL
|-
| owl || [[Owl]] DokumentenManagement
|-
| phplinks || Anwendung [[PhpLinks]] (Link-Management)
|-
| phpwiki || Mein altes phpwiki (migriert nach TWiki)
|-
| telefonbuch || Telefonnummern zur Inverssuche (u.a.)
|-
| test || Die Standard-Test-Datenbank von MySQL
|-
| wikicons || [[MediaWiki]] [[WebsiteWikiConsulting]]
|-
| wikifaulkner || [[MediaWiki]] [[WebsiteMonikaFaulkner]]
|-
| wikikracht || [[MediaWiki]] [[WebsiteWiki]]
|-
| wikilexikon || [[MediaWiki]] [[WebsiteLexikon]]
|-
| wordpress || [[WordPress]]
|-
| xanadu || Meine Archiv-Datenbank (Anwendung Archivierung)

|}

== Notizen zu MySQL ==
=== Volltext-Index ===
Anlegen einer Tabelle mit Volltext-Index:
<pre>
CREATE TABLE articles (
id INT UNSIGGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT(title,body)
);
</pre>
Beispielhafte Such-Anfragen über den Volltext-Index:
<pre>
SELECT * FROM articles WHERE MATCH(title,body) AGAINST(‘nadel’);
SELECT *,MATCH(title,body) AGAINST(‘nadel’) as Score FROM articles WHERE MATCH(title,body) AGAINST(‘nadel’);
SELECT * FROM articles WHERE MATCH(title,body) AGAINST(‘+nadel -streifen’ IN BOOLEAN MODE);
</pre>

— Main.DietrichKracht – 17 May 2004
[[Category:DefinitiveSoftwareLibrary]][[Category:Datensicherung]]