zoukankan      html  css  js  c++  java
  • Data Base mysql备份与恢复

    mysql  备份与恢复

    为什么要备份:

    由于系统使用到了MySQL 数 据库,所以每天的工作,就设计到了MySQL数据库的备份问题.但如果每天手工来做MySQL数据库的定时备份,工作量不说,时间还不准确,有时候还会忘 记做备份,哪一天忙起来忘记了,数据库出了问题,就不好搞了.所以,将MySQL数据库的备份,做成系统定时执行的,就很有必要.
    一般情况下,我们手工备份MySQL数据库。

    一.备份:

    1.脚本命令备份:

      (1).简单备份:(使用mysqldump备份)

    @echo 
    set date1=%date:~0,4% set date2=%date:~5,2% set date3=%date:~8,2% set date_string=%date1%%date2%%date3% mysqldump --opt --add-locks -u zlp --password=123 test> D:mysql_backup\%date_string% est.sql


      (2).data文件备份:

    net stop mysql
     xcopy c:mysqldata	est*.* c:mysql_backup	est\%date:~0,10% /S /I
     net start mysql

       (3).备份(完整):

    @REM 版本 1.4
    @REM 要测试是否能成功运行,请在配置好以下参数后,直接运行,看能否正常备份MySQL数据。如果能正常备份,那么就可以配置到计划任务中了。
    @REM 注意:运行计划任务的用户,需要有访问备份文件夹和临时目录读写的权限。
    @REM 如果有运行异常,请将 @ECHO OFF 删除,并在最后添加一行加入 PAUSE 好观察在哪步出了错。
    
    @ECHO OFF
    
    REM ***************************************************************************
    REM 参数配置(参数前后不能有空格)
    
    
    REM 设置dbhost为主机名或IP地址
    SET dbhost=localhost
    
    REM 设置登陆mysql数据库的用户名。如果用户名中有"号,请用""代替。
    SET dbuser=root
    
    REM 设置登陆mysql的密码。如果密码中有"号,请用""代替。
    SET dbpwd=123456
    
    REM 设置backupPath为备份文件存放的路径。注意:文件夹名存在空格不需要引号括起来。警告:此文件夹应为专用目录,最好独立使用,避免删除历史备份时误删数据。
    SET backupPath=D:MySQLAutoBackup
    
    REM 备份文件夹前缀。
    SET backupFolderPrefix=MyBackup_
    
    REM 设置删除历史备份文件。删除多少次备份之前的备份文件。0--不删除历史备份文件;1,表示一次,2,表示2次,以此类推。如set deleteHistorySkips=30表示删除30次以前的备份文件;
    SET deleteHistorySkips=30
    
    REM 设置备份时发生错误是否删除历史备份文件。yes--删除;no--不删除。
    SET onErrorDeleteBackFile=no
    
    REM 是否启用压缩功能。yes--开启压缩功能。no--禁用压缩功能。默认值:no,不开启。
    SET enableCompress=yes
    
    REM 设置WinRAR压缩级别。取值0到5。0--无压缩;5--最高压缩比;默认值:3
    SET compressLevel=3
    
    REM 压缩类型。cab--系统内置cab压缩功能。rar--启用RAR压缩功能,需要安装RAR压缩软件支持
    SET compressType=cab
    
    REM 设置WinRAR安装路径。
    SET rarPath=C:Program FilesWinRAR
    
    REM 设置分卷大小。0--表示不分卷;1--表示1k,1024--表示1M,2048--表示2M;默认值:102400,表示100M
    SET volumePackSize=0
    
    REM 设置压缩密码。{empty}表示没有密码。其他字符表示压缩文件密码
    SET rarPwd={empty}
    
    REM 设置临时目录。如果备份时系统默认临时目录所在分区空间太小,可以通过这里调整该脚本运行的临时目录。默认值:%TEMP%
    REM 启用压缩时,零时目录占用空间较大,大约是备份数据库的1.2倍。不启用压缩,占用临时目录空间很小。
    REM 如果启用了CAB压缩,临时目录最好和备份文件夹在同一个分区。请保证指定的临时目录存在。
    SET TEMP=%TEMP%
    
    REM 完成参数配置
    REM ***************************************************************************
    
    
    
    
    REM ***************************************************************************
    REM 环境检测,参数检测和初始化
    
    REM 设置%myDate%为当前日期(2013-01-02)。因为日期后可能跟一个空格和星期几,并且日期中可能是”/"分割,所以要去除掉星期几和斜线。
    FOR /F "tokens=1,2* delims= " %%i IN ('ECHO %date:/=-%') DO SET "myDate=%%i"
    REM 设置%MyTime%为当前时间。格式:20.56.30.99
    SET myTime=%TIME::=.%
    SET myTime=%myTime: =0%
    
    REM 设置零时目录
    SET myTempDir=%TEMP%MySQLBack_%myDate%_%MyTime%
    REM 设置备份日志文件
    SET backupLogFile=%backupPath%MySQLBackLog.txt
    REM 用于环境检测的零时文件名
    SET checkFileName=_1_2_3_backup_mysql_check_%myDate%_%MyTime%
    
    
    REM ****目录权限检测****
    REM 检查备份目录是否存在,不存在则创建
    :CheckAndMakeBackupFolder
    IF exist "%backupPath%" GOTO CheckBackupFolderCreatFile
    MD "%backupPath%"
    IF %errorlevel%==0 GOTO CheckBackupFolderCreatFile
    ECHO 创建数据库备份目录失败。请检测您是否具有写入"%backupPath%"的权限,或者驱动器是否存在。
    PAUSE
    GOTO END
    
    REM 检查备份目录是否有创建文件的权限
    :CheckBackupFolderCreatFile
    ECHO. > "%backupPath%\%checkFileName%"
    IF EXIST "%backupPath%\%checkFileName%" del "%backupPath%\%checkFileName%" /Q /F & GOTO CheckBackupFolderCreateFolder
    ECHO 请检查对备份文件夹"%backupPath%"是否有文件写入权限。
    PAUSE
    GOTO END
    
    REM 检查备份目录是否有创建文件夹的权限
    :CheckBackupFolderCreateFolder
    MD "%backupPath%\%checkFileName%" && ( RD /S /Q "%backupPath%\%checkFileName%" & GOTO CheckTempFolderAccess )
    ECHO %myDate% %TIME%    请检查对备份文件夹"%backupPath%"是否有创建文件夹的权限。>>"%backupLogFile%"
    GOTO END
    
    REM 检测临时目录访问权限
    :CheckTempFolderAccess
    ECHO. > "%temp%\%checkFileName%"
    IF EXIST "%temp%\%checkFileName%" DEL "%temp%\%checkFileName%" /Q /F & GOTO MakeTempFolder
    ECHO %myDate% %TIME%    没有临时目录写入权限。请用具有权限的用户执行备份脚本。>>"%backupLogFile%"
    GOTO END
    
    REM 创建零时目录
    :MakeTempFolder
    MD "%myTempDir%" && GOTO CheckMySQLInstalled
    ECHO %myDate% %TIME%    无法创建临时目录"%myTempDir%"。请检查临时目录权限。>>"%backupLogFile%"
    GOTO END
    
    REM ****完成目录权限检测****
    
    
    REM 检测MySQL是否安装
    :CheckMySQLInstalled
    mysql --help > NUL && GOTO CheckMySQLConnect
    ECHO %myDate% %TIME%    无法检测到mysql,请确保已经正确安装MySQL.或者将MySQL的Bin目录的路径添加到系统变量Path中。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 验证数据库连接
    :CheckMySQLConnect
    ECHO exit | mysql -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > NUL && GOTO CheckdeleteHistorySkips
    ECHO %myDate% %TIME%    无法连接到%dbhost%。请检服务是否启动,连接的用户名和密码是否正确。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 验证删除历史备份配置参数
    :CheckdeleteHistorySkips
    ECHO %deleteHistorySkips%| findstr /be "[0-9]*" > nul && GOTO CheckOnErrorDeleteBackFile
    ECHO %myDate% %TIME%    删除历史备份文件"deleteHistorySkipsFailed"配置错误,只能配置整数。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 验证删除历史备份配置参数
    :CheckOnErrorDeleteBackFile
    IF %onErrorDeleteBackFile%==no GOTO CheckCompressConfig
    IF %onErrorDeleteBackFile%==yes GOTO CheckCompressConfig
    ECHO %myDate% %TIME%    备份错误时是否删除历史文件"onErrorDeleteBackFile"配置参数错误。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 检查压缩软件配置
    :CheckCompressConfig
    IF %enableCompress%==no GOTO CheckSuccess
    IF %enableCompress%==yes GOTO CheckCompressLevel
    ECHO %myDate% %TIME%    是否启用压缩变量"enableCompress"的参数只能是"yes"或者"no".请检查配置。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 检查压缩级别
    :CheckCompressLevel
    ECHO %compressLevel%| findstr /be "[0-5]" > nul && GOTO CheckVolumePackSize
    ECHO %myDate% %TIME%    压缩级别"compressLevel"配置错误,参数只能是0~5的数字>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 验证RAR分卷大小设置
    :CheckVolumePackSize
    ECHO %volumePackSize%| findstr /be "[0-9]*" > nul && GOTO CheckCompressType
    ECHO %myDate% %TIME%    压缩包分卷大小"volumePackSize"配置错误。请检查设置。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 检查压缩类型
    :CheckCompressType
    IF %compressType%==rar GOTO CheckRarPath
    IF %compressType%==cab GOTO CheckMakeCab
    ECHO %myDate% %TIME%    压缩类型"compressType"设置错误.值只能是"cab"或者"rar".请检查设置。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 验证RAR配置目录
    :CheckRarPath
    IF exist "%rarPath%Rar.exe" GOTO CheckSuccess
    ECHO %myDate% %TIME%    WinRAR安装路径"rarPath"设置错误.请检查设置。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 验证makecab
    :CheckMakeCab
    makecab /? >NUL && GOTO CheckSuccess
    ECHO %myDate% %TIME%    系统内置MakeCab压缩功能无法使用,请使用RAR进行压缩。>>"%backupLogFile%"
    GOTO CheckParmsFailed
    
    REM 参数验证无法通过时
    :CheckParmsFailed
    ECHO 无法完成初始化。请查看日志文件:%backupLogFile%
    RD /S /Q "%myTempDir%"
    GOTO END
    
    REM 验证成功
    :CheckSuccess
    
    REM 完成环境检测和初始化
    REM ***************************************************************************
    
    
    
    
    REM ***************************************************************************
    REM 备份数据库
    
    ECHO %myDate% %TIME%    启动数据库备份脚本...>>"%backupLogFile%"
    
    REM 当前备份使用的文件夹
    set backupName=%backupFolderPrefix%%myDate% %myTime%
    
    REM 根据需要创建专属目录。在分卷压缩或者不压缩时,需要专属目录
    IF %enableCompress%==no MD "%backupPath%\%backupName%"
    IF %enableCompress%==yes ( IF NOT %volumePackSize%==0 MD "%backupPath%\%backupName%" )
    
    IF "%enableCompress%"=="yes" MD "%myTempDir%\%backupName%"
    
    REM 设置数据库备份使用的直接目录
    IF "%enableCompress%"=="no" SET backDbTmpPath=%backupPath%\%backupName%
    IF "%enableCompress%"=="yes" SET backDbTmpPath=%myTempDir%\%backupName%
    
    SET errorFile=%backDbTmpPath%##BackupFailDbs.txt
    SET dbList=%myTempDir%dblist.txt
    SET backmysqlbat=%myTempDir%akmysql.bat
    
    REM 生成数据库列表文件
    ECHO show databases; | mysql -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" > "%dblist%"
    
    SET isExistError=no
    
    REM 创建备份MySQL数据库的脚本。
    ECHO ECHO 未成功备份的数据库: ^> "%errorFile%" > "%backmysqlbat%"
    FOR /f "usebackq skip=1 tokens=*" %%i in ("%dblist%") DO ECHO mysqldump --single-transaction "%%i" -h"%dbhost%" -u"%dbuser%" -p"%dbpwd%" ^> "%backDbTmpPath%\%%i.sql" >>"%backmysqlbat%" && ECHO if not %%errorlevel%%==0 (ECHO %%i ^>^> "%errorFile%" ^& ECHO %myDate% %TIME%    数据库备份失败:%%i^>^>"%backupLogFile%" ^& SET isExistError=yes) >> "%backmysqlbat%"
    
    call "%backmysqlbat%"
    
    REM 如果不存在错误,删除错误文件。
    IF %isExistError%==no DEL "%errorFile%" /Q /F > NUL
    IF %enableCompress%==yes GOTO CompressBackup
    GOTO BackupFinished
    
    REM ****压缩处理****
    :CompressBackup
    IF %compressType%==rar GOTO RarCompress
    
    REM CAB压缩处理
    REM 进行CAB压缩。注:makecab,不能在一个压缩包中创建目录。而且需要创建文件列表才能创建多文件压缩包。同时文件名不能重复。
    FOR /f "tokens=1* delims=" %%i in ('DIR "%backDbTmpPath%" /S /B /A-D') do echo "%%i" >> "%myTempDir%cab_files.lst"
    SET cabCompressLevel=18
    IF %compressLevel%==0 SET cabCompressLevel=15
    IF %compressLevel%==0 SET cabCompressLevel=21
    REM 切换到零时目录
    FOR /F "delims=:" %%i IN ('ECHO %myTempDir%') DO %%i:
    CD "%myTempDir%"
    
    IF NOT %volumePackSize%==0 GOTO CabSplitCompress
    makecab /f "%myTempDir%cab_files.lst" /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=0 /d diskdirectorytemplate=cabdb /d cabinetnametemplate="%backupName%.cab"
    MOVE /Y "%myTempDir%cabdb\%backupName%.cab" "%backupPath%"
    GOTO BackupFinished
    
    :CabSplitCompress
    SET /A maxdisksize=%volumePackSize% * 1024
    makecab /f "%myTempDir%cab_files.lst" /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=%maxdisksize% /d diskdirectorytemplate=cabdb /d cabinetnametemplate="%backupName%.part*.cab"
    MOVE /Y "%myTempDir%cabdb*" "%backupPath%\%backupName%"
    GOTO BackupFinished
    
    REM RAR 压缩处理
    :RarCompress
    SET rarCommand="%rarPath%
    ar.exe" a -r -ep1 -o+ -m%compressLevel%
    IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% -v%volumePackSize%
    IF NOT %rarPwd%=={empty} SET rarCommand=%rarCommand% -p%rarPwd%
    REM 如果未分卷,保存在备份目录的根目录
    IF %volumePackSize%==0 SET rarCommand=%rarCommand% "%backupPath%\%backupName%.rar"
    REM 如果分卷,保存在根目录下的一个专属文件夹中
    IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% "%backupPath%\%backupName%\%backupName%.rar"
    SET rarCommand=%rarCommand% "%backDbTmpPath%"
    %rarCommand%
    REM ****完成压缩处理****
    
    :BackupFinished
    ECHO %myDate% %TIME%    完成一次自动备份。备份目录:"%backupPath%\%backupName%" >> "%backupLogFile%"
    IF %isExistError%==yes ECHO                但是存在没有成功备份的数据库。查看没有成功备份的数据库,请查看文件备份文件夹中的"##BackupFailDbs.txt" >> "%backupLogFile%"
    
    REM 完成备份数据库
    REM ***************************************************************************
    
    
    
    
    REM ***************************************************************************
    REM 删除历史备份
    
    :RemoveHistoryBackup
    IF %isExistError%==yes ( IF %onErrorDeleteBackFile%==no GOTO ClearTmpFile )
    
    IF %deleteHistorySkips%==0 GOTO ClearTmpFile
    IF %enableCompress%==no GOTO RemoveHistoryBackupFolder
    IF NOT %volumePackSize%==0 GOTO RemoveHistoryBackupFolder
    GOTO RemoveHistoryBackupFile
    
    :RemoveHistoryBackupFolder
    FOR /F "Skip=%deleteHistorySkips% tokens=*" %%i IN ('DIR "%backupPath%\%backupFolderPrefix%*" /TC /O-D /AD /B') DO RD "%backupPath%\%%i" /S /Q & ECHO %myDate% %TIME%    删除历史备份:%%i >> "%backupLogFile%"
    GOTO ClearTmpFile
    
    :RemoveHistoryBackupFile
    FOR /F "Skip=%deleteHistorySkips% tokens=*" %%i IN ('DIR "%backupPath%\%backupFolderPrefix%*" /TC /O-D /A-D /B') DO DEL "%backupPath%\%%i" /Q /F & ECHO %myDate% %TIME%    删除历史备份:%%i >> "%backupLogFile%"
    GOTO ClearTmpFile
    
    REM 完成删除历史备份
    REM ***************************************************************************
    
    
    
    
    :ClearTmpFile
    CD 
    RD /S /Q "%myTempDir%" > NUL
    
    :END
    ECHO. >> "%backupLogFile%"
    View Code

    2.工具备份:

      (1).MySQL Backup Tool备份  (自动备份、手动备份)

    下载地址:

    http://www.jb51.net/database/42565.html

    下载完后打开如下图:

    打开图中标示的文件:

    填写配置信息:

    保存:保存配置信息;

    创建备份:点击后会立即备份;测试使用,查看是否备份成功;

    然后可以定时备份:使用系统的任务计划;

      (2).mysql workbeach:(手动备份)

    Server——》data export(导出)

      (3).navicat:(手动备份)

      导出向导

      转储sql文件

    3.web备份:

    使用empirebak v2010备份

    http://dbmanager.soft.supcon.com/

     二.恢复:

    1.脚本恢复:

    @echo off
     mysql -hlocalhost -uzlp -p123 test< D:zlpBackup-mysql20150817-test.sql

    2.工具恢复:

      (1).mysql workbeach:(手动恢复)

    Server——》data import(导入)

      (2).navicat:(手动恢复)

      导入向导

      运行sql文件

    三.参考:

    备份MySQL数据库的命令
    
    
    mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
    
    备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。
    
    
    mysqldump ---add-drop-table -uusername -ppassword databasename > backupfile.sql
    
    直接将MySQL数据库压缩备份
    
    
    mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
    
    备份MySQL数据库某个(些)表
    
    
    mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
    
    同时备份多个MySQL数据库
    
    
    mysqldump -hhostname -uusername -ppassword --databases databasename1 databasename2 databasename3 > multibackupfile.sql
    
    仅仅备份数据库结构
    
    
    mysqldump --no-data --databases databasename1 databasename2 databasename3 > structurebackupfile.sql
    
    备份服务器上所有数据库
    
    
    mysqldump --all-databases  allbackupfile.sql
    
    还原MySQL数据库的命令
    
    
    mysql -hhostname -uusername -ppassword databasename < backupfile.sql
    
    还原压缩的MySQL数据库
    
    
    gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
    
    将数据库转移到新服务器
    
    
    mysqldump -uusername -ppassword databasename | mysql --host=*.*.*.* -C databasename
    
     
    压缩备份    
     
    
    备份并用gzip压缩:
    
    
    mysqldump < mysqldump options> | gzip > outputfile.sql.gz
    
    从gzip备份恢复:
    
    
    gunzip < outputfile.sql.gz | mysql < mysql options>
    
    备份并用bzip压缩:
    
    
    mysqldump < mysqldump options> | bzip2 > outputfile.sql.bz2
    
    从bzip2备份恢复:
    
    
    bunzip2 < outputfile.sql.bz2 | mysql < mysql options> 


     

  • 相关阅读:
    软件工程——第六章 软件测试【转】
    软件工程——第五章 程序编码【转】
    软件工程——第四章 面向过程的软件设计方法 【转】
    软件工程——第三章 软件需求分析 【转】
    软件工程——第二章 软件计划 【转】
    如何修改远程桌面的端口号
    关于导出Excel
    软件工程——第一章 软件和软件工程的基本概念【转】
    重构代码的7个阶段
    hibernate @JoinColumn
  • 原文地址:https://www.cnblogs.com/zlp520/p/4737072.html
Copyright © 2011-2022 走看看