2017-12-10 2 views
0

Ich verwende eine Fledermaus script, um eine Liste von Datenbanken automatisch täglich mit Taskplaner in Windows zu sichern. Beim Ausführen des Skripts treten jedoch Fehler auf. An diesem Punkt soll das Skript über 60 Datenbanken ablegen, aber nur die ersten beiden werden freigegeben. Bitte beachten Sie dumperrors.txt unten für Fehler. Jede Hilfe ist willkommen und geschätzt. Vielen Dank!mysqldump Fehler 1728 beim automatischen Ausführen von Backup-Fledermaus

mysqlbackup.bat

:: FILE HISTORY ---------------------------------------------- 
:: UPDATE 11.7.2012 Added setup all folder paths into variables at the top of the script to ease deployment 
:: UPDATE 7.16.2012 Added --routines, fix for dashes in filename, and fix for regional time settings 
:: UPDATE 3.30.2012 Added error logging to help troubleshoot databases backup errors. --log-error="c:\MySQLBackups\backupfiles\dumperrors.txt" 
:: UPDATE 12.29.2011 Added time bug fix and remote FTP options - Thanks to Kamil Tomas 
:: UPDATE 5.09.2011 v 1.0 


:: If the time is less than two digits insert a zero so there is no space to break the filename 

:: If you have any regional date/time issues call this include: getdate.cmd credit: Simon Sheppard for this cmd - untested 
:: call getdate.cmd 

set year=%DATE:~10,4% 
set day=%DATE:~7,2% 
set mnt=%DATE:~4,2% 
set hr=%TIME:~0,2% 
set min=%TIME:~3,2% 

IF %day% LSS 10 SET day=0%day:~1,1% 
IF %mnt% LSS 10 SET mnt=0%mnt:~1,1% 
IF %hr% LSS 10 SET hr=0%hr:~1,1% 
IF %min% LSS 10 SET min=0%min:~1,1% 

set backuptime=%year%-%day%-%mnt%-%hr%-%min% 
echo %backuptime% 



:: SETTINGS AND PATHS 
:: Note: Do not put spaces before the equal signs or variables will fail 

:: Name of the database user with rights to all tables 
set dbuser=user 

:: Password for the database user 
set dbpass=password 

:: Error log path - Important in debugging your issues 
set errorLogPath="C:\MySQLBackups\backupfiles\dumperrors.txt" 

:: MySQL EXE Path 
set mysqldumpexe="C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqldump.exe" 

:: Error log path 
set backupfldr=C:\MySQLBackups\backupfiles\ 

:: Path to data folder which may differ from install dir 
set datafldr="C:\Program Files\MySQL\MySQL Server 5.7\data" 

:: Path to zip executable 
set zipper="C:\Program Files (x86)\7-Zip\7z.exe" 

:: Number of days to retain .zip backup files 
set retaindays=5 

:: DONE WITH SETTINGS 



:: GO FORTH AND BACKUP EVERYTHING! 

:: Switch to the data directory to enumerate the folders 
pushd %datafldr% 

echo "Pass each name to mysqldump.exe and output an individual .sql file for each" 

:: Thanks to Radek Dolezel for adding the support for dashes in the db name 
:: Added --routines thanks for the suggestion Angel 

:: turn on if you are debugging 
@echo off 

FOR /D %%F IN (*) DO (

IF NOT [%%F]==[performance_schema] (
SET %%F=!%%F:@002d=-! 
%mysqldumpexe% --user=%dbuser% --password=%dbpass% --databases --routines --log-error=%errorLogPath% %%F > "%backupfldr%%%F.%backuptime%.sql" 
) ELSE (
echo Skipping DB backup for performance_schema 
) 
) 

echo "Zipping all files ending in .sql in the folder" 


:: .zip option clean but not as compressed 
%zipper% a -tzip "%backupfldr%FullBackup.%backuptime%.zip" "%backupfldr%*.sql" 


echo "Deleting all the files ending in .sql only" 

del "%backupfldr%*.sql" 

echo "Deleting zip files older than 30 days now" 
Forfiles -p %backupfldr% -s -m *.* -d -%retaindays% -c "cmd /c del /q @path" 


::FOR THOSE WHO WISH TO FTP YOUR FILE UNCOMMENT THESE LINES AND UPDATE - Thanks Kamil for this addition! 

::cd\[path to directory where your file is saved] 
::@echo off 
::echo user [here comes your ftp username]>ftpup.dat 
::echo [here comes ftp password]>>ftpup.dat 
::echo [optional line; you can put "cd" command to navigate through the folders on the ftp server; eg. cd\folder1\folder2]>>ftpup.dat 
::echo binary>>ftpup.dat 
::echo put [file name comes here; eg. FullBackup.%backuptime%.zip]>>ftpup.dat 
::echo quit>>ftpup.dat 
::ftp -n -s:ftpup.dat [insert ftp server here; eg. myserver.com] 
::del ftpup.dat 

echo "done" 

::return to the main script dir on end 
popd 

Nach dem Ausführen des Skripts ich Fehler folgende erhalten

dumperrors.txt

mysqldump: Couldn't execute 'SHOW FUNCTION STATUS WHERE Db = 'mysql'': Cannot load from mysql.proc. The table is probably corrupted (1728) 
mysqldump: Got error: 1728: Cannot load from mysql.proc. The table is probably corrupted when using LOCK TABLES 
+0

hängten Was denken Sie, Sie versuchen, mit diesem Code zu tun: 'SET %% F =! %% F: @ 002d = -! ' – Squashman

+0

@Squashman: Ich versuche, alle Datenbanken mit Bat-Datei in separate Dateien zu dumpen. – Clark

+0

das erklärt nicht den Code, den ich zitiert habe. – Squashman

Antwort

0

Ich würde vorschlagen, dass die errors Datei sein wird wird durch jeden Fehlerbericht überschrieben.

Try Ändern

--log-error=%errorLogPath% 

zu

--log-error=%errorLogPath%.%%F 

Beachten Sie, dass dieser Parameter von %%F gefolgt ist, die der Datenbankname ist.

Diese Änderung soll eine individuelle Fehlerdatei für jede Datenbank erstellen (wenn es ein Fehler ist) mit dem Datenbanknamen an die .txt

+0

[Sie] (http://webcheatsheet.com/sql/Fix_Cannot_load_from_mysql.proc.The_table_is_probably_corrupted.php) schlagen vor, diese Zeile mysql_upgrade hinzuzufügen, aber ich habe keine Ahnung, wo im Skript ich es setzen sollte. Irgendeine Idee? – Clark

+0

Dieser Vorschlag ist eine Lösung für das '1728' Problem. Du scheinst zu fragen, wie du den (scheinbaren) Kurzbericht über die Fehler überwinden kannst. Ich würde vorschlagen, dass das Ausführen der mysql_upgrade-Zeile direkt vor dem mysqldump innerhalb der for-Schleife wahrscheinlich der richtige Weg ist. Richten Sie 'mysqlupgradeexe' ähnlich wie mysqldumpexe ein und führen Sie '% mysqlupgrade% ...' mit den entsprechenden Parametern aus. Testen Sie zuerst eine Kopie einer Mischung aus guten und "korrupten" Datenbanken - um zu überprüfen. – Magoo

+0

Danke für Ihre zweite Antwort, das ist genau das, was ich gerade suche Ich kann die Datenbanken mit dem Skript wegen dieses Fehlers nicht ausgeben. Die einzigen Datenbanken, die ich im Backup-Ordner sehe, sind mysql und sys. – Clark