基本意义:

将数据另存到其他设备,以便于出现问题时恢复数据
 

 
为什么要备份:
灾难恢复;需求改变;测试
 

 
几个事先需要考虑的问题:
可以容忍丢失多长时间的数据?恢复要在多长时间内完成?是否需要持续提供服务?需要恢复什么:整个数据库服务器、单个数据库、一个或多个表?
 

 
备份类型:
根据是否需要数据库离线,可以分为:
  冷备:cold backup
    关闭mysql服务,或读写请求均不允许;
  温备:warm backup
    备份的同时仅支持读请求;
  热备:hot backup
    备份的同时,业务不受影响,读写均支持;
 
根据要备份的数据范围,可以分为:
  完全备份:full backup,备份全部数据集;
  增量备份:incremental backup,上次完全备份或增量备份以来改变了的数据;
  差异备份:differential backup,上次完全备份以来改变了的数据;
组合备份:
  完全+增量(二进制)+二进制日志
  完全+差异(二进制)+二进制日志
 
根据备份数据或是文件,可以为分:
  物理备份:直接备份数据文件
 
      备份和恢复都比较简单;
      恢复速度快;
  逻辑备份:备份表中的数据和库代码;
         优点:
      恢复简单;
      备份的结果为ASCII文件,可以编辑;
      与存储引擎无关;
      可通过网络备份和恢复;
              缺点:
      备份或恢复都需要mysqld服务器进程参与;
      备份结果占据更多的空间;
      浮点数可能会丢失精度;
      还原之后,索引需要重建;
 
备份后,要测试备份文件是否可用: 找台备机,然后恢复,测试备份文件是否可行
恢复后,要测试数据库是否可行:mysql> CHECK TABLES
 

 
需要备份什么数据:
  数据库数据;
  数据库配置文件;
  代码:存储过程、存储函数、触发器等;(如mysqldump -E -R)E:event R:routines
  Linux系统相关的配置文件;
  二进制日志; 
 

 
备份工具:
mysqldump: 
  逻辑备份工具
  InnoDB热备、MyISAM温备
  备份和恢复较慢;
mydumper:
  多线程备份工具; 
lvm-snapshot:
  接近于热备的工具;
  物理备份;
  备份和恢复较快;
SELECT INTO OUTFILE   导出
LOAD DATA INFILE '' INTO TABLE tbname  导入
  逻辑备份工具
  快于mysqldump
ibbackup: 
xtrabackup:
  物理备份工具
  InnoDB热备、MyISAM温备
  速度快; 
mysqlhotcopy:
  几乎冷备
 

 
从备份中恢复需要的操作:
  停止MySQL服务;
  记录服务的配置和文件权限;
  复制备份文件至数据目录;
  按需调整配置;
  按需改变文件权限;
  尝试启动服务;
  装载逻辑备份;
  检查和重放二进制日志;
  确定数据还原正常完成;
  以完全权限重启服务器;
 

 
mysql备份工具之mysqldump的介绍-->
 
性质:MySQL客户端工具;
功能:备份整个服务器,单个或部分数据库,单个或部分表,表中某些行,存储过程,存储函数,触发器
能自动记录备份时的二进制日志文件及相应position;
 
-u #username
-h #hostname
-p #password
 
 --all-databases
#备份所有库
 
-B, --databases dbname dbname
#多数据库备份
 
--lock-all-tables
#锁表,不可写,备份后,会自动解锁
#此参数关联的信息-->
  mysql> FLUSH TABLES WITH READ LOCK;
  
  mysql> UNLOCK TABLES;
   
--master-data=2
#记录备份时的二进制日志名和二进制日志位置, 0不记录,2仅注释到备份文件(CHANGE MASTER TO MASTER_LOG_FILE和MASTER_LOG-POS)
#本文作用是为了方便差异和增量备份(实际都属于二进制日志备份),记录完全备份时二进制日志的位置及二进制日志的文件名
#此参数关联的信息-->
  mysql>SHOW MASTER STATUS;   //查看当前binlog位置
  #mysqlbinlog --start-position=xxx --stop-position=xxx binlog_name > file.sql  //生成二进制日志备份文件
                    
--single-transaction: 基于此选项能实现热备InnoDB表,不支持MyISAM;由此,不需要同时使用--lock-all-tables(既然热备,当然不需要锁表);

一次完整的备份/出错/恢复过程:
------------完全备份---------------------
InnoDB#mysqldump -uroot -pmypass --single-transaction --master-data=2 --all-databases > /backup/all_db_`date +%F`.sql     
MyISAM#mysqldump -uroot -pmypass --lock-all-tables --master-data=2 --all-datebases > /backup/all_db_`date +%F`.sql
完全备份文件file1生成;
------------数据库内容写入1--------------
******************************************
------------差异备份---------------------
#less file1.sql    #查看上次完全备份的sql文件,找到备份时刻的binlog位置,提供差异备份时所需的起始binlog位置xxx1
mysql> FLUSH TABLES WITH READ LOCK;    #锁表
mysql>SHOW MASTER STATUS;    #查看此刻binlog位置,提供差异备份时所需的末端binlog位置xxx2
#mysqlbinlog --start-position=xxx1 --stop-position=xxx2 binlog_name > file2.sql     #差异备份
mysql>UNLOCAK READ;
数据库内容1备份完毕;
差异备份文件file2生成;

------------数据库内容写入2--------------
******************************************
出错,丢失
------------丢失的数据2备份--------------
#mysqlbinlog --start-position=xxx2 binlog_name    #确定恢复到哪个位置,确定下xxx3
#mysqlbinlog --start-position=xxx2 --stop-position=xxx3 binlog_name > file3.sql 
------------数据库内容恢复--------------
mysql>SET sql_log_bin=0    #关闭二进制日志
mysql>source 
#mysql -uroot -p123456 < file1.sql    #完全备份恢复,恢复内容为0~xxx1
#mysql -uroot -p123456 < file2.sql    #增量备份恢复,恢复内容为xxx1~xxx2
#mysql -uroot -p123456 < file3.sql    #出错的日志恢复,恢复内容为xxx2~xxx3
mysql>SET sql_log_bin=1
mysql>FLUSH PRIVILEGES;
 
依据二进制日志的备份,也可以切割日志,从而直接复制日志文件,再将切割后的日志文件直接导出为sql
mysql>flush logs;    #滚动二进制日志
恢复后,开启mysql前,务必查看数据库文件权限
ll /mydata/data 文件权限是否正确

Mysql备份工具之LVM快照机制
 
特点: 几乎热备、物理备份
 
前提:
事务日志必须跟数据文件在同一个LV上;#对于innodb来说,就是tbname.frm和tbname.ibd,如果不在同一个lv上,则生成的两个快照可能时间不一致
备份前配置文件先加入参数sysc_binlog=1#即任何事务提交立即同步到二进制日志上,避免事物丢失
过程:
备份过程:
mysql> FLUSH TABLES WITH READ LOCK;  #读锁表,执行之后不能退出mysql,退出会解锁
mysql> FLUSH LOGS;  #滚动日志,方便之后的二进制日志备份,如此以来,不用记录二进制日志的位置,因为滚动之后,会生成新的二进制日志 或 mysql> SHOW MASTER STATUS;   #记录快照备份时的二进制日志,便于恢复完全备份后到真正崩溃之间的操作 
  
 
创建lv_snap-->切换一个新的终端来执行,不要退出终端
#lvcreate -L 100M -n mylvsnap -p r -s /dev/mapper/myvg-mylv   #为数据所在的卷创建快照(确认VG上是否有足够的空间)
#mount -t ext4  /dev/mapper/mylvsnap /mylvsnap
#cp /mylvsnap/*  /backup/all_data_`date +%F`/  #复制快照内的数据库文件到备份目录
mysql> UNLOCK TABLES;  #解锁
 
 
利用快照卷恢复的时候,innodb可能会有一个崩溃恢复的过程,因为快照的时候,很有可能会快照了事务提交但未同步和事务未提交的二进制日志信息(这些信息日志有,但是数据库没有对应数据),所以innodb会认为数据库曾经崩溃过

1、首先给/dev/vg01/mysql-data创建一个快照卷,通常不需要为快照卷分配和父卷一样的空间大小,一般分配父卷的10%即可。

lvcreate -s -L1G -n mysql-data-snapshot /dev/vg01/mysql-data

2、用dd命令拷贝快照设备里的文件到备份文件

dd if=/dev/vg01/mysql-data-snapshot of=/backup/mysql-data-backup.img

3、将备份文件上传到备份服务器上

建议将备份好的文件上传到远程的服务器上,以防止服务器发生意外故障而造成本地备份文件丢失。

4、快照卷现在已经不需要了,删除掉

lvremove /dev/vg01/mysql-data-snapshot

这样我们就创建好了备份。备份周期可以一天一次,写好备份脚本,每天凌晨3-5点左右进行自动备份(该时间段一般访问量最小)。

============================================

当MySQL出现问题或者其它情况我们需要恢复备份的时候,我们可以将备份好的文件恢复到LVM中去。

1、首先创建一个新LV卷

lvcreate -L10G -n mysql-data-new vg01

2、如果本地没有保存备份文件,则从备份服务器上下载最新的备份文件

3、利用/dev/loop设备挂载备份文件,通过losetup设置循环设备,循环设备可以将文件虚拟成块设备,并模拟文件系统

losetup /dev/loop0 mysql-data-backup.img

4、用dd命令拷贝loop0备份文件到新建的LV卷里

dd if=/dev/loop0 of=/dev/vg01/mysql-data-new

5、关闭mysql,必要的时候同时也要关闭webserver

/etc/init.d/mysql stop

6、重新mount,挂载lv卷到/home/mysqldata

umount /home/mysqldata
mount /dev/vg01/mysql-data-new /home/mysqldata

7、检查MySQL是否正常,如果一切正常,删除原来的硬盘文件,卸载loop设备

losetup -d /dev/loop0
lvremove /dev/vg01/mysql-data

mysql之6备份恢复的更多相关文章

  1. 基于MySQL MEB的备份恢复

    MEB(MySQL Enterprise Backup)是MySQL商业版中提供的备份工具,属于物理备份. 同XtraBackup一样,mysqlbackup的使用过程同样包含如下三个步骤: 备份(- ...

  2. 转 基于MySQL MEB的备份恢复

    几种备份方式的介绍 mysqlbackup是一个热备份工具.也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对 数据库进行读操作不能写,这也 ...

  3. MySQL实时在线备份恢复方案

    开源Linux 长按二维码加关注~ 上一篇:2020年MySQL数据库面试题总结 快照和复制技术的结合可以保证我们得到一个实时的在线MySQL备份解决方案. 当主库发生误操作时,只需要恢复备库上的快照 ...

  4. mysql日志与备份恢复

    一.mysql日志: mysql的日志种类有很多,常见的有二进制日志,一般查询日志,满查询日志,中继日志,事务日志等,具体信息可以通过 mysql> SHOW GLOBAL VARIABLES ...

  5. mysql之 mysqldump 备份恢复详解

    mysqldump是MySQL用于转存储数据库的客户端程序.转储包含创建表和/或装载表的SQL语句 ,用来实现轻量级的快速迁移或恢复数据库,是mysql数据库实现逻辑备份的一种方式. mysqldum ...

  6. mysql 命令行 备份 恢复数据

    找到mysql启动位置 whereis mysql 备份指定数据库 包括表结构和数据 使用命令mysqldump 数据库名 -u 用户名 -p > 存储文件路径 [root@izm5e16gjd ...

  7. 一文搞懂│mysql 中的备份恢复、分区分表、主从复制、读写分离

    目录 mysql 的备份和恢复 mysql 的分区分表 mysql 的主从复制读写分离 mysql 的备份和恢复 创建备份管理员 创建备份管理员,并授予管理员相应的权限 备份所需权限:select,r ...

  8. centos6.5 mysql安装+远程访问+备份恢复+基本操作+卸载

    参考博文: Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置 MySQL修改root密码的多种方法 MySQL的备份与还原 解决mysql导入还原时乱码的问题 ...

  9. MySQL另类的备份恢复方法——innodb可传输表空间

      Preface       There're many ways in backing up or migrating data from one server to another one.Lo ...

随机推荐

  1. CoreData (三)备

    NSFetchedResultsController 什么是NSFetchedResultsController NSFetchedResultsController是一个让人爱恨交加的一个类.如果使 ...

  2. Ext4.0.7使用Ext.grid.ColumnModel报错:TypeError: Ext.grid.Model is not a constructor

    代码如下: Ext.onReady(function(){ //定义列 var cm = new Ext.grid.ColumnModel([ {header: '编号', dataIndex: 'i ...

  3. 在C51中如何实现软复位?

    可以定义一个指向复位向量(0x0000)的函数指针,然后在C程序中需要软复位的地方调用该函数: ((void (code *) (void)) 0x0000) (); 例如,以下程序不断地复位: vo ...

  4. 无人参与安装IIS 6.0

    使用脚本安装 IIS 从“开始”菜单,单击“运行”. 在“打开”框中,键入 cmd,然后单击“确定”. 在命令提示符下,键入 Sysocmgr.exe /i:sysoc.inf /u:%path_to ...

  5. 统计useragent和页面情况

  6. unix c 01

    gcc编译器(代码的 预处理/汇编/编译/连接) C程序员一般写程序会定义 .c和.h两种文件 .c文件(源文件)中一般放代码的实现,.h文件(头文件)中放 各种声明和定义.   gcc -E __. ...

  7. java保留有效数字

    DecimalFormat df=DecimalFormat("######0.0") double d = df.format(xx): 保留一位就是"######0. ...

  8. (转)Eclipse 远程调试 WebSphere Application Server (WAS)

    目前我们项目中使用的应用服务器多是WebSphere,一直苦于无法进行调试,今天在网上看到一篇,原文是 http://www.cnblogs.com/newstar/archive/2010/04/1 ...

  9. python学习之路-9 socket网络编程

    socket基础 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. so ...

  10. 用CSS3实现对图片的放大效果

    用CSS3对图片放大效果 .right_div .topicons li a:hover img{     -webkit-transform:scale(1.5,1.5);     -moz-tra ...