数据库定时备份linux篇

这篇具有很好参考价值的文章主要介绍了数据库定时备份linux篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • 1 序言
  • 2 crond 相关知识点
    • 2.1 crond 是什么?
    • 2.2 crontab 进行定时任务设置
      • 2.2.1 crontab 指令选项说明
      • 2.2.2 crontab 指令使用格式
      • 2.2.3 特定时间执行任务例子
      • 2.2.4 crontab 设置步骤
  • 3 各个数据库备份脚本
    • 3.1 Oracle数据库
    • 3.2 Mysql数据库
    • 3.3 postgresql数据库
    • 3.4 mongoDB数据库
  • 4 定时备份数据库实际操作

1 序言

相信大家都还记得这则新闻吧,欧洲云计算巨头 OVH 位于法国斯特拉斯堡的机房发生严重火灾,大火彻底摧毁了五层高、占地 500 平方米的 SBG2 数据中心。

当地报纸称 115 位消防员投入 6 个小时才将其扑灭。经过长达 6 个小时的持续燃烧,SBG2 内的数据恐怕已经彻底丢失。

大火对欧洲范围内的众多网站造成严重影响。据 Netcraft 称,目前跨 464000 个域的多达 360 万个网站皆已下线。
数据库定时备份linux篇
数据库定时备份linux篇

数据是无价的,所以生产环境中定时备份数据库显得尤为重要。备份能防止服务器故障和人为误操作带来的数据丢失。

生产环境中linux操作系统也是服务器的首选,所以我们今天就以linux为例,说一说数据库备份。

具体以什么数据库为例呢,就以这几年工作中接触到的几种常见数据库为例吧。

  • Oracle
  • mysql
  • postgresql
  • mongoDB

在这里呢也给自己挖一个坑,工作中呢也用到winserver 作为服务器的情况,所以呢后面也整理更新下winserver 环境下数据库备份。

2 crond 相关知识点

2.1 crond 是什么?

  • crond任务调度相当于我们日常生活中的闹钟。可以在某个时间点执行特定的命令和程序。
  • linux系统自身定期执行的任务工作:例如轮询系统日志、备份系统数据、清理系统缓存、杀毒等等
  • 用户执行的工作任务:用户通过设置任务调度,定时执行自己添加shell脚本或简单的指令。例如每隔1分钟和互联网上时间服务器同步,每天凌晨1点备份数据库等等

2.2 crontab 进行定时任务设置

2.2.1 crontab 指令选项说明

语法:

crontab[-e|-l|-r]

-e:编辑crontab 定时任务
-l:查询crontab定时任务
-r:删除当前用户所有的crontab定时任务

2.2.2 crontab 指令使用格式

crontab用户的定时任务一般分为6段(空格分隔,系统的定时任务则/etc/crontab分为7段),其中前五段位时间设定段,第六段为所要执行的命令或脚本任务段。

①语法:

* * * * * cmd
①cmd为要执行的命令或脚本,例如/server/scripts/lee.sh
②每个段之间必须要有空格。

② crontab语法格式中时间段的含义表

数据库定时备份linux篇

含义 取值范围
第一个“*” 一小时当中的第几分钟 0-59
第二个“*” 一天当中的第几个小时 0-23
第三个“*” 一个月当中的第几天 1-31
第四个“*” 一年当中的第几个月 1-12
第五个“*” 一周当中的星期几 0-7(0和7都代表周天)

③ crontab语法格式中特殊符号的含义表

特殊符号 含义
* "*" 表示任意时间都,就是“每”的意思,举例:如00 01 * * * cmd 表示每月每周每日的凌晨1点执行cmd任务。
- "-" 表示分隔符,表示一个时间范围段,如17-19点,每小时的00分执行任务。00 17-19 * * * cmd 表示17,18,19点整点分别执行的意思。
, "," 表示分隔时间段的意思。30 17,18,19 * * * cmd 表示每天17,18,19点的半点执行cmd 也可以和“-”结合使用,如: 30 3-5,17-19 * * * cmd 表示每天3、4、5和17、18、19 执行
/n n代表数字 即”每隔n单位时间”,例如:每10分钟执行一次任务可以写 */10 * * * * cmd,其中 /10,的范围是0-59,也可以写成0-59/10

2.2.3 特定时间执行任务例子

① 30 23 * * * cmd    表示每天23:30分执行cmd命令
② 40 22 * * 1 cmd    表示每周一22:40分执行cmd命令
③ 30 0 1-12 * * cmd  表示每月1号和12号 00:30执行cmd命令
④ 30 0 * * 1-5 cmd   表示每周一和周五00:30执行命令
⑤ */10 4 * * * cmd   表示每天4:00每隔10分钟执行一次cmd命令

2.2.4 crontab 设置步骤

这里我们以每5分钟同步一次互联网时间为例进行说明

① 查看crond服务是否启动

/sbin/service crond status --查看crond服务是否启动

[root@xiezhr /]# /sbin/service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2021-01-10 21:14:50 CST; 1 months 25 days ago
 Main PID: 990 (crond)
   CGroup: /system.slice/crond.service
           └─990 /usr/sbin/crond -n

Jan 25 14:00:01 xiezhr crond[990]: /usr/sbin/sendmail: error while loading shared librari...ory
Jan 25 14:30:02 xiezhr crond[990]: /usr/sbin/sendmail: error while loading shared librari...ory
Jan 25 15:00:02 xiezhr crond[990]: /usr/sbin/sendmail: error while loading shared librari...ory
Jan 25 15:30:01 xiezhr crond[990]: /usr/sbin/sendmail: error while loading shared librari...ory
Jan 25 16:00:01 xiezhr crond[990]: /usr/sbin/sendmail: error while loading shared librari...ory
Jan 25 16:24:01 xiezhr crond[990]: (*system*) RELOAD (/etc/cron.d/yunjing)
Jan 28 11:18:01 xiezhr crond[990]: (*system*) RELOAD (/etc/cron.d/sgagenttask)
Jan 28 11:18:01 xiezhr crond[990]: (root) RELOAD (/var/spool/cron/root)
Feb 07 12:03:01 xiezhr crond[990]: (*system*) RELOAD (/etc/cron.d/yunjing)
Feb 07 12:03:01 xiezhr crond[990]: (root) RELOAD (/var/spool/cron/root)
Hint: Some lines were ellipsized, use -l to show in full.

如果crond服务没启动则执行如下命令启动crond服务

/sbin/service crond start          启动服务

查看进程

[root@xiezhr /]# ps -ef|grep crond
root       990     1  0 Jan10 ?        00:00:22 /usr/sbin/crond -n
root     19552 15271  0 16:10 pts/1    00:00:00 grep --color=auto crond

② 编写shell脚本

在home路径下添加如下shell脚本

[root@xiezhr home]# vim /home/my.sh
/usr/sbin/ntpdate time.windows.com >/dev/null 2>&1

③ 给脚本增加执行权限

[root@xiezhr home]# chmod u+x /home/my.sh 

④ 设置定时任务crontab

[root@xiezhr home]# crontab -e
*/5 * * * * /home/my.sh

数据库定时备份linux篇

3 各个数据库备份脚本

3.1 Oracle数据库

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1;
export ORACLE_SID=orcl;
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#以上代码为Oracle数据库运行账号oracle的系统环境变量设置,必须添加,否则crontab任务计划不能执行。

date=date +%Y_%m_%d            #获取系统当前日期时间
days=7                         #设置删除7天之前的备份文件
orsid=192.168.1.100:1521/orcl  #Oracle数据库服务器IP、端口、SID
orowner=scott                  #备份此用户下面的数据
bakuser=system                 #用此用户来执行备份,必须要有备份操作的权限
bakpass=oracle                 #执行备注的用户密码
bakdir=/backup/oracledata      #备份文件路径,需要提前创建好
bakdata=$orowner"_"$date.dmp   #备份数据库名称
baklog=$orowner"_"$date.log    #备份执行时候生成的日志文件名称
ordatabak=$orowner"_"$date.tar.gz #最后保存的Oracle数据库备份文件

cd $bakdir                     #进入备份目录
mkdir -p $orowner              #按需要备份的Oracle用户创建目录
cd $orowner                    #进入目录
exp $bakuser/$bakpass@$orsid grants=y owner=$orowner file=$bakdir/$orowner/$bakdata log=$bakdir/$orowner/$baklog #执行备份
tar -zcvf $ordatabak $bakdata  $baklog                      #压缩备份文件和日志文件
find $bakdir/$orowner  -type f -name "*.log" -exec rm {} \; #删除备份文件
find $bakdir/$orowner  -type f -name "*.dmp" -exec rm {} \; #删除日志文件
find $bakdir/$orowner  -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \;  #删除7天前的备份(注意:{} \中间有空格)

以上exp备份,如果要采用expd备份,只需将上面执行语句换成下面的即可
expdp $bakuser/$bakpass@$orsid full=y cluster=n directory=$bakdir dumpfile=$bakdir/$orowner/$bakdata logfile=$bakdir/$orowner/$baklog 

3.2 Mysql数据库

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin
export PATH
dbuser='root'          #数据库用户名
dbpasswd='123456'      #数据库密码
dbname='test1 test2'   #数据库名,可以定义多个数据库,中间以空格隔开,如 test1 test2
backtime=`date +%Y%m%d%H%M%S`    #备份时间
logpath= '/home/mysql/backup'     #日志备份路径
datapath='/home/mysql/backup'     #数据备份路径
echo "备份时间为${backtime},备份数据库表 ${dbname} 开始" >> ${logpath}/mysqllog.log  #日志记录头部

#正式备份数据库
for table in $dbname; do  
source=`mysqldump -u ${dbuser} -p${dbpasswd} ${table}> ${logpath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作
if [ "$?" == 0 ];then 
cd $datapath
tar jcf ${table}${backtime}.tar.bz2 ${backtime}.sql > /dev/null   #为节约硬盘空间,将数据库压缩
rm -f ${datapath}/${backtime}.sql   #删除原始文件,只留压缩后文件
cd $datapath
rm -rf `find . -name '*.sql.gz' -mtime +30` >> ${logpath}/mysqllog.log 2>&1  #删除30天前备份文件
echo "数据库表 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log
else
echo “数据库表 ${dbname} 备份失败!!” >> ${logpath}/mysqllog.log   #备份失败则进行以下操作
fi
done

3.3 postgresql数据库

#!/bin/bash
pg_user ='postgres'
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
export exp_date=`date '+%Y%m%d'`
pg_dump  -U postgres dbpostgres -f /u01/backup/$exp_date.sql  
gzip -1 /u01/backup/$exp_date.sql       #压缩备份文件
find /u01/backup -mtime +14 -exec rm {} \;   #删除七天前备份文件

3.4 mongoDB数据库

#!/bin/sh
DUMP=/home/webapp/Downloads/mongoDB/mongodbserver/bin/mongodump #mongodump备份文件执行路径
OUT_DIR=/home/webapp/backup/mongo_bak/mongod_bak_now #临时备份目录
TAR_DIR=/home/webapp/backup/mongo_bak/mongod_bak_list #备份存放路径
DATE=`date +%Y_%m_%d_%H_%M_%S` #获取当前系统时间

DB_USER=XXXX#数据库账号
DB_PASS=XXXX #数据库密码
DB_NAME=TEST #数据库名称
IP=xx.xx.xx.xx:27017
DAYS=365 #DAYS=30代表删除30天前的备份,即只保留最近30天的备份
TAR_BAK="mongod_bak_$DATE.tar.gz" #最终保存的数据库备份文件名
cd $OUT_DIR
rm -rf $OUT_DIR
mkdir -p $OUT_DIR/$DATE
$DUMP -h $IP -u $DB_USER -p $DB_PASS -d $DB_NAME -o $OUT_DIR/$DATE #备份数据库
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE                         #压缩为.tar.gz格式
find $TAR_DIR/ -mtime +$DAYS -delete                               #删除30天前的备份

exit

4 定时备份数据库实际操作

每天凌晨1点备份以上常见数据库

① 创建备份脚本

在home路径下创建backup.sh 并添加以上数据库备份shell脚本

[root@xiezhr home]#  vim /home/bakcup/backup.sh
# 要备份那个数据库,就往backup.sh 添加对应的shell脚本即可

③ 给脚本增加执行权限

[root@xiezhr home]# chmod u+x /home/bakcup/backup.sh

③ 设置定时任务crontab

[root@xiezhr home]# crontab -e
0 1 * * * /home/bakcup/backup.sh

本期到此就结束了,下一期我们说一说winserver环境下数据库备份。

敬请期待哦 (●'◡'●)文章来源地址https://www.toymoban.com/news/detail-440114.html

到了这里,关于数据库定时备份linux篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PostgreSQL数据库定时备份脚本

          大多数数据库管理系统都提供了自带的备份工具,可以使用这些工具来进行备份操作。     例如: MySQL:使用 mysqldump 命令进行备份。 PostgreSQL:使用 pg_dump 命令进行备份。       以下是一个用于定时备份 PostgreSQL 数据库的示例脚本。这个脚本将使用 pg_dump 工具来创建

    2024年02月11日
    浏览(44)
  • 数据库定时备份winserver2012篇

    目录 1 序言 2 任务计划相关知识点介绍 2.1 任务计划 是什么? 2.2 批处理文件 2.2.1 批处理文件简介 2.2.2 批处理常用命令介绍 3 各个数据库备份脚本 3.1 Oracle数据库 3.2 Mysql数据库 3.3 postgresql数据库 3.4 mongoDB数据库 4 添加任务计划定时备份数据库 数据是无价的,所以生产环境中

    2024年02月04日
    浏览(51)
  • 使用脚本定时备份MySql数据库文件

    如果mysql不在环境变量中,请先将mysql放入环境变量   新建一个脚本 脚本内容: 需要给这个脚本文件执行权限: 自动执行 查看crontab服务状态: 手动启动crontab服务: 查看crontab服务是否已设置为开机启动,执行命令: 加入开机自动启动:

    2024年04月26日
    浏览(45)
  • Docker容器MySQL数据库的备份与还原,以及每天定时自动备份.

    根据自己需要,我这个是Debian的5.7版本的镜像。 这个地方一定要注意: 有些版本的docker镜像里面移除了MySQL自带的工具。包括Mysqlbinlog,Mysqlcheck等。所以即使你开启了binlog,也是没有办法还原数据的,这里要注意一下镜像的选择。 mkdir三个文件夹,方便持久化。 /home/mysql/c

    2024年02月05日
    浏览(65)
  • Neo4j数据库自动启停与定时备份

    本文介绍neo4j数据库定时自动备份的方案和一些问题的解决方式。自动备份基本流程为“关闭-备份-启动”;首先介绍三个准备工作:安装service实现start和stop的操作、备份的基本逻辑、.bat文件操作;然后提供一个完整的备份脚本内容示例,并结合win10任务计划程序实现自动备

    2024年01月22日
    浏览(85)
  • 【Linux】Mysql的数据库备份及恢复

            备份就是为了防止原数据丢失,保证数据的安全。当数据库因为某些原因造成部分或 者全部数据丢失后,备份文件可以帮我们找回丢失的数据。因此,数据备份是很重要 的工作。 常见数据库备份的应用场景如下: 数据丢失应用场景: 人为操作失误造成某些数据

    2023年04月10日
    浏览(50)
  • Linux系统MySQL数据库的备份及应用

    本节主要学习了MySQL数据库的备份:概念,数据备份的重要性,造成数据丢失的原因,备份的类型,常见的备份方法,实例与应用等。 目录 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 1、物理与逻辑角度 ①物理备份—对数据库操作系统的物理文件

    2024年02月15日
    浏览(37)
  • 系统学习Linux-MySQL数据库备份(四)

    数据库备份是指将数据库中的数据、表格、视图、存储过程、触发器等信息备份到另一个地方,一遍在数据库丢失或损坏时进行恢复,数据库备份是数据库管理中必不可少的一项工作,通过备份可以保护数据库中的数据和业务。 备份的主要目的是灾难恢复,备份还可以测试应

    2024年02月15日
    浏览(53)
  • Linux-MariaDB数据库的备份与初始化

    Linux系统下我们比较常用的数据库软件是开源又免费的MySQL。MariaDB是MySQL的一个分支,采用GPL授权许可,完全兼容MySQL的API与命令行。虽然MariaDB公司即将倒闭,但这不影响它的性能超越MySQL的事实。 使用 mysqldump 命令。这个命令可以帮助导出一个含有数据库结构与数据的SQL脚本

    2024年02月15日
    浏览(80)
  • 小白带你学习linux的mysql数据库备份(三十)

    目录 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 1、物理与逻辑角度 1.1物理备份 1.2冷备份 1.3热备份 1.4逻辑备份 2、数据库备份策略角度 1.1完整备份 1.2增量备份 五、常见的备份方法 1、物理备份 2、使用专用备份工具 3、通过启用二进制日志增量

    2024年02月03日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包