#####################################

常见的数据备份类型和备份工具

mysqldump备份工具

使用LVM逻辑卷快照备份

#####################################

常见的数据备份类型和备份工具

数据的重要性我就不多说了……,常见的数据备份类型是根据不同的备份性质和要求来划分的,他们分别是:根据业务是否可在线、根据物理和逻辑、根据备份范围,下面就来简单的扫盲一下:

根据业务是否可在线

热备份:读写操作不受影响

温备份:仅可以执行读操作

冷备份:离线备份,读写操作均不能进行

根据物理和逻辑

物理备份:直接复制数据文件,速度快(在文件系统级别完成,不需要mysql进程参与),移植性差。

逻辑备份:将数据导出至文本文件中,速度慢(需要mysql进程参数),移植性好,丢失浮点数精度,可以方便使用文本处理工具。

根据备份范围

完全备份:备份全部数据

增量备份:仅备份上次完全备份或增量备份以后变化的数据(比增量备份多占据空间,但是还原的时候方便)

差异备份:仅备份上次完全备份以来变化的数据

这里特意盗用一幅图来更加直观的阐述增量备份和差异备份的区别:

完全+增量(还原时间长,复杂,占用空间小)

完全+差异(还原时间短,简单,占用空间大)

他们之间没有约束,比如 完全在线物理备份……

另外备份出的数据要经常测试是否可用,和制定好紧急还原方案………

备份的对象有数据、配置文件、二进制日志、事务日志等……

各个备份工具功能和性能对比如下图所示:



mysqldump备份工具

备份策略:周完全+每日增量(二进制日志)

完全备份

mysql> create database soulboy;
Query OK, 1 row affected (0.00 sec)
mysql> use soulboy;
Database changed
mysql> create table tb1 (id int auto_increment primary key,name char(30));
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> insert into tb1 (name) values ('kobe');
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select * from tb1;               #新库
+----+------+
| id | name |
+----+------+
|  1 | kobe |
+----+------+
1 row in set (0.00 sec)
完全备份,比例中表类型是InnoDB
mysqldump -uroot -p --master-data=2 --single-transaction  --all-databases  > /backup/alldatabases.sql
###########################补充说明###############################
mysqldum只能对MyISAM引擎做温备份,备份之前必须锁定表,如下:
mysqldump -uroot -p --master-data=2 --flush-logs --all-databases --lock-all-tables > /root/alldatabases.sql
##########################mysqldump选项###########################
-u                        #指定用户名
-p                        #指定用户密码
-h                        #指定主机地址
-A|--all-databases        #备份所有数据库
--databases               #备份指定数据库
--single-transcation      #基于此项可以实现对InnoDB表做热备份,但不需要使用
--lock-all-tables         #执行备份时为所有表请求加锁
-E|--events               #备份事件调度器代码
--opt                     #同时启动各种高级选项
-R|--routines             #备份存储过程和存储函数
--flush-logs              #备份之前刷新日志
--triggers                #备份触发器
--master-data=2           #该选项将会记录binlog的日志位置与文件名并追加到文件中,如果为1将会输出CHANGE

第一天

mysql> use soulboy;
Database changed
mysql> insert into tb1 (name) values ('wade');
Query OK, 1 row affected (0.00 sec)
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
|  1 | kobe |
|  2 | wade |
+----+------+
2 rows in set (0.00 sec)
####滚动二进制日志,进入第二天
mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.01 sec)
####备份第一天二进制日志为SQL格式并重命名为firstdays.sql
mysqlbinlog /mydata/data/mysql-bin.000008 > /backup/firstday.sql

第二天

#####插入新数据
mysql> insert into tb1 (name) values ('nash');
Query OK, 1 row affected (0.00 sec)
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
|  1 | kobe |
|  2 | wade |
|  3 | nash |
+----+------+
3 rows in set (0.00 sec)
#####备份第二天二进制日志为SQL格式并重命名为secondday.sql
#####注意生产环境中务必将二进制日志存储在不同于数据目录的设备中mysqlbinlog  /mydata/data/mysql-bin.000009 > /backup/secondday.sql

模拟故障

cd /mydata/data
#####删除数据目录中所有文件
rm -rf *
cd /usr/local/mysql
#####初始化数据库
scripts/mysql_install_db --user=myslq --datadir=/mydata/data/
#####杀死僵死进程
ps aux | grep mysql
kill  pid
service mysqld restart

数据还原

#####查看当前使用的二进制日志文件以及所处位置
show master status;
#####禁止还原过程中记录二进制日志
mysql> set sql_log_bin=0;
#####还原完全备份
mysql> source /backup/alldatabases.sql;
#####还原第一天备份
mysql> source /backup/firstday.sql;
#####还原第二天备份,全部数据完全到此结束
mysql> source /backup/secondday.sql;
#####开启二进制日志记录功能
mysql> set sql_log_bin=1;
#####测试数据是否还原成功
mysql> use soulboy;
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
|  1 | kobe |
|  2 | wade |
|  3 | nash |
+----+------+
3 rows in set (0.00 sec)


使用LVM逻辑卷快照备份

锁表并滚动日志

#####锁表
mysql> FLUSH TABLES WITH READ LOCK;
#####滚动二进制日志文件
mysql> FLUSH LOGS;
#####即时点恢复时候需要使用,记录LVM时刻二进制日志文件和所处位置
mysql -e 'SHOW MASTER STATUS\G' > /backup/master-`date +%F`.info

数据目录和事务文件创建LVM快照

#####对mydata目录进行快照
lvcreate -L 200M -s -p r -n mydata-snap /dev/myvg/mydata
#####以只读方式挂载镜像文件
mount /dev/myvg/mydata-snap /mnt -o ro
#####将镜像文件内容复制到/save目录中
mkdir /save
cp -a /mnt/data/* /save/
#####删除镜像文件
umount /mnt
lvremove --force /dev/myvg/mydata-snap
#####删除二进制日志文件
rm -rf /save/mysql-bin.*

解锁并插入数据

#####解锁
mysql> UNLOCK TABLES;
#####查看当前表内容
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
|  1 | kobe |
|  2 | wade |
|  3 | nash |
+----+------+
3 rows in set (0.00 sec)
#####插入新数据,模拟第一天
insert into tb1 (name) values ('firstday');
#####滚动二进制日志文件,模拟第二天
flush logs;
insert into tb1 (name) values ('sencondday');

查看快照时间和当前二进制日志信息

#####查看快照时刻的二进制日志记录信息
cat /backup/master-2013-09-19.info
*************************** 1. row ***************************File: mysql-bin.000005Position: 107Binlog_Do_DB:
Binlog_Ignore_DB:
#####查看使用当前二进制日志和所处位置
mysql> SHOW MASTER  STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      343 |              |                  |
+------------------+----------+--------------+------------------+

基于多个二进制日志生成单个SQL格式文件

#####查看快照时刻所处位置的时间点
[root@localhost save]# mysqlbinlog --start-position=107 /mydata/data/mysql-bin.000005
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#130919 11:46:29 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.28-log created 130919 11:46:29  #时间
#####基于时间做限定来合并多个日志文件为一个SQL格式的文件
mysqlbinlog --start-datetime='2013-09-19 11:46:29' /mydata/data/mysql-bin.000005  /mydata/data/mysql-bin.000006 > /backup/incremental-`date +%F`.sql

模拟故障

#####停止服务
service mysqld stop
#####删除数目目录下所有文件
rm -rf /mydata/data/*

还原快照时刻数据

#####复制快照时刻数据到数据目录
cp -a /save/*  /mydata/data/
#####启动服务
service mysqld start
#####查看当前表内数据
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
|  1 | kobe |
|  2 | wade |
|  3 | nash |
+----+------+

还原增量数据

#####关闭二进制日志记录功能
mysql> set sql_log_bin=0;
#####还原增量备份的数据
mysql> source /backup/incremental-2013-09-19.sql
#####开启二进制日志记录功能
mysql> set sql_log_bin=0;
#####查看表内数据,还原成功
mysql> select * from tb1;
+----+------------+
| id | name       |
+----+------------+
|  1 | kobe       |
|  2 | wade       |
|  3 | nash       |
|  4 | firstday   |
|  5 | sencondday |
+----+------------+
5 rows in set (0.00 sec)

转载于:https://blog.51cto.com/soulboy/1298999

Mysql之一:mysqldump和LVM逻辑卷快照相关推荐

  1. LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

    逻辑卷缩减 缩减的时候要注意缩减的空间不要超过文件系统的空间,不然缩减的时候会损坏文件系统. 第一步要先取消挂载(必须) 第二部检查文件完整性(必须) e2fsck -f /dev/vg0/lv0 第 ...

  2. linux删除配置信息,Linux LVM逻辑卷配置过程详解(创建、扩展、缩减、删除、卸载、快照创建)...

    一.预备知识 LVM全称为Logical Volume Manager逻辑卷管理器,LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘分 ...

  3. lvm 逻辑卷的快照及备份 还原

    为什么80%的码农都做不了架构师?>>>    1. LVM的快照概述 LVM机制还提供了对LV做快照的功能,以此来获得文件系统的状态一致性备份.LVM采用写时复制技术(Copy-O ...

  4. lvm 逻辑卷 和 网络管理

    lvm 逻辑卷 和 网络管理 逻辑卷管理器(LVM) LVM: Logical Volume Manager, Version: 2 dm: device mapper: 将一个或多个底层块设备组织成 ...

  5. linux虚拟磁盘管理pe大小6,Linux下磁盘的高级管理——LVM逻辑卷管理

    文章目录 逻辑卷是什么 逻辑卷的原理 逻辑卷的优点 lv的管理 lv的建立 xfs格式下lvm的拉伸 ext4下lvm的拉伸和缩减 lvm快照 lvm快照的原理和作用 快照的建立 lvm的删除 逻辑卷 ...

  6. Linux中LVM(逻辑卷管理)的使用

    Linux 中我们使用fdisk命令划分好的分区就不能随意的改变,如果不够用的话不可能说把硬盘上的所有数据拷贝后再重新分区,这样可能会导致数据损坏.而在linux中LVM(逻辑卷管理)就可以实现动态的 ...

  7. Linux就该这么学---第七章(LVM逻辑卷管理器)

    第七章节-LVM技术 逻辑卷管理器(LVM,Logical Volume Manager) 1.物理卷(PV,physical Volumn) 2.卷组(VG,Volume Group) 3.逻辑卷( ...

  8. ssm执行linux 指令,Linux逻辑卷快照及ssm的使用

    Linux逻辑卷快照及ssm的使用 理论部分: 逻辑卷管理(LVM)提供了为任何逻辑卷作一个快照的功能,目的是在一致的状态下来得到一个分区的备份.因为在备份过程中,应用程序可能访问一个分区的文件或者数 ...

  9. 文件系统,磁盘配额,数据存储,lvm 逻辑卷管理器

    文件系统 文件系统包括:ext2 ext3 (比ext2多一个日志)ext4                 iso9660(光盘文件系统)                 vfat  (相当于win ...

最新文章

  1. [分享]C# 获取Outlook帐号和密码
  2. 管理输入光标的 WIN32 API 函数
  3. Python之字符编码(Day10)
  4. 开发经理 VS 敏捷专家
  5. Spring IOC注入Map接口小技巧
  6. python之itemgetter函数:对字典列表进行多键排序
  7. RabbitMQ生产者代码
  8. 【Java】列表、集合、哈希表和可变参数
  9. 使用WSDL工具生成C#使用的WebService声明文件
  10. phpstudy 上怎么运行 thinkPHP ?
  11. Axure element 2.4.6元件库
  12. python解释器错误
  13. freeswitch 修改编码协商顺序 优先G729
  14. 批量爬取微信公众号下的音频
  15. linux磁盘检测和修复
  16. html字体样式(2)
  17. 如何听节拍器_七个方法可以拯救你的节奏感!
  18. java concurrent 探秘
  19. C#程序无法连接本地数据库
  20. java做mp3_用java编写MP3播放器

热门文章

  1. Python之web开发(三):python使用django框架搭建网站之SQLserver数据库连接
  2. 深度学习目标检测相关论文资源合辑
  3. 【AutoML】损失函数也可以进行自动搜索学习吗?
  4. 【NLP】 聊聊NLP中的attention机制
  5. 全球及中国磁性分离头滑轮行业发展潜力与投资策略分析报告2022版
  6. 0x0800 IP数据包格式分析
  7. 微信小程序实现web端锚点功能
  8. hashMap和hashTable的区别(个人总结)
  9. maven配置环境变量失败解决办法
  10. ip route-static 命令的参数