MySQL运维笔记-一种数据定期备份的方法

背景

是在清理某服务器无用数据时发现的,某系统里面,发现新的sql数据。为什么会有人定期备份成sql数据。后面查了下,发现是使用了shell脚本操作,在此记录下,因为感觉很有用。

过程

使用cronab每天凌晨3点备份数据。

bash 复制代码
00 03 * * * /home/xxx/xxx/xxx.sh

备份脚本内容:

bash 复制代码
#!/bin/bash
number=3
backup_dir=/home/xxx/xxx
dd=`date +%Y-%m-%d-%H-%M-%S`
username=xxxx
password=xxxx
mysqldump -u $username -p$password -A > $backup_dir/$dd.sql
delfile=`ls -lcrt $backup_dir/*.sql | awk '{print $9}' | head -1`
count=`ls -lcrt $backup_dir/*.sql | awk '{print $9}' | wc -l`
if [ $count -gt $number]
rm $delfile
fi

说明:

mysqldump -A:中的-A意思是 --all-databases,包含所有库、所有用户权限、所有系统配置

ls -lcrt中:

  • -l:long长格式显示;
  • -t:time-sort按时间排序,默认最新的排前面;
  • -c:--time=ctime --sort=time,与-t搭配,表明按变更时间进行排序。
  • -r:--severse,反转,和-t搭配时,原本是默认最新的排前面,有了-r后,最新的就放最后面了了。

| awk '{print $9}' | head -1命令:

  • 将刚刚ls查到的数据输入给awk命令,按字段处理文本。
  • awk '{print $9}' 提取第9段的信息(ls -lcrt中第9段是文件名),将文件名输入到head命令中。
  • head -1:只留下第一行输出,业务逻辑就是输出,当前sql中,最老的备份文件。

wc -l:

  • wc:word count统计
  • -l:指--lines代码只统计行数。

-gt:Greater Than:大于

优化

这个脚本,搭配crontab在凌晨3点备份整库,能实现功能,但存在一些问题,需要优化和整改。

① 数据太大,可加压缩功能:

bash 复制代码
mysqldump -A | gzip > $backup_dir/$dd.sql.gz 

② 权限问题,使用crontab最好是root权限,并且除了root本身有读写执行权限,其他用户和组都只放执行权限:

711:rwx--x--x

防止密码泄露。

相关推荐
海域云-罗鹏5 小时前
企业服务器防黑客攻击:WAF防火墙部署全攻略
运维·服务器
云飞云共享云桌面5 小时前
SolidWorks服务器怎么实现研发软件多人共享、数据安全管理
java·linux·运维·服务器·数据库·自动化
ZeroNews内网穿透5 小时前
EasyNode 结合 ZeroNews,实现远程管理服务器
运维·服务器·网络协议·安全·http
AOwhisky5 小时前
用户、用户组管理
linux·运维·运维开发
阿恩.7705 小时前
材料工程科技期刊征稿:快速发表,知网、维普检索!
经验分享·笔记·考研·网络安全·数学建模·能源·制造
关于不上作者榜就原神启动那件事5 小时前
Redis学习笔记
redis·笔记·学习
Channing Lewis5 小时前
mysql.connector.errors.OperationalError: 1040 (08004): Too many connections
数据库·mysql·adb
2301_767902645 小时前
Ansible 自动化运维入门到实战
运维·自动化·ansible
weixin_439706256 小时前
Windows MySQL的主从复制配置记录
windows·mysql·adb