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> 


     

  • 相关阅读:
    Linux 学习 step by step (1)
    ubuntu server nginx 安装与配置
    ubuntu server samba服务器配置
    iOS app集成支付宝支付流程及后台php订单签名处理
    mac 连接windows 共享内容
    linux 文件查找,which,whereis,locate,find
    ubuntu server vsftpd 虚拟用户及目录
    ubuntu server 安装 mantis bug tracker 中文配置
    ubuntu server vsftpd 匿名用户上传下载及目录设置
    linux 用户管理,用户权限管理,用户组管理
  • 原文地址:https://www.cnblogs.com/zlp520/p/4737072.html
Copyright © 2011-2022 走看看