本人使用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