# Batch mit MySQL



## MySelV (21. Januar 2010)

Hallo,

ich versuche in einer Batch Datei folgende Dinge für eine MySQL Installation zu regeln:
- Überprüfen ob MySQL in der Version bereits installiert ist (über die Registry) (das auslesen selbst und speichern in eine Variable funktoiniert)
- Installieren von MySQL Server (quite) // funktioniert
- Konfigurieren von MySQL Server per Batch // funktioniert

Hier dazu die Batch:

```
reg query "HKLM\Software\MySQL AB\MySQL Server 5.1" /v "Location"
IF NOT %ERRORLEVEL%==0 (GOTO install) ELSE (GOTO readpath) 
                                             
:install
echo install>>some.txt
msiexec /i "c:\temp\install\bws\mysql.msi" INSTALLDIR="%PROGRAMFILES%\MySQLServer" /qb

IF NOT EXIST "C:\Windows\SysWOW64" (SET PROGPATH=%PROGRAMFILES%) ELSE (SET PROGPATH="%PROGRAMFILES(x86)%")
   SET PROGPATH=###%PROGPATH%###
   SET PROGPATH=%PROGPATH:"###=%
   SET PROGPATH=%PROGPATH:###"=%
   SET PROGPATH=%PROGPATH:###=%
Goto configure

:readpath
echo ReadPath>>some.txt
for /f "skip=2 tokens=3" %A in ('reg query "HKLM\Software\MySQL AB\MySQL Server 5.1" /v "Location"') do set PROGPATH=%A
echo %PROGPATH%>>some.txt
Goto configure

:configure
echo Config>>some.txt
c:    

cd "%PROGPATH%\MySQLServer\bin"
MySQLInstanceConfig.exe -i -q "-l%PROGPATH%\MySQLServer\log\install_log.txt" "-nMySQLServer" "-p%PROGPATH%\MySQLServer" "-t%PROGPATH%\MySQLServer\my-template.ini" "-c%PROGPATH%\MySQLServer\bws.ini" ServerType=DEVELOPMENT DatabaseType=MIXED ConnectionUsage=DSS Port=3306 ServiceName=BWSDatenbank RootPassword=werner

mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('werner');
```


Irgendwas stimmt an meinen GOTO's oder in der Abfrage der Registry im Schritt readPath noch nicht. In der Datei some.txt landet leider nur die Ausgabe "readpath" und nicht mehr. Allerdings seh ich den Fehler nicht, da die Abfrage als Einzeiler in der cmd funktioniert.
Weiß jemand wo der Fehler liegt?

Gruß Erik


----------



## deepthroat (21. Januar 2010)

Hi.

In Batch Dateien muss man die Schleifenvariablen mit doppelten Prozentzeichen schreiben:

```
for /f "skip=2 tokens=3" %%A in ('reg query "HKLM\Software\MySQL AB\MySQL Server 5.1" /v "Location"') do set PROGPATH=%%A
```
Gruß


----------



## MySelV (25. Januar 2010)

Hallo,

super, danke dir.

Gruß


----------



## MySelV (10. Februar 2010)

Hallo,

ich muss noch mal bisschen in die Runde fragen. Wir wollen via eclipseRCP ein Programm installieren, welches eine MySQL DB braucht. Folgendes habe ich bereits:
- MySQL Non-Install
- Batch für Installation, diese enthält
         - Installation der MySQL als Windows Service mit Konfigurationsdatei

Allerdings würde ich gerne noch ein paar Fehlerfälle abfangen:
1) Ein Dienst mit gleichem Namen ist schon vorhanden
Probiert habe ich das über "sc query DIENSTNAME", allerdings kann ich danach den ERRORLEVEL nicht abfragen (der ist auch 0 wenn der Service nicht existiert)
Alternativ könnte ich es hier auch über die Registrierung via der Einträge im HKLM/System/CurrentControlSet/Services probieren und schauen, ob dort ein Eintrag zu dem Service existiert

2) Löschen des alten Dienstes
Der Aufruf dazu wäre "mysqld --remove DIENSTNAME" allerdings stellt sich mir die Frage, ob ich den Dienst mit einer "anderen" mysqld löschen kann. Also, wenn der Dienst von d:\foo\pfad\mysql\bin\mysqld hinzugefügt wurde, ob ich ihn dann von c:\temp\andererpfad\mysql\bin\mysqld löschen kann?
--- [Gelöst] Man kann Services sinnvollerweise ja auch über sc delete SERVICENAME löschen  ---

3) Anderer Service mit gleichem Port
Ist ein Aufruf (hier vielleicht auch über sc query) möglich, mit dem ich herausbekomme, ob ein anderer Service bereits meinen Port belegt?


Viele Grüße
Erik


----------

