Linux下Mysql每天自动备份
新建目录
mkdir -p /data/mysqlbal/data mkdir -p /data/mysqlbal/scripts mkdir -p /data/mysqlbal/logs
创建备份脚本
cd /data/mysqlbak/scripts vi backup.sh #!/bin/bash #备份目录 BACKUP_ROOT=/data/mysqlbak BACKUP_FILEDIR=$BACKUP_ROOT/data #当前日期 DATE=$(date +%Y%m%d) ######备份###### #查询所有数据库 #-uroot -p123456表示使用root账号执行命令,且root账号的密码为:123456 DATABASES=$(mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql") #循环数据库进行备份 for db in $DATABASES do echo echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN---------- mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE---------- echo done echo "done"
设置脚本的执行权限
chmod 777 backup.sh
将备份操作加入到定时任务(每天凌晨2点定时执行)
crontab -e 00 2 * * * /data/mysqlbak/scripts/backup.sh > data/mysqlbak/logs/backup.log 2>&1
创建删除脚本(定时删除7天前的备份数据)
vi backup_clean.sh #!/bin/bash echo ----------CLEAN BEGIN---------- find /data/mysqlbak/data -mtime +7 -name "*.gz" -exec rm -rf {} \; echo ----------CLEAN COMPLETE----------
设置脚本的执行权限
chmod 777 backup_clean.sh
将删除操作加入到定时任务(每天凌晨1点定时执行)
00 1 * * * /data/mysqlbak/scripts/backup_clean.sh > /data/mysqlbak/logs/backup_full_clean.log 2>&1
查看定时任务
crontab -l
如果需要备份到另外一台机器,可以备份完scp到另外一台机器
首先服务器需要安装export,yum安装:
yum install expect
或者源码安装,参考
https://www.cnblogs.com/operationhome/p/9154055.html
脚本修改:
#!/bin/bash #备份目录 BACKUP_ROOT=/data/mysqlbak BACKUP_FILEDIR=$BACKUP_ROOT/data #当前日期 DATE=$(date +%Y%m%d) ######备份###### #查询所有数据库 #-uroot -p123456表示使用root账号执行命令,且root账号的密码为:123456 DATABASES=$(mysql -uroot -p123456 -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql") #循环数据库进行备份 for db in $DATABASES do echo echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz BEGIN---------- mysqldump -uroot -p123456 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers -B ${db} | gzip > $BACKUP_FILEDIR/${db}_$DATE.sql.gz echo ----------$BACKUP_FILEDIR/${db}_$DATE.sql.gz COMPLETE---------- echo ----------scp 226 begin---------- expect -c " spawn scp -r /data/mysqlbak/data/${db}_$DATE.sql.gz root@xxx.xxx.xxx.226:/data/mysqlbak/data225/ expect { \"*assword\" {set timeout 300; send \"此处是scp的密码\r\"; exp_continue;} \"yes/no\" {send \"yes\r\";} } expect eof" echo ----------scp 226 end---------- echo done echo "done"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现