mysql的备份和还原

用处:

1、灾难恢复

2、审计

3、测试

备份类型:
    热备份、温备份、冷备份
        热备份:在线备份,读写操作可继续进行,不受影响,只有基于事务的存储引擎才能完成
        温备份:能读不能写
        冷备份:读写均不能进行,离线备份
    物理备份、逻辑备份
        物理备份:复制数据文件
        逻辑备份:把数据从库中提出出来保存为文本文件,无法保证浮点型的精度,和存储引擎无关,跨平台好,mysqldump
    完全备份、增量备份、差异备份
        完全备份:全部备份
        增量备份:仅备份上次完全备份或增量备份以后变化的数据
        差异备份:仅备份上次完全备份以来变化的数据
还原:需要测试
备份对象:
    数据
    配置文件
    代码:存储过程,存储函数,触发器
    OS相关的配置文件,如crontab配置计划及相关的脚本
    跟复制相关的配置信息
    二进制日志文件

热备份:
    myisam:几乎不可能,可以用逻辑卷来备份,最好温备份
    innodb:可以,xtrabackup,mysqldump

物理备份还是逻辑备份:
    物理备份:速度快,和文件系统无关
    逻辑备份:速度慢,丢失浮点数精度,方便使用文本处理工具直接对其处理,可移植性强跨mysql服务器版本

备份策略:
    完全+增量
    完全+差异

备份工具:
    mysqldump:逻辑备份,myisam(温备份),innodb(热备份),备份和恢复过程较慢,适于备份10G以下的数据,因为速度太慢。mysqldumper:多线程的mysqldump。很难实现差异或增量备份。
    mysqlhotcopy:物理备份,温备份工具,仅适用于MyIsam引擎
lvm-snapshot:接近于热备的工具,因为要先请求全局锁,而后创建快照,并在创建快照之后释放全局锁,使用cp,tar等工具进行物理备份,备份恢复速度快。很难实现增量备份,并且请求全局锁需要等待一段时间,在繁忙的服务器上尤其如此
    innodb:不能立即创建快照
备份备份工具:select clause into outfile ‘/path/to/somefile’
恢复:load data infile ‘/path/from/somefile’
    不会备份关系定义,仅备份表中的数据
    也是逻辑备份工具,速度上快于mysqldump
    没法实现增量
第三组工具:
    innodb:ibbackup商业工具
    xtrabackup:开源工具

备份策略:

1、mysqldump

2、lvm+二进制日志

3、xtrabackup


mysqldump用法:

mysqldump [options] [db_name[tbl_name ...]]

-u:指定用户名

-h:指定主机

--all-databases:备份所有数据库

--databases:备份指定的多个库tb1tb2 >/tmp/a.sql,这种会自动创建库

恢复时需先有数据库,没有则需创建

注意:备份前要加锁

--lock-all-tables:请求锁定所有表之后再备份,对myisaminnodbaria做温备

--single-tranaction:单事务,能够对innodb存储引擎实现热备,会自动加锁,与—lock-all-tables不能同时使用

备份代码:

--events:备份事件、调度器、代码

--routines:备份存储过程和存储函数

--triggers:备份触发器

备份时滚动日志:

--flush-logs:备份前、加锁后,滚动日志

复制时的同步位置标记:

--master-data={0|1|2}0:不记录,1:记录为changemaster语句2、记录为注释change master语句的

使用mysqldump备份:

请求锁:--lock-all-tables—single-tranaction进行innodb热备

滚动日志:--flush-logs

选择要备份的库:--databases

记录二进制日志文件及位置:--master-data=

 

恢复:恢复过程没有必要记录到二进制日志中,所以临时关闭二进制日志,关闭其他用户连接source

备份策略:基于mysqldump

备份:mysqldump+二进制日志文件;

周日做一次完全备份:备份的同时滚动日志

周一至周六:备份二进制日志;

恢复:

完全备份+各二进制日志文件中至此刻的事件

MySQL配置文件,以及与MySQL相关的OS配置文件在每次修改后都应该直接进行备份;

例1:备份和恢复单个库:

备份hellodb数据库

wKiom1W0QQfxTF6yAAB4TC3b1rI870.jpg

查看

wKioL1W0QvHQ8oOGAABIAaMqTS8014.jpg

删除mysql中的数据库

wKioL1W0Q5ii9i-TAABlhTSLEX4021.jpg

导入备份

wKiom1W0QbizyWMLAABw0bytBoE175.jpg

说明导入之前数据库必须存在才行

创建数据库

wKioL1W0RCfzczWwAABgyI5T6_0301.jpg

导入备份

wKioL1W0RFrBoMZrAAA4ubuglko537.jpg

查看表

Mysql/Mariadb备份_第1张图片

例2:备份所有库:

--all-databases

wKioL1W0RdGz3NU-AACHwJPoUWc141.jpg

如果mysql数据库被删除,恢复时自动创建数据库

例3:备份多个库:

--databases db1 db2

wKiom1W0RGLRRC7IAABW2P-k6ZA905.jpg

wKioL1W0RkvTHz9bAAA50UGGdic473.jpg

如果mysql数据库被删除,恢复时自动创建数据库

例4:备份前应事先加锁

--lock-all-tables建议使用

--lock-tables,会导致表时间不一致,不建议使用

wKioL1W0SPuCX1GtAACUEHEraes389.jpg

例5:

创建ha数据库

wKioL1W0h6ThNHB5AABgHYBG45s733.jpg

使用数据库ha,插入数据

Mysql/Mariadb备份_第2张图片

查看表

Mysql/Mariadb备份_第3张图片

查看表中数据

Mysql/Mariadb备份_第4张图片

备份

wKiom1W0hdqjO1EYAADFbwCIFSM946.jpg

查看二进制日志位置

Mysql/Mariadb备份_第5张图片

新增内容

Mysql/Mariadb备份_第6张图片

查看新增数据

Mysql/Mariadb备份_第7张图片

删除数据库

wKioL1W0h96BAunuAABazjCXUSI893.jpg

备份新增数据的二进制日志文件

wKiom1W0hfTziUbdAACc-AKwPg0254.jpg

恢复前先临时关闭二进制日志功能(当前会话)

wKiom1W0hfWiSV1HAABjJvt0erY055.jpg

导入完全备份

wKioL1W0h-CSMOw1AAA3QIdZV3U764.jpg

查看数据库

Mysql/Mariadb备份_第8张图片

使用ha数据库,并查看表

Mysql/Mariadb备份_第9张图片

导入增量备份

wKioL1W0h-GQyxlxAAA21KKrzfI916.jpg

查看表

Mysql/Mariadb备份_第10张图片

查看新增的数据

Mysql/Mariadb备份_第11张图片

还原二进制日志功能

wKioL1W0h-PhV7leAABfgwptKTA759.jpg

查看二进制日志位置

Mysql/Mariadb备份_第12张图片

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

1、事务日志和数据文件必须在同一个卷上

2、创建快照卷之前,要请求全局锁,在快照创建完成之后释放锁

3、请求全局锁完成后做日志滚动;做二进制日志文件及位置标记(手动进行)

备份步骤:

1、请求全局锁,并滚动日志

mysql> FLUSH TABLES WITH READLOCK;

mysql> FLUSH LOGS;

2、做二进制日志文件及位置标记(手动进行)

# mysql -e 'show master status'> /path/to/somefile

3、创建快照卷

# lvcreate -L   -s -n   -p r  /path/to/some_lv

4、释放全局锁

mysql> UNLOCK TABLES;

5、挂载快照卷并备份

# cp

6、备份完成之后,删除快照卷

恢复:

1、二进制日志保存好;

提取备份之后的所有事件至某sql脚本中;

2、还原数据,修改权限及属主属组等,并启动mysql

3、做即时点还原



使用Xtrabackup进行MySQL备份:

1、简介

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

安装:

[root@school ~]# yum -y install percona-toolkit-2.2.4-1.noarch.rpm percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm

innobackupex:

完全备份:

[root@school data]# mkdir /mybackups   #准备备份目录

临时改变二进制日志功能,导入数据库

wKioL1W0nZPTD4MAAACZxmPP0FY762.jpg

查看数据库

Mysql/Mariadb备份_第13张图片

开启二进制功能

wKiom1W0m6vAJLoCAABgsHHGCb4375.jpg

查看表的属性

Mysql/Mariadb备份_第14张图片

备份

wKioL1W0pAeTuiogAABTI95bWUc892.jpg

停止mysql服务

wKioL1W0pXGDZ_Y7AABbSTDgfM8415.jpg

删除mysql所有数据库

wKiom1W0o9TgRee-AABQBK2kvAI265.jpg

准备阶段

wKiom1W0pEXiCbbWAAB8nWvYtj4672.jpg

复制备份回mysql数据目录

wKioL1W0peXB_PlOAABzB1pSf-Q536.jpg

进入mysql数据目录

wKioL1W0pmjD7PeEAAA5Qo8S1Yg997.jpg

更改属主属组并启动服务

Mysql/Mariadb备份_第15张图片

查看数据库

Mysql/Mariadb备份_第16张图片

增量备份

每一次恢复后都要立即做一次完全备份

wKioL1W0qg6zp7S-AABTLdEK-IY920.jpg

查看备份文件

wKiom1W0qCWBonTXAACMOQDMPkE740.jpg

新增数据

Mysql/Mariadb备份_第17张图片

增量备份

wKiom1W0qCfxkQEwAACC2czMTvA107.jpg

查看备份

wKioL1W0qrXg9Dn7AAFCIIsDYeQ780.jpg

Mysql/Mariadb备份_第18张图片

Mysql/Mariadb备份_第19张图片

再新增数据

Mysql/Mariadb备份_第20张图片

增量备份

wKiom1W0qcjy7cVWAAC7pTSrs_8050.jpg

查看备份信息

Mysql/Mariadb备份_第21张图片

最后二进制日志的位置

wKioL1W0rBHjNu7JAAB3i0xF1_k655.jpg

新增数据

wKioL1W0rJeBJPQ8AACoc506gSU502.jpg

删除数据库

wKiom1W0qunD0MTGAABS7ijKA7k081.jpg

恢复完全备份

wKioL1W0rsSw3vEjAACBT0F77Tw020.jpg恢复第一次增量

wKiom1W0rPSzF6lzAADGnkJIPlI847.jpg

恢复第二次增量

wKioL1W0rxHAF09SAADBwY_i6h8006.jpg

查看完全备份的及时点,和最后一次的增量及时点一样

Mysql/Mariadb备份_第22张图片

二进制点也和最后一次增量一样

wKioL1W0r77irYPMAAB28dOzyeA074.jpg

wKiom1W0rkmAjoMnAAB78sIB7eQ344.jpg

更改属主属组

Mysql/Mariadb备份_第23张图片

保存二进制日志

wKiom1W0r8TC65PDAACYp5zVb_I778.jpg

启动服务器

wKioL1W0sjWBvYwwAABUMOF3yPA593.jpg

关闭二进制功能,导入数据

wKioL1W0sjajPRLMAACUe7Ge_FE036.jpg

开启二进制功能

wKiom1W0sE2RHQm1AABaZgFeKtI513.jpg

查看数据

Mysql/Mariadb备份_第24张图片