LVM 快照备份流程(差异):
首先进行一次物理完全备份
[root@mysql-21 /test]# ./full-backup.sh
对/data/mysql的完全备份开始…
锁定表…
解锁表…
备份完成时1秒
LVM快照: 锁表时间接近热备
- 加全局读锁
mysql> flush tables with read lock;
2.创建快照,刷新二进制日志
3. 释放锁
4. 挂载 快照设备 ,并从快照设备中,对数据库文件进行打包与 压缩
5、卸载快照设备
6、 移除快照设备
当前数据为2074
产生了一份新的 二进制日志。
此时,手动插入 几条数据,修改几条数据 ======》 体现最新的 二进制日志中。!
插入20条数据
模拟崩溃:
停止服务,删除 数据库所有文件
[root@mysql-21 /test]# /usr/local/mysql57/support-files/mysql.server stop
[root@mysql-21 /test]# rm -rf /data/mysql
( 提醒:想清楚自己的二进制日志在哪?? )
要求,恢复所有数据,包括 刚才 新增 和 修改了的 数据。
我的二进制文件放在
[root@mysql-21 /test]# cd /bin-log/mysql-bin. 二进制文件
mysql-bin.000001 mysql-bin.000004 mysql-bin.000007 mysql-bin.index
mysql-bin.000002 mysql-bin.000005 mysql-bin.000008
mysql-bin.000003 mysql-bin.000006 mysql-bin.000009
查看最后一次备份后二进制
[root@mysql-21 ~]# vim /root/mysql-bak.log
===[完全备份]2019年 04月 16日 星期二 21:15:09 CST==========
/bin-log/mysql-bin.000008
[root@mysql-21 /backup]# ls
mysql2019-04-16-21-42-18-full.tar.gz #完全备份文件
mysql-2019-04-16-21-44-09.tar.gz #l执行脚本后的lvm差异备份文件
恢复流程:
1、恢复最近的一次 完全备份, mysql2019-04-16-21-42-18-full.tar.gz
在/data 下解压。
[root@mysql-21 /data]# tar -xf mysql2019-04-16-21-42-18-full.tar.gz
2、将最近的一份二进制日志 进行导出
mysqlbinlog /data/mysql-binlog/mysql.000025 > /tmp/a.sql
3、启动mysql服务(产生一份新的二进制日志 ),登录mysql
[root@mysql-21 /test]# /usr/local/mysql57/support-files/mysql.server start
[root@mysql-21 ~]# mysql
### 此时数据库没有完全恢复完成,此时应该还是禁止 数据 写入到数据库
### 临时 阻断 3306 的连接。
iptables -t filter -A INPUT -p tcp --dport 3306 ! -s 192.168.217.21 -j REJECT
4、设置 临时 停止记录 二进制 日志。
mysql> set session sql_log_bin=0;
5、将二进制文件导入数据库中
mysql> source /tmp/a.sql;
6、 重新开启二进制日志功能
mysql> set session sql_log_bin=1;
至此,恢复完成! 用 select 语句 进行 查询验证,看数据是否恢复 。
mysql> select * from class.students;
数据全部找回,恭喜你,你又上了一层楼。
========================================
LVM + 二进制日志 实现 差异备份 + Cron: =========================
二进制日志 与 数据库 分开存放。 数据库 /mysql 二进制日志 /data/mysql-binlog/
完全备份脚本(每周日 ) :=========================
[root@mysql-21 /test]# cat mysql-lvm.sh
#!/bin/bash
#需求:lvm完全备份
a_log="/root/mysql-bak.log"
a_dir=/backup
data_dir=/data/mysql
data_name=echo echo $data_dir | awk -F "/" '{print $NF}'
tmp_dir="/tmp-mysql"
echo “=[完全备份]date
===================”>> $a_log
tail -1 /bin-log/mysql-bin.index >> $a_log
echo “对$data_dir的完全备份开始…”
time1=date +%s
cp /etc/my.cnf $a_dir/my-date +%F-%H-%M-%S
.cnf
mkdir -p t m p