Kürzlich musste ich einen MySQL Dump einer relativ umfangreichen Datenbank für MSSQL machen. Zum Glück hatte ich direkt Zugriff auf den Windows-Server und obwohl die MySQL und MSSQL Feldtypen nur eingeschränkt übertragbar sind oder z.B. MySQL Kommentare von MSSQL nicht verarbeitet werden können, habe ich mir die Mühe gemacht und eine kleine Windows Batchdatei geschrieben.
Die Batchdatei erzeugt pro Tabelle, die in der Datenbank enthalten ist, eine einzelene SQL-Dump-Datei „tabellenname.sql“ mit vollständigen INSERT Statements für jede Zeile. So lassen sich auch große Backups etwas überschaubarer gestalten und für eventuelle Re-Importe einfacher einlesen.
Die Batchdatei ruft man idealerweise über die Kommandozeile (Windows CMD) aus dem Ordner MySQL-Verzeichnisbindump2dir.bat auf, denn dort befindet sich das MySQL-Eigene Programm mysqldump.exe, das benötigt wird.
Eine kleine Anpassung muss vom Benutzer noch vorgenommen werden, im Quellcode Zeile 10 und 11 müssen natürlich die eigenen MySQL-User und -Passwort Angaben eingetragen werden. Optional kann man in Zeile 18 noch bestimmte mysqldump Parameter ergänzen oder entfernen.
Zum Aufruf gibt man einfach folgendes ein: dump2dir.bat meinedatenbank C:sqldump
Anbei der benötigte Source von dump2dir.bat.
@echo off REM 2011/07/28 REM Cornelius Rittner REM dumping with complete INSERT statements for each row (--skip-opt) IF "%~1" == "" GOTO INFO IF "%~2" == "" GOTO INFO setlocal set mysqluser=root set mysqlpass=foobarsomething echo Selected Database: %~1 echo Target Directory: %~2 for /f "delims= tokens=*" %%T in ('mysql -u %mysqluser% -p%mysqlpass% -N -B -e "show tables from `%1`"') do ( echo dumping %%T ... mysqldump -u %mysqluser% -p%mysqlpass% --compatible=mssql --skip-opt -r "%~2%%T.sql" %~1 %%T ) endlocal GOTO END :INFO echo dump2dir v.1.0 echo Three options are provided as default: echo --compatible=mssql --skip-opt -r echo. echo -------------------------------------------------------- echo Please provide your database name and target directory echo. echo [Parameter 1] = database echo [Parameter 2] = directory (without closing slash!) echo. echo Example: dump2dir "mydatabase" "D:mysqldump" echo. :END