[MySQL] Installation und Start von MySQL 5.0 unter Windows als Dienst

Vorbereitung

  • Package von MySQL herunterladen und in ein Zielverzeichnis (z.B. c:\Programme\MySQL\Server\) entpacken
  • die Dienst-Exe und alle weiteren zum Server gehörenden Tools befinden sich z.B. in c:\Programme\MySQL\Server\bin\

Konfiguration

  • eine Konfigurationsdatei namens my.ini im Windows-Verzeichnis c:\windows\ oder c:\winnt\ erstellen (Texteditor) und den Inhalt editieren
  • am Einfachsten ist es, man nimmt schon eines der fertigen Files (z.B. my-medium.ini) aus dem Installationsverzeichnis (z.B. c:\Programme\MySQL\Server\) und passt dieses an
  • wichtig ist dabei der korrekte Eintrag der richtigen Server-Pfade (Slashes “/” beachten!) in der Sektion [mysqld]:
    [mysqld]
    basedir="C:/Programme/MySQL/Server/"
    datadir="C:/Programme/MySQL/Server/data/"
    

    wobei “basedir” der Basispfad zum Stammverzeichnis des Servers ist und “datadir” der Pfad zum Verzeichnis in dem MySQL die Datenbanken verwaltet.

  • eine fertig konfigurierte Beispieldatei sieht z.B. wie folgt aus:
    ################################################################################
    #
    # MySQL 5.0.24 Configdatei (Beispiel)
    #
    # (W) 31.03.2009 by www.codezentrale.6x.to
    #
    # Abgeleitet von my-medium.ini -> es müssen in der Sektion [mysqld] evtl. die
    # Einträge basedir und datadir angepaßt werden!
    #
    ################################################################################
    [client]
    port=3306
    socket=/tmp/mysql.sock
    
    [mysql]
    default-character-set=latin1
    no-auto-rehash
    
    [mysqld]
    basedir="C:/Programme/MySQL/Server/"
    datadir="C:/Programme/MySQL/Server/Data/"
    default-character-set=latin1
    default-storage-engine=INNODB
    innodb_additional_mem_pool_size=2M
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=1M
    innodb_buffer_pool_size=8M
    innodb_log_file_size=10M
    innodb_thread_concurrency=8
    key_buffer_size=8M
    max_connections=100
    myisam_max_extra_sort_file_size=100G
    myisam_max_sort_file_size=100G
    myisam_sort_buffer_size=8M
    port=3306
    query_cache_size=0
    read_buffer_size=256K
    read_rnd_buffer_size=512K
    server-id=1
    socket=/tmp/mysql.sock
    sort_buffer_size=512K
    sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    table_cache=256
    thread_cache_size=8
    tmp_table_size=5M
    log-bin=mysql-bin
    
    [isamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M
    
    [myisamchk]
    key_buffer = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M
    
    [mysqlhotcopy]
    interactive-timeout
    

Installation und Start des Dienstes

  • MySQL-Dienst in der Konsole (cmd.exe) mit
    c:\Programme\MySQL\Server\bin\mysqld --install
    

    anmelden, der Dienst ist vom Typ “Autostart”, wird also bei jedem Systemstart automatisch geladen

  • danach den MySQL-Dienst mit
    net start MySQL
    

    auf der Konsole starten

[MySQL] SQL-Dump einer MySQL-Datenbank einspielen (Restore)

Voraussetzung für folgendes Beispiel ist, dass ein SQL-Dump vorliegt, in welchem zuerst folgende Anweisungen stehen:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `datenbankname`;
USE datenbankname;

Die Datenbank “datenbankname” ist also auf dem Server evtl. noch nicht existent und wird ggf. angelegt und benutzt.

Zum Einspielen der Daten wird im MySQL-Ordner “bin” das Tool “mysql” genutzt. Es gibt zwei Möglichkeiten:

  1. per Konsole als Admin (root) die Datenbank “datenbankname” anlegen:
    mysql -hlocalhost -uroot -e "CREATE DATABASE Datenbankname"
    

    danach das Script einspielen

    mysql -hHostrechner -uBenutzer -pPasswort Datenbankname < Datenbankfile.sql
    
  2. auf die bestenhende Datenbank “mysql” einloggen und das Script sofort ausführen:
    mysql -hHostrechner -uBenutzer -pPasswort mysql < Datenbankfile.sql
    

[MySQL] SQL-Dump einer MySQL-Datenbank erstellen (Dump)

MySQL liefert im Ordner “bin” ein Kommandozeilentool mit, mit dessen Hilfe mal leicht und schnell SQL-Dumps von bestehenden Datenbanken erzeugen kann. Um eine komplette Datenbank “Datenbankname” mit allen Tabellen, Schlüsselbeziehungen, Datensätzen und zus. Anweisungen (CREATE DATABASE, USE, LOCK TABLES …) in eine Textdatei “Datenbankfile.sql” zu speichern, muss man auf Kommandozeile folgendes eingeben:

mysqldump --databases --add-drop-table --add-locks --lock-tables --quote-names -hHostrechner -uBenutzer -pPasswort Datenbankname > Datenbankfile.sql

Hinweis: Zwischen -hHostrechner usw. darf kein Leerzeichen stehen, um sich z.B. auf Localhost einzuloggen, muss mann somit -hlocalhost eingeben

[MS Access] nach Zeitweiten suchen

  • Suchdatum ist im Format ‘YYYY-MM-DD hh:mm:ss’, verkürzt auch ‘YYYY-MM-DD’
  • statt ‘-‘ können auch ‘/’ verwendet werden
  • die Datumswerte müssen zwischen #…# stehen
SELECT Datum, Name
FROM Tabelle
WHERE Datum >= #2008-08-01 00:00:00# AND Datum <= #2008-10-01 01:00:00#
ORDER BY Datum

[MS Access] Verknüpfung von drei Tabellen

  • im Beispiel wird für eine Lizenz (5) das zugehörige Produkt und Projekt eines Nutzers (ID = 1) aufgelistet
  • zu beachten ist die Klammerung nach FROM und jeweils nach Abschluss eines ON-Statements
SELECT Pr.Name, Prj.Name, Lic.RegDate, Lic.ExpDate
FROM ((Licenses AS Lic
INNER JOIN Products AS Pr
ON Lic.ProductID=Pr.ID)
INNER JOIN Projects AS Prj
ON Lic.ProjectID=Prj.ID)
WHERE Lic.ID LIKE 5 AND Lic.UserID LIKE 1

[MS Access] Verknüpfung von zwei Tabellen

  • im Beispiel werden alle Lizenzen mit zugehörigen Produktnamen eines Nutzers (ID = 1) aufgelistet
SELECT Lic.ID, Lic.ExpirationDate, Pr.Name
FROM (Licenses AS Lic
INNER JOIN Products AS Pr
ON Lic.ProductID=Pr.ID)
WHERE Lic.UserID LIKE 1

[MS Access] Anzeige von Tabellenwerten in einem Listenfeld (anhand Fremdschlüssel-ID)

Ziel: Es soll anhand einer ID (t_groupID) eine Anzahl Datensätze aus einer Tabelle geholt und diese in einem Listenfeld (lf_users) dargestellt werden.

  1. Textfeld t_groupID mit ID-Verknüpfung auf dem Formular erstellen
  2. Listenfeld einfügen und Datensatzherkunft eintragen (Wert im Textfeld t_groupID nutzen)
  3. SELECT [user].[ID], [user].[Name], [user].[Vorname]
    WHERE (([user].[gruppen_ID]) LIKE "" & Forms!MeinFormular!t_groupID.Text & "")
    ORDER BY [user].[Name];
    
  4. Formular->Eigenschaften->Ereignis->Beim Anzeigen
  5. Private Sub Form_Current()
       t_GruppenID.SetFocus 'Focus muß gesetzt werden, da sonst Laufzeitfehler
       lf_users.Requery
    End Sub
    

ODER:

  1. Listenfeld einfügen und Datensatzherkunft (Tabelle/Abfrage) eintragen (Spalten-Wert “ID” aus dem akt. Datensatz im Formular nutzen)
  2. SELECT [user].[ID], [user].[Name], [user].[Vorname]
    WHERE (([user].[gruppen_ID]) LIKE "" & Forms!MeinFormular!ID & "")
    ORDER BY [user].[Name];
    
  3. Formular->Eigenschaften->Ereignis->beim Anzeigen
  4. Private Sub Form_Current()
       lf_users.Requery
    End Sub
    

[MS Access] Anzeige von Spaltenwerten in Textfeldern nach Selektion eines Datensatzes

Ziel: es soll auf einem Formular im Kombinationsfeld (k_username) ein Benutzername ausgewählt werden und dazu Adressdaten angezeigt werden

  1. Datensatzherkunft des Kombinationsfeldes k_username
  2. SELECT user.ID, user.name, user.strasse, user.telefon
    FROM users
    ORDER BY user.name;
    
  3. Gebundene Spalte: 1
  4. Spaltenanzahl: 4
  5. Spaltenbreiten: 0cm;2,542cm;0cm;0cm
  6. auf der Form nun entsprechende Bezeichnungsfelder für die anzuzeigenden Spaltenwerte einfügen (Name, Straße, Telefon)
  7. nun die Ereignisprozeduren (“Beim Anzeigen” und “Nach Aktualisierung”), welche die Spaltenwerte in die Bezeichnungsfelder schreiben, editieren
  8. ' Beim Anzeigen
    Private Sub Form_Current()
        If Not IsNull(Me!k_username) Or Not Me!k_username= "" Then
            bzf_username.Caption = Me![k_username].Column(2)
            bzf_strasse.Caption = Me![k_username].Column(3)
            bzf_telefon.Caption = Me![k_username].Column(5)
        Else
            bzf_username.Caption = ""
            bzf_strasse.Caption = ""
            bzf_telefon.Caption = ""
        End If
    End Sub
    
    ' Nach Aktualisierung
    Private Sub k_username_AfterUpdate()
        If Not IsNull(Me!k_username) Or Not Me!k_username= "" Then
            bzf_username.Caption = Me![k_username].Column(2)
            bzf_strasse.Caption = Me![k_username].Column(3)
            bzf_telefon.Caption = Me![k_username].Column(5)
        Else
            bzf_username.Caption = ""
            bzf_strasse.Caption = ""
            bzf_telefon.Caption = ""
        End If
    End Sub