Mysql数据库——完全备份Shell脚本与数据库备份恢复总结

目录

前言

Mysql数据库备份方法

备份策略

一、Mysql数据库备份与恢复总结 

1.Mysql备份总结 

1.1MysqlDump逻辑热备

1.2xtrabackup物理热备

2.Mysql完全恢复总结

2.1完全恢复

3.Mysql增量备份总结

3.1增量备份与恢复

4.断点恢复

4.1基于位置点恢复

4.2基于时间点恢复

二、Mysql数据库完全备份Shell脚本 


前言

Mysql数据库备份方法

  • 物理备份:直接对数据库的物理文件(数据文件、日志文件等)进行备份
  • 逻辑备份:对数据库的库和表对象以SQL语言的形式导出进行备份

备份策略

  • 完全备份:每次备份都备份完整的库或者表数据
  • 差异备份:只备份上一次完全备份后的更新数据
  • 增量备份:每次备份只备份上一次完全备份或增量备份后的更新数据
  • 数据库上云迁移:冷迁移(物理冷备---->先关闭数据库---->再打包备份+恢复);热迁移(阿里云自带的热迁移工具DTS(数据传输服务))

一、Mysql数据库备份与恢复总结 

1.Mysql备份总结 

1.1MysqlDump逻辑热备

mysqldump -uXXX -pXXX  --databases 库1 [库2 ....] > XXX.sql
#备份一个或多个库及库中所有的表数据
mysqldump -uXXX -pXXX  --all-databases > XXX.sql
#备份所有的库
mysqldump -uXXX -pXXX  库名 > XXX.sql
#备份指定库中的所有的表数据,不包含库对象
mysqldump -uXXX -pXXX  库名 表1 [表2 ....] > XXX.sql
#备份指定库中的一个或多个表数据,不包含库对象

1.2xtrabackup物理热备

2.Mysql完全恢复总结

2.1完全恢复

先登录到数据库,再执行 source XXX.sql (如果sql文件是只备份了表数据的文件,需要先创建库并 use 切换库后再执行)

mysql -uXXX -pXXX < XXX.sql         cat XXX.sql | mysql -uXXX -pXXX                         #恢复库
mysql -uXXX -pXXX 库名 < XXX.sql    cat XXX.sql | mysql -uXXX -pXXX 库名                   #恢复表

3.Mysql增量备份总结

3.1增量备份与恢复

通过刷新二进制日志间接实现增量备份
mysqladmin -uXXX -pXXX flush-logs
 
查看二进制日志内容
mysqlbinlog --no-defaults --base64-output=decode-rows -v <BINLOG>
 
使用二进制日志增量恢复
mysqlbinlog --no-defaults <BINLOG> | mysql -uXXX -pXXX

4.断点恢复

4.1基于位置点恢复

mysqlbinlog --no-defaults --start-position='开始位置点' --stop-position='结束位置点'  <BINLOG> | mysql -uXXX -pXXX

4.2基于时间点恢复

mysqlbinlog --no-defaults --start-datetime='YYYY-mm-dd HH:MM:SS' --stop-position='YYYY-mm-dd HH:MM:SS'  <BINLOG> | mysql -uXXX -pXX

如果需要恢复到某条sql语句之前的所有数据,就stop在这个语句的位置点或时间点之前
如果需要恢复某条sql语句及其之后的所有数据,就从这个语句的位置点或时间点开始start

二、Mysql数据库完全备份Shell脚本 

#!/bin/bash
##增量备份脚本
DIRLOGS=/var/log/mysql
LOGS_HOME=/usr/local/mysql/data
TODAY=$(data +%F)
YESTERDAY=$(date -d '-1 day' +%F)
USER=root
PASSWORD=abc123
 
#先判断收集备份文件的目录是否存在,不存在则创建目录
[ -d $DIRLOGS ]||mkdir -p $DIRLOGS
 
##备份二进制日志的索引文件到指定目录并加入时间标记
\cp  $LOGS_HOME/mysql_bin.index $DIRLOGS/mysql_bin.index.$TODAY
 
#先判断昨天的二进制日志的索引文件是否存在,存在则作为过滤条件过滤出今天需要备份的二进制日志文件名称
if [ -f $DIRLOGS/mysql_bin.index.$YESTERDAY ];then
    BINGLOG=$(cat $DIRLOGS/mysql_bin.index.$TODAY|grep -v $(cat $DIRLOGS/mysql_bin.index.$YESTERDAY)|awk -F/ '{print $2}')
  else
    BINGLOG=$(cat $DIRLOGS/mysql_bin.index.$TODAY|awk -F/ '{print $2}')
fi
 
##刷新生成新的二进制日志文件,便于收集最新的二进制日志
mysqladmin -u"$USER" -p"$PASSWORD" flush-logs &>/dev/null
 
##使用for循环,对所有的新产生的binlog文件进行备份
for i in $BINGLOG
do
mv $LOGS_HOME/$i  $DIRLOGS/$i.$TODAY
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值