Linux 设置定时任务备份MySQL数据库

本人使用CentOS 6.5

已安装MySQL-client-5.6.51-1.el6.x86_64.rpm;  MySQL-server-5.6.51-1.el6.x86_64.rpm

一、准备工作

首先是三种文件,根据自己操作系统, 数据库选择对应文件

Linux_MySQL_BackUp.sh 文件内容

#!/bin/bash
#================基础参数================
#参数设置
user="root"
password="123456"
port="3306"

#数据库名称
db_name="db_name"

#备份位置(若不存在,会自动创建)
datafile_path="/opt/backup/database_bak"

#mysqlDump的绝对位置,基本为mysql安装路径
mysqlDump_path="/usr/bin/mysqldump"

#mysql socket地址 查看: netstat -ln | grep mysql
mysql_socket="/var/lib/mysql/mysql.sock"


#是否删除.sql文件(包含子目录): ON开启,其他字符不开启
rf_switch="ON"

#数据保留天数(按文件修改时间计算)
expire_day=10

#================非开发人员勿改================
#备份最终路径
bak_path="${datafile_path}/${db_name}"
#错误日志文件名称
error_log="${bak_path}/${db_name}_error.log"

#================备份执行指令================
#判断文件夹,不存在则创建
if [ ! -d "$bak_path" ]
then
	mkdir -p  ${bak_path}
	echo "已创建文件夹${bak_path}"
fi

#判断mysql是否开启
checkPort=`lsof -i:${port} | wc -l`
if [ "$checkPort" -gt "0" ]
then
        echo "mysql 已启动"
else
        echo "mysql 未启动无法进行备份"
		echo "mysql 未启动无法进行备份" > $error_log
fi

#执行备份
${mysqlDump_path} --socket=${mysql_socket}  -u${user} -p${password} ${db_name} > ${bak_path}"/"${db_name}$(date +"%Y%m%d%H%M%S_%N").sql 2>>${error_log}



#删除过期文件
if [ $rf_switch == "ON" ]
then
	find ${bak_path} -name "*.sql" -mtime +${expire_day} | xargs rm -f
fi

Windows_MySql_BackUp.bat 文件内容

@echo off
::================需更改参数(不要加引号和空格)================
::参数设置
set user=root
set password=123456
set port=3306

::数据库名称
set db_name=db_name

::备份位置(若不存在,会自动创建)
set datafile_path=d:\opt\database_bak

::mysqlDump的绝对位置,基本为mysql安装路径
set mysqlDump_path=C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqldump.exe

::是否删除.sql文件(包含子目录): ON开启,其他字符不开启
set rf_switch=ON

::数据保留天数(按文件修改时间计算)
set expire_day=7


::================非开发人员勿改================
::备份最终路径
set bak_path=%datafile_path%\%db_name%
::错误日志文件名称
set error_log=%bak_path%\%db_name%_error.log


::判断文件夹不存在则创建
if not exist %bak_path% (
	mkdir %bak_path%
	echo %date% %time% 创建文件夹%bak_path% >> %bak_path%/info.log
)


::判断mysql是否开启
netstat -aon | findstr %port%

if %errorlevel% neq 0 (
	echo %date% %time% 没有监听到MySQL端口,请检查MySQL服务是否启动 >>%error_log%
)

::执行备份
set time_name=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%

"%mysqlDump_path%" -u%user% -p%password% %db_name% > %bak_path%\%db_name%_%time_name%.sql 2>> %error_log%
if %errorlevel% neq 0 (
	echo %date% %time%   数据库 %bak_path%\%db_name%_%time_name%.sql备份失败>>%error_log%
)

::删除过期文件
if %rf_switch%==ON goto RF_METHOD

:RF_METHOD
forfiles /s /d -%expire_day% /m *.sql /p "%bak_path%" /c "cmd /c del @path"
goto :EOF

Windows_Oracle_BackUp.bat 文件内容

@echo off
::================需更改参数(不要加引号和空格)================

::参数设置
set user=db_user
set password=123456
set port=1521
set datafile_path=d:\opt\database_bak
::是否删除.sql文件(包含子目录): ON开启,其他字符不开启
set rf_switch=ON
::数据保留天数(按文件修改时间计算)
set expire_day=7


::================非开发人员勿改================
set bak_path=%datafile_path%\%user%
set error_log=%bak_path%\%user%_error.log
set info_log=%bak_path%\%user%_info.log

::判断文件夹不存在则创建
if not exist %bak_path% (
	mkdir %bak_path%
	echo %date% %time% 创建文件夹%bak_path% >> %info_log%
)


::判断oralce是否开启
netstat -aon | findstr %port%

if %errorlevel% neq 0 (
	echo %date% %time% 没有监听到Oracle端口,请检查Oralce服务是否启动 >>%error_log%
)

::执行备份
set time_name=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%

exp %user%/%password% file=%bak_path%\%user%_%time_name%.dmp log=%bak_path%\%user%_%time_name%.dmp.log

if %errorlevel% neq 0 (
	echo %date% %time%   数据库%bak_path%\%user%_%time_name%.dmp备份失败>>%error_log%
)

::删除过期文件
if %rf_switch%==ON goto RF_METHOD

:RF_METHOD
forfiles /s /d -%expire_day% /m *.dmp* /p "%bak_path%" /c "cmd /c del @path"
goto :EOF

二、操作

定时脚本修改
1.    打开bat/sh文件, 按注释修改数据库的参数.
user    数据库用户名
password    数据库密码
port    数据库端口
db_name    数据库名
datafile_path    备份地址, 必须与统一备份系统的地址相同
mysqlDump_path(Oracle备份脚本无此项)    
        mysqldump路径查找方法:
                windows:    服务中找到mysql         ->         右键属性         ->         可执行文件的路径         ->         进入bin目录查找mysqldump.exe
                linux:  find / -name mysqldump

mysql_socket(仅linux系统mysql脚本中存在)
        查找方法:   netstat -ln | grep mysql
rf_switch    是否删除 ON:表示删除, 其他字符表示不删除
expire_day    数据保留天数

2.    双击.bat文件/运行.sh文件测试是否可执行.
3.    根据 <定时任务创建> 创建定时任务
4.    设置自动执行时间为1分钟后, 如果正确执行则表示定时任务创建成功, 然后将定时时间改回凌晨左右. 

定时任务创建
windows
1    控制面板 -> 所有控制面板项 -> 管理工具
2    任务计划程序库 -> Microsoft
3    创建基本任务
3.1    触发器:每天(0:01:00)
3.2    操作:启动程序
3.3    启动程序(选择定时脚本)
3.4    完成: 勾选(当单机” 完成”时,打开此任务属性的对话框)
3.5    勾选: 不管用户是否登录都要运行 / 使用最高权限运行

linux
1    将脚本存放在/var/spool/cron目录下, 并进入此目录
2    授权:  chmod 777
Linux_MySQL_BackUp.sh
3    测试执行: ./
Linux_MySQL_BackUp.sh
4    添加定时:  crontab –e
4.1    按”a”进入编辑模式
4.2    设置每天凌晨01:03分执行,输入: 3 1 * * * /var/spool/cron/
Linux_MySQL_BackUp.sh
4.3    按 esc , 输入 “:wq”

5    ***** :对应分/时/天/月/周
    每五分钟执行: */5 * * * *
    每天执行: 0 0 * * *
6    查看任务列表: crontab -l
7    删除任务: crontab -r

三、用自动备份的sql文件还原数据库:
mysql -u root -p 123456 db_name < /opt/backup/database_bak/db_name/db_name20211123112747_777264897.sql 

你可能感兴趣的:(MySQL,Linux,WINODWS,定时任务,备份MySQL)