MySQL 定时备份

1 设置好crontab 定时任务备份

#每天备份三次数据库
0 5,15,22  * * *  sh /data/script/alldatabase_back.sh &>/dev/null
#每天2点备份
0 2 * * *         sh /data/script/dev_alldatabase_back.sh  &>/dev/null

2 开始写备份脚本

#!/bin/bash
backupdir=/data/backup
time=`date +%Y-%m-%d-%H-%M`
if  [ ! -e  /data/backcup  ];then
 mkdir  -p  /data/backup
fi
/usr/bin/mysqldump  --single-transaction  --flush-logs --skip-add-drop-table  -uroot  -p'root@xx'  数据库  |bzip2 > $backupdir/数据库$time.sql.bz2

# 清理超过7天没使用的文件
find $backupdir -name "数据库*.sql.bz2" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1

批注:
--single-transaction参数的作用,设置事务的隔离级别为可重复读,即REPEATABLE READ,这样能保证在一个事务中所有相同的查询读取到同样的数据,也就大概保证了在dump期间,如果其他innodb引擎的线程修改了表的数据并提交,对该dump线程的数据并无影响
--skip-add-drop-table  ---取消每个数据表创建之前添加drop数据表语句(默认每个表之前存在drop语句)
--flush-logs  在开始导出前刷新服务器的日志文件
最后导出的数据库备份文件 就是这个 xx2019-11-14-02-00.sql.bz2
mysql -u 用户名 -p密码 数据库名 < 备份文件.sql  恢复某个节点数据
bzip2 -d xxg2019-12-19-11-53.sql.bz2  解压
查找一个数据库的引擎
SELECT CONCAT('alter table ',table_name,' engine=InnoDB;') FROM information_schema.tables

WHERE table_schema="xx" AND ENGINE="MyISAM";
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2

哪里看出是增量备份了?
而且这么备份,数据量非常小还勉勉强强,几十几百G甚至更高的简直在作死啊,教坏人不好吧

3个月前 评论
Krisji (楼主) 3个月前

@snower 说得不错。这个严格来说应该叫 定时全量备份

3个月前 评论
Krisji (楼主) 3个月前
Tsukasa_Kanzaki (作者) 3个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!