MySQL管理之数据备份及恢复


MySQL管理之备份及恢复

想必各位都清楚,数据的重要性了,这里还得要再简单介绍一些备份的重要性:

备份是确保可用性的一种手段但不能确保万无一失,那么对数据可用性比较高的场景,则必须需要备份

 

备份是如何进行的以及备份考虑事项

备份无非是将数据集另存为一个副本集,一般来讲,通常公司的备份和恢复前后不能超过半个或一个小时,需要非常高的恢复效率

备份数据的意义:

·灾难恢复

·需求改变

·测试

 

为了能够让备份正常进行又不影响线上业务,我们需要选择备份手段、备份类型、备份介质等等,考虑到不会特别影响线上业务通常都在业务量最小的时候进行的,如果是跨国性的业务的话则是另一码事儿了。所以各种因素都要考虑周全,因此备份都是自动进行的而且通常依赖于脚本方式。

但无论怎么去备份都需要事先考虑以下几个问题:

1、容忍地丢失多长时间的数据

如果能容忍几天的数据,那么备份恢复则特别容易

2.恢复必须要在多长时间完成

不同的备份手段执行的备份效率是不一样的,简单的备份工具执行速度可能慢反则复杂的备份工具可能效率要高的多,所以必须选择适合当时环境适用的备份工具

3.是否需要持续提供服务

 

4.需要恢复什么

整个数据库库服务器或单个库或一个或多个表,或某条语句

#以上几点事先一定要做调研不然可能无法满足恢复的需求

 

常用的MySQL备份工具

mysqldump 逻辑备份工具

经典的备份工具,对innodb表来讲支持热备;而对MyISAM表最多支持温备(可读但不可写),备份和恢复的速度都比较慢;

 

mysqldumper mysqldump的完善版本,也是逻辑备份工具

支持并行备份,对速度有提高,对输出有了简便的机制

 

lvm-snapshot lvm快照,基于快照备份,在创建快照的那一刻起,必须锁表,但速度非常快,只要能够请求到施加读锁则可以瞬间完成,接近于热备工具

备份的数据在时间上是一致的,属于物理备份

由于要施加全局读锁,所以读锁请求时间对于一个非常忙的在线事物处理系统来讲可能需要非常长的时间,但无论如何速度还是比较快的

 

select内置备份工具:可以将数据使用select intooutfile挑选出来之后保存至某个文件中,之后还可以使用load data命令来实现对其加载

语法如下

select into outfile '/path/to/xx.sql' #通过select 还可以跟where子句过滤出需要的结果并对其进行备份

load data infile '/path/to/xx.sql'

这种备份方式不支持sql语句,备份恢复时候必须使用load data

其性能快于mysqldump 并支持备份某个条件的数据,同时备份出的文件比较小

 

ibbackup、xtrabackup:

·遵循gpl协定

·物理备份工具

·支持真正意义上的innodb热备,不像于mysqldump

·对Myisam只支持温备

·速度很快

 

mysqlhotcopy: 几乎冷备工具

·速度很慢

·不好用

 

从备份中恢复需要的操作步骤

(1)停止mysql服务(冷备和快照的恢复必须停止

(2)记录服务的配置和文件权限

(3)复制备份文件至数据目录

(4)按需调整配置

(5)按需改变文件权限

(6)尝试启动服务,但是要限制访问权限

 

对于二进制文件的恢复步骤

(1)装载逻辑备份

(2)检查或重放二进制日志

(3)检测数据还原正常完成

(4)而后对以完全权限重启服务

事实上不同的备份方式的加载过程只是上面的一部分而非是全部过程

 

mysqldump备份工具的使用

如果我们想备份一张表的数据到数据文件中,可以使用mysqldump、mysqldumper 等

显示年纪大于30的用户

mysql> select *from students where age>30;

+-------+------+------+---------+

| name | id | Age | class |

+-------+------+------+---------+

| bob | 1| 40 | 1 class |

| jerry | 3 | 33 | 2 class |

+-------+------+------+---------+

2 rows in set (0.00sec)

使用select命令将其备份出来

目录的路径必须是当前运行mysql服务的用户有访问权限,所以目前来说除了data目录就只有tmp了

mysql> select *from students where age > 30 into outfile'/tmp/students.sql';

查看配置文件,如下所示,我们已将年纪大于30的用户的信息导出出来了

[root@test ~]# cat/tmp/students.sql

bob 1 40 1 class

jerry 3 33 2 class

但是内容是纯文本信息,所以不能直接使用mysql导入进去,必须使用load data in file的方式来实现

删除表中年纪大于30的用户信息并对其进行恢复

mysql> deletefrom students where age>30;

Query OK, 2 rowsaffected (0.07 sec)

 

mysql> select *from students where age > 30;

Empty set (0.00sec)明确说明将文件恢复到students表中去

mysql> load data infile '/tmp/students.sql' into tablestudents;

Query OK, 2 rowsaffected (0.11 sec)

Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

 

使用mysqldump备份mysql数据库

mysqldump特性:

·是mysql最经典最传统的备份工具之一

·可以备份整个服务器

·可以备份单个数据库或部分数据库

·可以备份单个或部分表

·可以备份表中的某些行

·可以备份存储函数、触发器

·能自动记录备份时的二进制的文件名和位置

·对于innodb能够基于单事物型的热备份

 

mysql参数说明:

  • 1
  • 2
  • 3
  • 下一页

相关内容

    暂无相关文章