您的位置:首页 > 数据库 > MySQL

mysql 数据备份和数据恢复

2017-11-12 21:27 351 查看
备份相关术语:

全量备份:备份所有的数据

差异备份:仅备份自上一次完全备份以来变量的那部数据。例如周日1点进行全量备份,当下周一对数据做差异备份时候只备份周日到周一这段时间的变化数据,周二差异备份会备份周日到周二期间所有变化数据,周三差异备份会备份周日到周三期间所有变化数据如图:



增量备份:是对上上一次备份以后变话的数据的进行备份,例如例如周日1点进行全量备份,当下周一对数据做增量备份时候只备份周日到周一这段时间的变化数据,周二差异备份会备份周一到周二期间所有变化数据,周三差异备份会备份周二到周期间的变化数据。

热备:是数据库正常运行情况下,读写操作均可进行的状态下所做的备份;不能只依靠简单的拷贝命令,而是需要专门的备份工具,技术复杂度比较高,mysql的 myisam 引擎不支持热备,innodb 存储引擎支持热备。

温备:可读但不可写状态下进行的备份;

冷备:读写操作均不可进行的状态下所做的备份,可靠性最高,过程也是最简单的。

物理备份 是直接备份数据库对应的数据文件,物理备份相对逻辑备份来说性能更强。

逻辑备份 是直接将数据从数据库中导出,并且将导出的数据进行存档备份

实际工作中一般是全量加增量的备份方式,具体的时间间隔按照公司业务来定。

备份内容:

数据

二进制日志、InnoDB的事务日志;

代码(存储过程、存储函数、触发器、事件调度器)

服务器的配置文件

备份工具:

一:mysqldump

mysqldump能够实现完全备份或部分备份。

使用innodb表类型的表能够使用mysqldump进行热备。

使用myisam表类型的表只能够使用mysqldump进行温备。

如果数据量较小,使用mysqldump是一种选择。

mysqldump的优点:

可以直接使用文本处理工具处理对应的备份数据,因为备份数据已经被 mysqldump转换为了对应的insert语句,所以,我们可以借助文件系统中的文本处理工具对备份数据进行直接处理。

mysqldump的缺点:

1.无法备份索引等信息(因为它只是单纯的将需要备份的数据查询出来,还原后需要重建索引)

2. 当数据为浮点类型时,会出现精度丢失

3. mysqldump的备份过程属于逻辑备份,备份速度、恢复速度与物理备份工具相比较慢,而且mysqldump备份的过程是串行化的,不会并行的进行备份,如果想要并行备份,可以使用mydumper,但是此处我们不考虑这些,只考虑mysqldump,当数据量较大时,一般不会使用mysqldump进行备份,因为效率较低。

mysqldump的用法

逻辑备份工具:基于mysql客户端协议

1. mysqldump [OPTIONS] database [tables] # 备份单库,可以只备份其中的一部分表(部分备份);

2. mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…] # 备份多库;

3. mysqldump [OPTIONS] –all-databases [OPTIONS] # 备份所有库;

常用选项:

-x, –lock-all-tables:锁定所有库的所有表,读锁;

-l, –lock-tables:锁定指定库所有表;

–single-transaction:创建一个事务,基于此快照执行备份,相当于开启一个大的事物,在REPEATABLE-READ的事物隔离级别下,别人修改了提交了你也看不到,此刻备份时可以保证各事物的时间点一致,不然备份的过程中别人可能在修改数据,就会造成各事物的修改时间不是在同一时间,使备份不可用;

-R, –routines:备份指定库的存储过程和存储函数;

–triggers:备份指定库的触发器;

-E, –events:备份事件调度器

–master-data[=#]:指明备份时二进制日志文件的名字和所处的位置,备份之后的数据就可以从二进制日志文件的此处位置进行重放

1:记录为CHANGE MASTER TO语句,此语句不被注释;

2:记录为CHANGE MASTER TO语句,此语句被注释;

–flush-logs:备份的同时进行滚动二进制日志;

示例:

在开启二进制日志的情况下,备份指定的students数据库,通常使用如下语句。

mysqldump -uroot -pcentos -h192.168.10.33 –single-transaction -R –triggers -E –master-data=2 –flush-logs –databases students > /app/students.sql

备份全库:把–databases students 换成 –all-databases 即可。

备份后恢复数据:

如果不需要时间点还原数据 只需要

mysql -uroot -pcentos
即可,但是通常要做时间点还原。

客户端查看二进制日志文件的事件

[root@centos7 logs]#mysqlbinlog bin-log.000001

[root@centos7 logs]#mysqlbinlog -j 313 –stop-position 437 bin-log.000002 —查看二进制文件从哪个位置开始从哪个位置结束

[root@centos7 logs]#mysqlbinlog –start-datetime=”2017-11-11 20:04:14” bin-log.000001 —查看二进制文件从哪个时间开始

运行时开启和关闭二进制日志

时间点还原需要通过二进制文件来实现,命令如下:

[root@centos7 mysql]#mysqlbinlog mysql-bin.000001 > inc.sql

再通过mysql < inc.sql 命令导入。

如果有管理员误删除数据库里面的东西,只需要找到数据库里面的二进制文件,删除二进制文件里面对应的行,再把二进制文件通过上面的方法导入到数据库既可。

xtrabackup 备份

由Percona提供,是开源的免费的。

xtrabackup支持对Innodb存储引擎进行热备,是一种物理备份工具.

xtrabackup支持完全备份,差异备份,增量备份,部分备份等功能。

通过官网 https://www.percona.com/ 下载对应软件包到本地。

[root@centos7 app]#yum install percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm192.168.10.33 192.168.10.33[root@centos7 app]#innobackupex –user=root –password=centos –host=192.168.10.33 /app/backups —将整个数据库备份到/app/backups目录下,也可以用–databases 指明只备份某个数据库

增量备份:

[root@centos7 backups]#innobackupex –user=root –password=centos –host=172.18.21.107 –incremental /app/backups/ –incremental-basedir=/app/backups/2017-11-11_16-30 恢复时候步骤 [root@centos7 2017-11-11_16-29-15]#innobackupex –apply-log –redo-only ./ —将全量备份中未完成的事物进行redo

[root@centos7 2017-11-11_16-29-15]#innobackupex –apply-log –redo-only ./ –incremental-dir=/app/backups/2017-11-11_16-32**重点内容** —将第一个增量备份合并到全量上,并将增量备份中未完成的事物进行redo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql