- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
相信大家都还记得这则新闻吧,欧洲云计算巨头 OVH 位于法国斯特拉斯堡的机房发生严重火灾,大火彻底摧毁了五层高、占地 500 平方米的 SBG2 数据中心.
当地报纸称 115 位消防员投入 6 个小时才将其扑灭。经过长达 6 个小时的持续燃烧,SBG2 内的数据恐怕已经彻底丢失.
大火对欧洲范围内的众多网站造成严重影响。据 Netcraft 称,目前跨 464000 个域的多达 360 万个网站皆已下线.
数据是无价的,所以生产环境中定时备份数据库显得尤为重要。备份能防止服务器故障和人为误操作带来的数据丢失.
生产环境中linux操作系统也是服务器的首选,所以我们今天就以linux为例,说一说数据库备份.
具体以什么数据库为例呢,就以这几年工作中接触到的几种常见数据库为例吧.
在这里呢也给自己挖一个坑,工作中呢也用到winserver 作为服务器的情况,所以呢后面也整理更新下winserver 环境下数据库备份.
语法:
crontab[-e|-l|-r]
-e:编辑crontab 定时任务
-l:查询crontab定时任务
-r:删除当前用户所有的crontab定时任务
crontab用户的定时任务一般分为6段(空格分隔,系统的定时任务则/etc/crontab分为7段),其中前五段位时间设定段,第六段为所要执行的命令或脚本任务段.
①语法:
* * * * * cmd
①cmd为要执行的命令或脚本,例如/server/scripts/lee.sh
②每个段之间必须要有空格。
② crontab语法格式中时间段的含义表 。
段 | 含义 | 取值范围 |
---|---|---|
第一个“*” | 一小时当中的第几分钟 | 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 |
① 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命令
这里我们以每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
#!/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
#!/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
#!/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 {} \; #删除七天前备份文件
#!/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
每天凌晨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环境下数据库备份.
敬请期待哦 (●'◡'●) 。
最后此篇关于数据库定时备份linux篇的文章就讲到这里了,如果你想了解更多关于数据库定时备份linux篇的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
Linux 管道可以缓冲多少数据?这是可配置的吗? 如果管道的两端在同一个进程中,但线程不同,这会有什么不同吗? 请注意:这个“同一个进程,两个线程”的问题是理论上的边栏,真正的问题是关于缓冲的。 最
我找到了here [最后一页] 一种有趣的通过 Linux 启动 Linux 的方法。不幸的是,它只是被提及,我在网上找不到任何有用的链接。那么有人听说过一种避免引导加载程序而使用 Linux 的方法
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我试图了解 ld-linux.so 如何在 Linux 上解析对版本化符号的引用。我有以下文件: 测试.c: void f(); int main() { f(); } a.c 和 b.c:
与 RetroPie 的工作原理类似,我可以使用 Linux 应用程序作为我的桌面环境吗?我实际上并不需要像实际桌面和安装应用程序这样的东西。我只需要一种干净简单的方法来在 RaspberryPi 上
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
有什么方法可以覆盖现有的源代码,我应该用 PyQt、PyGTK、Java 等从头开始构建吗? 最佳答案 如果您指的是软件本身而不是它所连接的存储库,那么自定义应用程序的方法就是 fork 项目。据我所
我的情况是:我在一个磁盘上安装了两个 linux。我将第一个安装在/dev/sda1 中,然后在/dev/sda2 中安装第二个然后我运行第一个系统,我写了一个脚本来在第一个系统运行时更新它。
我在 i2c-0 总线上使用地址为 0x3f 的系统监视器设备。该设备在设备树中配置有 pmbus 驱动程序。 问题是,加载 linux 内核时,这个“Sysmon”设备没有供电。因此,当我在总线 0
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我正试图在 linux 模块中分配一大块内存,而 kalloc 做不到。 我知道唯一的方法是使用 alloc_bootmem(unsigned long size) 但我只能从 linux 内核而不是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有 .sh 文件来运行应用程序。在该文件中,我想动态设置服务器名称,而不是每次都配置。 我尝试了以下方法,它在 CentOS 中运行良好。 nohup /voip/java/jdk1.8.0_71/
我是在 Linux 上开发嵌入式 C++ 程序的新手。我有我的 Debian 操作系统,我在其中开发和编译了我的 C++ 项目(一个简单的控制台进程)。 我想将我的应用程序放到另一个 Debian 操
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我使用4.19.78版本的稳定内核,我想找到带有企鹅二进制数据的C数组。系统启动时显示。我需要在哪里搜索该内容? 我在 include/linux/linux_logo.h 文件中只找到了一些 Log
我知道可以使用 gdb 的服务器模式远程调试代码,我知道可以调试针对另一种架构交叉编译的代码,但是是否可以更进一步,从远程调试 Linux 应用程序OS X 使用 gdbserver? 最佳答案 当然
是否有任何可能的方法来运行在另一个 Linux 上编译的二进制文件?我知道当然最简单的是在另一台机器上重建它,但假设我们唯一能得到的是一个二进制文件,那么这可能与否? (我知道这可能并不容易,但我只是
我是一名优秀的程序员,十分优秀!