一、lvm快照原理:

当一个snapshot创建时,仅拷贝原卷中数据的元数据,创建时并不会有数据的物理拷贝,因此snapshot的创建几乎是实时的,当原卷上有写操作执行时,snapshot跟踪原卷块的改变,这时原卷上将要改变的数据在改变之前被拷贝到snapshot预留的空间里,因此这个原理的实现叫做写时复制。在写操作写入块之前,将原始数据移动到snapshot空间里,这样就保证了所有的数据在snapshot创建时保持一致。而对于snapshot的读操作,如果读取数据块是没有修改过的,那会将读操作直接重定向到原卷上,如果要读取已经修改过的块,那就读取拷贝到snapshot中的块。创建snapshot的大小并不需要和原卷一样大,其大小仅仅只需要考虑两个方面:从shapshot创建到释放这段时间内,估计块的改变量有多大;数据更新的频率。一旦snapshot记录原卷块变换的信息空间满了,那这个snapshot立刻被释放,无法使用,从而导致这个snapshot无效。

二、基于lvm2快照执行备份恢复:

1、演示环境:

IP

操作系统

数据库版本

安装方式

数据目录

默认存储引擎

角色

192.168.1.145

CentOS   7.6 x86_64

MariaDB-10.3.15

yum

/data/mariadb

InnoDB

备份

192.168.1.146

CentOS   7.6 x86_64

MariaDB-10.3.15

yum

/var/lib/mysql

InnoDB

恢复

2、192.168.1.145主机新增一块20G硬盘,创建两个分区/dev/sdb1和/dev/sdb2:

# fdisk /dev/sdb --> n --> p --> 1 --> 回车 --> +10G --> t --> 8e --> p --> w --> # partx -a /dev/sdb

# fdisk /dev/sdb --> n --> p --> 2 --> 回车 --> 回车 --> t --> 2 --> 8e --> p --> w --> # partx -a /dev/sdb

192.168.1.145主机查看分区情况:# fdisk -l /dev/sdb

3、192.168.1.145主机分别创建用于存放数据文件、事务日志和二进制日志的逻辑卷:

(1)创建pv:# pvcreate /dev/sdb1 /dev/sdb2  # pvs

(2)创建vg:# vgcreate myvg /dev/sdb1 /dev/sdb2  # vgs

(3)创建用于存放数据文件和事务日志的lv:# lvcreate -L 8G -n mariadb_data myvg  # lvs

(4)创建用于存放二进制日志的lv:# lvcreate -L 2G -n mariadb_binlogs myvg  # lvs

(5)创建文件系统:# mke2fs -t ext4 /dev/myvg/mariadb_data  # mke2fs -t ext4 /dev/myvg/mariadb_binlogs

(6)创建挂载目录:# mkdir -pv /data/{mariadb,binlogs}

(7)开机自动挂载:# vim /etc/fstab

/dev/myvg/mariadb_data /data/mariadb ext4 defaults 0 0

/dev/myvg/mariadb_binlogs /data/binlogs ext4 defaults 0 0

(8)挂载分区:# mount -a  # mount | grep mariadb

(9)查看硬盘使用情况:# df -Th | grep mariadb

4、两个节点的服务器时间同步

5、192.168.1.145主机的server.cnf配置文件如下所示:

# cat /etc/my.cnf.d/server.cnf

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/data/mariadb

log_error=/var/log/mariadb.log

lower_case_table_names=1

character_set_server=utf8mb4

collation_server=utf8mb4_general_ci

log_bin=/data/binlogs/mysql-bin

binlog_format=mixed

sync_binlog=1

innodb_file_per_table=1

skip_name_resolve=1

slow_query_log=1

slow_query_log_file=mariadb-slow.log

6、192.168.1.146主机的server.cnf配置文件如下所示:

# cat /etc/my.cnf.d/server.cnf

[mysqld]

port=3306

socket=/var/lib/mysql/mysql.sock

datadir=/var/lib/mysql

log_error=/var/log/mariadb.log

lower_case_table_names=1

character_set_server=utf8mb4

collation_server=utf8mb4_general_ci

log_bin=mysql-bin

binlog_format=mixed

sync_binlog=1

innodb_file_per_table=1

skip_name_resolve=1

slow_query_log=1

slow_query_log_file=mariadb-slow.log

7、查看相关目录中的文件:

# ls -lh /data/mariadb

# ls -lh /data/binlogs

8、查看192.168.1.145主机的初始二进制日志信息:

MariaDB [(none)]> show binary logs;

MariaDB [(none)]> show master status;

9、192.168.1.145主机创建测试数据库和表:

MariaDB [(none)]> create database db;

MariaDB [(none)]> use db;

MariaDB [db]> create table tb(id int,name varchar(10));

MariaDB [db]> insert into tb values(1,'张三'),(2,'李四'),(3,'王五'),(4,'赵六');

MariaDB [db]> select * from tb;

MariaDB [db]> show master status;

备注:创建测试数据库和表的操作已记入二进制日志中

10、192.168.1.145主机请求在所有表中施加读锁,MariaDB数据库只能读不能写:

MariaDB [db]> flush tables with read lock;

11、192.168.1.145主机滚动二进制日志文件,并记录二进制日志文件及其事件位置:

MariaDB [db]> flush logs;

MariaDB [db]> \! mkdir -pv /backup

新开一个Xshell窗口,执行如下命令:

# mysql -uroot -p -e 'show master status;' > /backup/pos_`date +%F`.txt

# cat /backup/pos_2019-05-21.txt

12、查看数据目录大小:# du -sh /data/mariadb --> 122M

13、为逻辑卷创建快照卷:# lvcreate -L 200M -s -p r -n mariadb-snap /dev/myvg/mariadb_data

备注:二进制日志所在的逻辑卷无需创建快照卷

14、释放全局读锁:

MariaDB [db]> unlock tables;

15、挂载快照卷,复制数据至192.168.1.146主机进行备份:

# mount -r /dev/myvg/mariadb-snap /mnt

# ls /mnt

# scp -rp /mnt/* 192.168.1.146:/var/lib/mysql/

16、192.168.1.146主机修改/var/lib/mysql中子目录的属主属组,并重启mariadb服务:

# chown -R mysql.mysql /var/lib/mysql

# systemctl restart mariadb.service

17、备份完成后,192.168.1.145主机删除快照卷:

# umount /mnt

# lvremove /dev/myvg/mariadb-snap

# lvs

18、192.168.1.145主机在全量备份后执行如下修改操作:

MariaDB [db]> insert into tb values(5,'jack'),(6,'mary');

MariaDB [db]> delete from tb where id=3;

MariaDB [db]> update tb set name='keyso' where id=2;

MariaDB [db]> select * from tb;

MariaDB [db]> show binary logs;

MariaDB [db]> show master status;

19、192.168.1.145主机进行增量备份前先滚动二进制日志,生成一个新文件:

# mysqladmin -uroot -p flush-binary-log

MariaDB [db]> show binary logs;

MariaDB [db]> show master status;

20、192.168.1.145主机通过mysqlbinlog导出sql语句,进行增量备份:

# mysqlbinlog -uroot -p /data/binlogs/`cat /backup/pos_2019-05-21.txt | grep mysql-bin | awk '{print $1}'` | less

# mysqlbinlog -uroot -p /data/binlogs/`cat /backup/pos_2019-05-21.txt | grep mysql-bin | awk '{print $1}'` > /backup/incre_`date +%F`.sql

21、将192.168.1.145主机/backup目录中的incre_2019-05-21.sql复制至192.168.1.146主机/backup目录中:

# scp /backup/incre_2019-05-21.sql root@192.168.1.146:/backup

22、192.168.1.146主机查看db数据库中tb表数据:

# mysql -uroot -p

MariaDB [(none)]> select * from db.tb;

23、查看192.168.1.146主机的初始二进制日志信息:

MariaDB [(none)]> show binary logs;

MariaDB [(none)]> show master status;

24、192.168.1.146主机关闭会话级别二进制日志:

MariaDB [(none)]> show variables like 'sql_log_bin';

MariaDB [(none)]> set sql_log_bin=0;

MariaDB [(none)]> show variables like 'sql_log_bin';

25、192.168.1.146主机导入增量备份incre_2019-05-21.sql,根据二进制日志进行时间点恢复,将全量备份之后的修改操作进行重放,全部导入操作执行成功后开启会话级别二进制日志:

MariaDB [(none)]> source /backup/incre_2019-05-21.sql

MariaDB [db]> select * from tb;

MariaDB [db]> show master status;

备注:二进制日志中事件位置没有发生变化,说明导入操作没有记入二进制日志中

MariaDB [db]> set sql_log_bin=1;

MariaDB [db]> show variables like 'sql_log_bin';

备注:从快照卷中备份数据,从原卷中读取二进制日志

转载于:https://blog.51cto.com/qiuyue/2400052

CentOS 7.6基于lvm2快照备份恢复MariaDB相关推荐

  1. MySQL备份与恢复——基于Xtrabackup物理备份恢复

    一.说明 Percona XtraBackup工具提供了一种在执行MySQL数据热备的方法.Percona XtraBackup是一个免费的.在线的.开源的.完整的数据库备份解决方案,适用于MySQL ...

  2. Mysql主从同步复制(快速构建,基于CP数据备份 恢复)

    目录 相关 思路 主库 1.检查主库是否开启log-bin 2.开启log-bin 3.重启MySQL 4.检查生成的log-bin目录 5.进入MySQL,锁表,记录POS号 6.备份mysql文件 ...

  3. 什么鬼!基于备份恢复的实例数据还能变多?

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 对数据库进行数据备份无非两种方式,一种是逻辑备份,也就是直接连上数据库导出所有的数据,对于MySQL,就是通 ...

  4. 基于VMware应用环境的备份恢复解决方案思路

    基于VMware应用环境的备份恢复解决方案思路 https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=2650635166&idx ...

  5. 备份/恢复面临的问题与解决途径

    上世纪70年代,IT革命处于萌芽阶段.那时的数据量很小,通常只有几十兆到几百兆.当时的硬盘成本更是接近天价,每兆硬盘空间的售价超过了 3000美元,购买一个容量小于10兆的硬盘所需的费用,甚至超过了一 ...

  6. MySQL(一):分别基于mysqldump、lvm2、xtrabackup三种方式实现备份恢复

    分别基于mysqldump.lvm2.xtrabackup三种方式实现MySQL备份恢复 一.利用mysqldump实施逻辑备份操作 1.在/etc/my.cnf中添加如下,开启二进制日志 innod ...

  7. linux centos扩容挂载磁盘后,数据丢失恢复(无备份、快照情况恢复)

    折腾挂载,已经有好几次了,之前每次都有做好快照和备份,这次就直接操作了.结果就翻车了. 原因: 系统是宝塔环境,扩容格式化分区和挂载磁盘后,挂载在www下,www下默认的宝塔数据和数据库都丢失了,又重 ...

  8. lvm-snapshot:基于LVM快照的备份

    续 lvm-snapshot:基于LVM快照的备份之准备工作 Attention,Please! 重头戏开始啦 3.基于LVM快照的备份 lvm-snapshot:基于LVM快照的备份 (1)事务日志 ...

  9. MariaDB数据库介绍之一、备份(mysqldump、lvm2快照、xtrabackup)

    一.MariaDB简介及新特性 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成 ...

  10. MySQL基于mysqldump及lvmsnapshot备份恢复

    一.备份对象 数据 配置文件 代码:存储过程,存储函数,触发器 跟复制相关的配置 二进制日志文件 二.备份工具 mysqldump:逻辑备份工具 InnoDB热备.MyISAM温备.Aria温备 备份 ...

最新文章

  1. 观点丨麦肯锡:怎么理解“人工智能最大挑战与机会”
  2. Asp.net 序列化应用实例(转载)
  3. 戳破微服务的七大谎言
  4. LeetCode动态规划 斐波那契数
  5. std::atomic和std::mutex区别
  6. win下anaconda装python2.7和3.5以及jupyter共存 (本篇实践通过)
  7. python文件hadoop_采用Python来访问Hadoop HSFS存储实现文件的操作
  8. Leetcode 刷题笔记(二十) ——回溯算法篇之分割、子集、全排列问题
  9. JDBC和数据库连接池的关系
  10. PHP根据配置设置可变变量
  11. WinForm列表控件美化
  12. wxFormBuilder + wxPython手撸丑陋计算器
  13. MATLAB画柱状图对比
  14. 《web安全深度剖析》——信息探测and漏洞扫描
  15. 25行代码解决财务数据大写金额转换
  16. 日期和时间范围区间怎么查询
  17. BCB6.0 Import Type Library Excel2003时报错:因为我安装了Excel2007兼容包 的缘故
  18. 全屏Dialog的几种实现
  19. 基于北向资金的择时买入卖出策略复现
  20. 使用endnote来查找目标期刊

热门文章

  1. TensorFlow ERROR:Resource temporarily unavailable
  2. git gitlan 切糕入门
  3. 吹气球 Burst Balloons
  4. html表格填充空白单元格,快速填充数据表格中的空白单元格
  5. 磁盘是随机存储设备,但不是随机存储器(RAM)。为什么?
  6. 【数据分析】数据分析方法(一):5W2H 分析方法
  7. 百度定位获取当前信息
  8. 虚拟机VM12磁盘扩容
  9. 平台型时间信号强度曲线_MRI对动态增强时间信号曲线呈平台型乳腺纤维.PDF
  10. python 绘制损失函数曲线_绘制loss曲线