数据备份

1.物理备份与逻辑备份

物理备份

物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作。进行物理备份时,一般都需要关闭mysql服务器,或者对需要备份的对象进行锁定,要不很容易造成备份的不一致性,恢复时可能会丢失数据。物理备份的方式有很多,如操作系统命令copy(cp),scp,mysqlbackup,以及MyISAM表的mysqlhotcopy。

逻辑备份

逻辑备份是对数据库的逻辑结构(create database,create table),以及其所存储的数据(转换为insert into)进行备份。这种备份非常的灵活,但是对于大型系统来讲,逻辑备份进行恢复时性能较低。逻辑备份工具有mysqldump,select...into outfile等。

2.联机备份与脱机备份

联机备份又称热备份,即在mysql服务器运行时进行备份,脱机备份,即冷备份,在mysql服务器停止运行后进行备份。

热备份的优点是不会影响其他客户端访问mysql服务,仍可以正常读取数据。但是在进行热备份时需要发生避免数据的修改操作,以至于影响备份的一致性和完整性。

冷备份的有点是没有客户端的连接,直接进行备份即可。但为了降低对业务的影响,尽量在slave端进行备份。

3.完整备份和增量备份

完整备份是对整个数据库所有的数据进行的备份,而增量备份就是指定时间点后发送的修改,增量备份基于mysql binary log来实现。

4.MyISAM表的物理备份

方法一:先锁表在复制,示例

  1. mysql> flush tables stu with read lock;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. copy "D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.*" f:\backup
  5. D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.frm
  6. D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.MYD
  7. D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.MYI
  8. 已复制 3 个文件。
  9.  
  10. mysql> unlock tables;
  11. Query OK, 0 rows affected (0.00 sec)

方法二:使用mysqlhotcopy命令

Windows平台下使用mysqlhotcopy需要安装perl以及DBD-MYSQL,DBI模块,但是呢,mysqlhotcopy命令也是调用操作系统命令(cp,scp)来复制文件,因此在Windows平台下无法使用,故大家可以在Linux平台上实验。

  1. -----------------------DBD模块的安装--------------------
  2. C:\Users\Lenovo>ppm install DBD::mysql
  3. Downloading DBD-mysql-4.029...done
  4. Unpacking DBD-mysql-4.029...done
  5. Generating HTML for DBD-mysql-4.029...done
  6. Updating files in site area...done
  7. 11 files installed
  8. ----------------mysqlhotcopy命令使用------------------
  9. C:\Users\Lenovo>mysqlhotcopy.pl -u root -p 123456 test f:/backup
  10. Flushed 11 tables with read lock (`test`.`b`, `test`.`emp_date`, `test`.`t1`, `test`.`
  11. t2`, `test`.`t3`, `test`.`tb_1`, `test`.`tb_2`, `test`.`tb_3`, `test`.`tb_5`, `test`.`
  12. tb_6`, `test`.`users`) in 1 seconds.
  13. Locked 0 views () in 0 seconds.
  14. Copying 22 files...
  15. ------------------在Ubuntu上验证结果---------------------
  16. root@zhumuxian-machine:/# mysqlhotcopy -u root -p 123456 test /data/mysql/backup
  17. Warning: /usr/bin/mysqlhotcopy is deprecated and will be removed in a future version.
  18. Flushed 1 tables with read lock (`test`.`stu`) in 0 seconds.
  19. Locked 0 views () in 0 seconds.
  20. Copying 4 files...
  21. Copying indices for 0 files...
  22. Unlocked tables.
  23. mysqlhotcopy copied 1 tables (4 files) in 0 seconds (0 seconds overall).
  24. root@zhumuxian-machine:/# ls /data/mysql/backup/test

5.使用mysqldump进行逻辑备份

使用mysqldump工具创建的备份集有两种格式,一是标准的SQL语句,二是定界格式的文件。

备份单个数据库(可指定具体那个表,在数据库名后面加上表名即可)

  1. PS C:\Users\Lenovo> mysqldump -u root -p123456 --default-character-set gbk zz > f:\zz.sql

备份多个数据库

  1. PS F:\> mysqldump -u root -p7758520 --default-character-set gbk --databases zz,test > zztest.sql

备份所有的数据库(如果有不存在的数据库,则会报错)

  1. PS F:\> mysqldump -u root -p7758520 --default-character-set gbk --all-databases > db_all.sql

输出成定界格式文件

  1. PS F:\> mysqldump -u root -p123456 --default-character-set gbk --tab=f:\mysql_backup --fields-terminated-by ',' --lines-terminated-by '\r\n' zz stu
  2. ---------------如果指定的路径不存在,则会报错errorCode2-------------------------------------
  3. PS F:\mysql_backup> dir
  4.  
  5. Mode LastWriteTime Length Name
  6. ---- ------------- ------ ----
  7. -a--- 2015/4/21 9:18 1482 stu.sql
  8. -a--- 2015/4/21 9:18 108 stu.txt

6.恢复mysqldump命令创建的备份,使用MYSQL命令

SQL格式恢复

  1. F:\mysql_backup>mysql -u root -p123456 --default-character-set=utf8 zz < .\zz_stu.sql

定界格式恢复

由于这种备份的分为表对象的备份和其数据的备份,首先将表对象恢复,然后利用LOAD DATA INFILE语句导入表数据。

  1. mysql> drop table stu; --删除数据库
  2. Query OK, 0 rows affected (0.00 sec)
  3. ---------------------------------------------
  4. F:\mysql_backup>mysql -u root -p123456 --default-character-set=utf8 zz < .\stu.sql
  5. -------------------------------------------------
  6. mysql> show tables;
  7. +--------------+
  8. | Tables_in_zz |
  9. +--------------+
  10. | sql_users |
  11. | stu |
  12. | users |
  13. +--------------+
  14. 3 rows in set (0.00 sec)
  15.  
  16. mysql> select * from stu;
  17. Empty set (0.00 sec)
  18. ------------------------------------------------------
  19. mysql> load data infile 'f:/mysql_backup/stu.txt' into table stu character set gbk fields terminated by ',' lines termi
  20. nated by '\r\n';
  21. Query OK, 4 rows affected (0.00 sec)
  22. Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
  23.  
  24. mysql> select * from stu;
  25. +---------+--------+-------+------+--------+
  26. | sno | sname | class | age | gender |
  27. +---------+--------+-------+------+--------+
  28. | 4010404 | 祝小贤 | A1012 | 20 | 1 |
  29. | 4010405 | 肖小杰 | A1013 | 22 | 0 |
  30. | 4010406 | 钟小喜 | A1014 | 24 | 1 |
  31. | 4010407 | 钟小惠 | A1015 | 26 | 0 |
  32. +---------+--------+-------+------+--------+
  33. 4 rows in set (0.00 sec)

7.增量备份的创建

Mysql的增量备份主要借助于二进制日志,因此必须开启二进制日志功能,可以在配置文件中设置log-bin的参数或者在开启mysql服务时指定--log-bin参数的值开启该功能。所谓增量备份就是将冷备份之后生成的二进制日志备份到指定路径,在需要恢复时,先进行冷备份恢复,再对备份的二进制日志进行分析,然后拿到mysql命令中执行。

分析二进制日志并输出到SQL文件中

  1. root@zhumuxian-machine:/home/zhumuxian# mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 > /data/backup/000001.sql

利用mysql命令执行分析得到的SQL文件内容

  1. root@zhumuxian-machine:/data/backup# mysql -u root -p123456 < ./000001.sql

上面两条命令可以利用管道合并在一起写

  1. root@zhumuxian-machine:/home/zhumuxian# mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 | mysql -u root -p123456

如果执行mysqlbinlog命令时出现类似"unknown variable  default-character-set=utf8" 错误时,一般都是客户端识别不了配置文件的某个变量,解决方法如下:

方法一:在配置文件中,将该变量注释掉

方法二:执行mysqlbinlog命令时,加上--no-defaults选项

方法三:将变量改为loose-variable-name=xxx(我这里是loose-default-character-set=utf8)

由于mysql二进制日志采用ROW格式记录,使用base64编码,几乎看不懂,可以利用--base64-output选项参数来解决,该参数有三个内置值:none(不做ROW格式处理),decode-rows(解码处理,一般于-v组合使用),auto(默认,采用ROW格式),例示如下:

  1. -----------------------base64编码的信息---------------------------
  2. mOA1VQ8BAAAAdAAAAHgAAAAAAAQANS42LjI0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  3. AAAAAAAAAAAAAAAAAACY4DVVEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAUNe
  4. ----------------------使用decode-rows显示-------------------------
  5. root@zhumuxian-machine:/data/backup# mysqlbinlog --no-defaults --base64-output=decode-rows -v /data/mysql/mysql-bin.000001

8.第三方联机备份工具XtraBackup

XtraBackup是一个热备份工具,支持Innodb,MyISAM,CSV等引擎对象的备份,还是比较流行的。

XtraBackup的安装:

首先到Percona官网下载最新版的XtraBackup,我使用的是percona-xtrabackup_2.2.10-1.trusty_i386.deb,安装非常的简单,只需一条命令即可,如下所示。

  1. root@zhumuxian-machine:/# dpkg -i percona-xtrabackup_2.2.10-1.trusty_i386.deb

查看安装是否成功

  1. root@zhumuxian-machine:/usr/bin# ls xtra* inno*
    innobackupex innochecksum xtrabackup
  2. -----------------或者----------------------
  3. root@zhumuxian-machine:/usr/bin# xtrabackup --version
  4. xtrabackup version 2.2.10 based on MySQL server 5.6.22 Linux (i686) (revision id: )

XtraBackup工具提供了两个命令,xtrabackup与innobackupex。

xtrabackup有两种模式,backup(备份)与prepare(恢复),并且只能备份Innodb,xtradb引擎对象。

使用xtrabackup命令创建备份

  1. root@zhumuxian-machine:/data/mydata/backup# xtrabackup --defaults-file=/etc/mysql/my.cnf --backup --terget-dir=/data/mydata/backup

上面执行xtrabbackup命令使用了三个参数:

--defaults-files:指定mysql配置文件的路径,最重要的功能时获取datadir的值

--backup : 指定为备份

--target-dir:指定保存备份集的路径

查看备份集的路径

  1. root@zhumuxian-machine:/# ls /data/mydata/backup/
  2. ibdata1 test xtrabackup_checkpoints
  3. mysql xtrabackup_backupfiles xtrabackup_logfile

从上面的结果可以看出,xtrabackup只备份数据文件,不会备份表的结构文件(.frm),因此还需手动复制表结构文件。

innobackupex命令,支持多种引擎对象,该命令创建备份,需要连接数据库,可以创建一个用户专门用于备份,如下所示。

  1. mysql> create user innobk@'localhost' identified by '';
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> grant reload,lock tables,replication client,super on *.* to innobk@'localhost';
  5. Query OK, 0 rows affected (0.00 sec)

使用innobackupex命令创建完整备份,如下所示。

  1. root@zhumuxian-machine:/# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' /data/mydata/backup/

上面命令使用了四个参数:--defaults-file 指定配置文件路径 --user 用户名  --password 用户密码   [backup_dir] 指定备份集保存的路径

使用innobackupex创建增量备份

  1. root@zhumuxian-machine:/# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --incremental --incremental-basedir=/data/mydata/backup/2015-04-21_22-18-27 /data/mydata/incremental/

上面创建增量备份的命令中,新增了2个参数:--incremental  指定备份为增量备份  --incremental-basedir 指定增量备份基于的全量备份的路径。

其实只有Innodb引擎对象才能算是增量备份,因为只有该引擎对象才有LSN(日志序列号),增量备份又是基于LSN来实现的,其它的引擎对象增量备份都是完整备份。

使用innobackupex全量恢复

  1. ----------------------应用日志,使数据文件达到一致性----------------
  2. root@zhumuxian-machine:/data/mysql# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --apply-log /data/mydata/backup/2015-04-21_22-18-27/
  3. ------------------------执行恢复--------------------------------
  4. root@zhumuxian-machine:/data/mysql# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --copy-back /data/mydata/backup/2015-04-21_22-18-27/
  5.  
  6. --执行完毕后,查看权限是否正确

使用innobackupex增量恢复

  1. -------------------------应用日志------------------------
  2. root@zhumuxian-machine:/data/mysql# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --apply-log --redo-only /data/mydata/backup/2015-04-21_22-18-27/
  3. //有增量备份必须指定--redo-only参数,强制xtrabackup只进行redo而不进行回滚
  4. ------------------------应用增量备份----------------------
  5. root@zhumuxian-machine:/data/mysql# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --apply-log /data/mydata/backup/2015-04-21_22-18-27/ --incremental-dir=/data/mydata/incremental/2015-04-21_22-33-40/
  6. ----------------------------回滚-------------------------
  7. root@zhumuxian-machine:/data/mysql# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --apply-log /data/mydata/backup/2015-04-21_22-18-27/
  8. ----------------------------拷贝-------------------------
  9. root@zhumuxian-machine:/data/mysql# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --copy-back /data/mydata/backup/2015-04-21_22-18-27/

使用innobackupex打包和压缩备份集,可以使用--stream参数来指定流格式,只支持tar,xbstream。

  1. root@zhumuxian-machine:/tmp# innobackupex --defaults-file=/etc/mysql/my.cnf --user=innobk --password='123456' --stream=tar /tmp | gzip > /data/mydata/backup/bk.tar.gz
  2. //流格式输出数据会临时保存在/tmp目录下,然后利用管道保存在指定路径,解压时需要使用-i参数

MySQL学习笔记十二:数据备份与恢复的更多相关文章

  1. MySQL学习笔记(十二)__连接查询(一)

    连接查询含义:又称多表查询,当查询的字段来自多个表时,就会用到连接查询 笛卡尔乘积现象:表1 有 m 行,表2 有 n 行,结果 = m*n 行发生原因:没有有效的连接条件如何避免:添加有效的连接条件 ...

  2. Mysql学习笔记(二)数据类型 补充

    原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...

  3. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  4. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  5. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  6. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

  7. MySQL学习笔记十一:数据导入与导出

    数据导入 1.mysqlimport命令行导入数据 在使用mysqlimport命令导入数据时,数据来源文件名要和目标表一致,不想改文件名的话,可以复制一份创建临时文件,示例如下. 建立一个文本use ...

  8. MySQL学习笔记_4_MySQL创建数据表(下)

    MySQL创建数据表(下) 五.数据表类型及存储位置 1.MySQL与大多数数据库不同,MySQL有一个存储引擎概念.MySQL可以针对不同的存储需求选择不同的存储引擎. 2. showengines ...

  9. Python学习笔记(十二)—Python3中pip包管理工具的安装【转】

    本文转载自:https://blog.csdn.net/sinat_14849739/article/details/79101529 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...

随机推荐

  1. LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    同时安装了VS2012和VS2010,用VS2010 时 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 问题说明:当安装VS2012之后 ...

  2. java的基础知识文件操作和标识符

    1.文件夹的操作 dir :显示当前文件夹中的所有文件和文件夹. cd 路径:  进入到指定的路径. cd ..  : 回到上一级目录 cd  \ : 回到当前目录的跟目录 md 文件夹名  创建一个 ...

  3. CentOS 7 防止端口自动关闭

    tl;dr firewall-cmd --permanent --zone=public --add-port=2888/tcp firewall-cmd --reload #重新载入服务 永久配置f ...

  4. python中的参数问题

    python中的有默认参数和可变参数之分 默认参数arg 可变参数args, kargs 默认参数arg就是调用指定参数 可变参数*arg调用时传入的的参数会被python自动包装为列表 可变参数ka ...

  5. 微信第三方平台定时接收component_verify_ticket

    背景: 获取第三方平台令牌(component_access_token),增加了component_verify_ticket参数.component_verify_ticket由公众平台每隔10分 ...

  6. BOM

    一.window对象1.全局作用域全局变量不能通过delete操作删除,而直接在window对象上定义的属性可以 var a = 1; delete a; console.log(a); window ...

  7. Ionic实战 自动升级APP(Android版)

    Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...

  8. CentOS6.5安装Eclipse

    安装说明 1.安装环境: CentOS6.5 64位系统 2.安装方式:tar.gz安装 3.软 件 包:eclipse-jee-luna-SR1-linux-gtk-x86_64.tar.gz 4. ...

  9. JAVA第五次作业

    import javax.media.; import java.awt.; import java.awt.event.; class MediaPlayer extends Frame imple ...

  10. .Net客户端监听ZooKeeper节点数据变化

    一个很简单的例子,用途是监听zookeeper中某个节点数据的变化,具体请参见代码中的注释 using System; using System.Collections.Generic; using ...