windows和Linux定时任务备份数据库(Mysql)

        引言:在上一家公司工作一年多了,基本是天天在复制别人的代码(我想很多同行都有同感!),很少有自己的东西。换工作后,发现要求自己的东西越来越多了。目前的工作,任务都要按时完成,觉得压力的同时也觉得很有激情,毕竟在压力之下我有了一些自己的东西。我想这会是个好的开始,我希望在今后能有更多更好自己的东西去与大家分享。ok,说正题。看标题就知道本文的主要内容了,很常见的问题---定时备份数据库!

 

我们先来看在windows下的bat

@echo off
echo -------------------------
echo bat路径:%cd%
set batPath=%cd%
if not exist "%batPath%\resume_dump" (md "%batPath%\resume_dump")
set filePath="%batPath%\resume_dump"
echo resume backup start!
echo %date%
echo -------------------------
rem 数据库信息
set ip=10.0.6.108
set port=3306
set databaseName=resume
set useName=root
set passWord=123456
rem 获取系统日期
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set test_db=resume_db_%year%%month%%day%.sql
mysqldump -h%ip%  -P%port% -u%useName% -p%passWord% --opt  --default-character-set=utf8 --hex-blob -R -B %databaseName% >%filePath%\%test_db%
rem 环境变量没配,导致备份失败,则跳到自动搜索目录
if ERRORLEVEL 1  goto backupFail
rem 备份成功,退出
if ERRORLEVEL 0  goto outBat
:outBat
echo 数据库备份成功!
exit
:backupFail
for %%i in (c d e f g) do for /f "delims=" %%a in ('dir /a-d /s /b %%i:\mysqldump.exe') do (if exist "%%a" ( set var=%%a &goto c
  )) 
:c
echo %var:~0,-15%
set panf=%var:~0,2%
%panf%
cd %var:~0,-15%
mysqldump -h%ip%  -P%port% -u%useName% -p%passWord% --opt  --default-character-set=utf8 --hex-blob -R -B %databaseName% >%filePath%\%test_db%
echo 数据库备份成功!!!
@echo off
echo resume backup end!

 代码解释 :set batPath=%cd%  获得bat当前的路径

                    echo %date%

                    set year=%date:~0,4%

                    set month=%date:~5,2%

                    set day=%date:~8,2%

                    set test_db=resume_db_%year%%month%%day%.sql

    以上的几行代码无非是获得系统时间,以日期给文件命名。

    cd C:\Program Files\MySQL\MySQL Server 5.5\bin:这句是到mysql的bin目录下去执行接下来的命令,不去肯定是不行的(网上说可以配置环境变量,但我还不知道咋搞的,有知道的还望指教啊!)。

mysqldump -h10.0.6.108 -uroot -p123456 --opt  --default-character-set=utf8 --hex-blob -R  resume >c:\mysql_dump\%test_db% 

       这句是整个bat最核心的语句了,mysqldump主要功能是用于mysql的导出。-h [数据库所在主机的ip] -u[用户名] -p[密码]  -R 表示导出存储过程和函数   resume 是服务器上的数据库,mysqldump的参数有很多,我会将其参数的使用写在我另一篇文章里面。 --default-character-set=utf8  这句是用来规定编码的,因为服务器上数据库的编码是utf8的,所以在这里必须这样做,不这样的话貌似会有乱码。--hex-blob  是将二进制转换为16进制,因为服务器上的数据库中有张表里面存放的是图片的信息(二进制),不写这句,二进制部分会是乱码(这个问题困扰了我一个多星期,后来是无意间找到了解决方案,大喜!)。至于  >c:\mysql_dump\%test_db%  就是将导出的数据写到对应的文件中去。最后将此bat加入到windows的定时任务中去就可以实现定时备份数据了。

      由于按照上级要求,需要去判断服务器是否配置了相应的环境变量,所以在此也比较麻烦的去进行了判断(大致原理是这样的:先去执行备份语句,如果成功了就直接跳出,如果没有成功则去找到对应的目录然后再执行备份语句)

  for %%i in (c d e f g) do for /f "delims=" %%a in ('dir /a-d /s /b %%i:\mysqldump.exe') do (if exist "%%a" ( set var=%%a &goto c ))

  这条语句就是用来找到执行目录的,我这里是通过mysqldump.exe文件去找的。

 Linux下的shell

#!/bin/bash
echo "RESUME BACKUP START"
filePath=$(cd "$(dirname "$0")";pwd)
dirPath="$filePath/resume_dump/"
echo $dirPath
if [ -d "$dirPath" ]; then
echo "文件夹已存在!"
else
mkdir "$dirPath"
fi
ip=10.0.6.108
useName=root
passWord=123456
port=3306
databaseName=resume
today=`date -d today +%Y%m%d`
test_db=resume_db_$today.sql
(mysqldump -h$ip -P$port -u$useName -p$passWord --default-character-set=utf8 --hex-blob -R -B $databaseName >$dirPath/$test_db)||
(file=`find / -name mysqldump`
dir=`dirname $file`
cd $dir
echo `pwd`
mysqldump -h$ip -P$port -u$useName -p$passWord --default-character-set=utf8 --hex-blob -R -B $databaseName >$dirPath/$test_db)
echo "RESUME BACKUP END"

          代码解释 :  filePath=$(cd "$(dirname "$0")";pwd)   获得shell当前的路径     

           代码就不再解释了,跟上面的bat基本一样,主要是找目录就相对简单多了(file=`find / -name mysqldump`(找到文件),dir=`dirname $file`(获得文件目录))。至于定时任务用crontab就可以实现了。

  简单的说下如何导入:

    进入需要导入的数据库后,执行mysql -uroot -p123456 database </home/$test_db(上面导出的文件) 或者( source   /home/$test_db (上面导出的文件))。

 

 

 

 

 

 

 

 

 


  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值