2013年9月9日星期一

“你是怎么利用时间的?”之二

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
"你是怎么利用时间的?"之二  阅读原文»

"你是怎么利用时间的?"之二

Mysql备份与恢复  阅读原文»

Mysql备份与恢复

为了保障数据的安全,需要定期对数据进行备份。备份的方式有很多种,效果也不一样。一旦数据库中的数据出现了错误,就需要使用备份好的数据进行还原恢复。从而将损失降到最低。下面我们来了解一下MySQL常见的有三种备份恢复方式:

1、利用Mysqldump+二进制日志实现备份

2、利用LVM快照+二进制日志实现备份

3、使用Xtrabackup备份

一:实验环境介绍:

系统介绍:CentOS6.4_X64

数据库版本:mysql-5.5.33

二:基于Mysqldump命令实现备份恢复

2.1、思路概念

Mysqldump是一个逻辑备份命令;意思就是将数据库中的数据备份成一个文本文件;也可以说是将表的结构和数据存储在文本文件中。

Mysqldump命令的工作原理很简单,它先查出需要备份的表的结构,再在文本文件中生成一个CREATE语句。然后,将表中的所有记录转换为一条INSTERT语句。这些CREATE语句和INSTERT语句都是还原时使用的。还原数据时就可以使用其中的CREATE语句来创建表。使用其中的INSERT语句来还原数据。它可以实现整个服务器备份,也可以实现单个或部分数据库、单个或部分表、表中的某些行、存储过程、存储函数、触发器的备份;并且能自动记录备份时刻的二进制日志文件及相应的位置。对于InnoDB存储引擎来讲支持基于单事务模式实现热备,对于MyISAM则最多支持温备。

2.2、备份策略

Mysqldump全备+二进制日志增备

2.3、过程实现

(1)Mysqldump全备

由于Mysql数据库默认的为MyISAM存储引擎所以只有使用温备(备份同时仅支持读请求)进行,所以我们要为所有数据库添加读锁

[root@stu18 ~]#mysqldump -uroot -pmypass --lock-all-tables --master-data=2 --events --routines--all-databases > /zhao/database_`date +%F`.sql

解析:--lock-all-tables表示为所有表施加读锁;--master-data=2表示在备份文件中记录当前二进制日志的位置;--events表示备份数据的同时备份时间调度器代码;--routines表示备份数据的同时备份存储过程和存储函数;--all-databases表示备份所有库。

[root@stu18 zhao]# less database_2013-08-13.sql
-- #表示注释项
-- Position to start replication or point-in-time recovery from
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14203; #这里表示当前处于mysql-bin.000001这个二进制日志中,事件为14203这是通过--master-data=2产生的
-- Current Database: `hellodb`
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */;

(2)二进制全备

方法一: 导出二进制日志文件内容

[root@stu18 data]# mysqlbinlog mysql-bin.000001 >/zhao/binlog_`date +%F`.sql

方法二:滚动日志复制文件

mysql> flush logs; #滚动日志
[root@stu18 data]# cp mysql-bin.000001 /zhao/mysql-bin.000001 #复制导出二进制文件

(3)二进制增备

首先添加数据信息

mysql> use hellodb;
mysql> INSERT INTO students(Name,Age,Gender,ClassID,TeacherID) values ('Yang kang',22,'M',3,3);

然后二进制增备

[root@stu18 data]# mysqlbinlog --start-position=14203 --stop-position=14527 mysql-bin.000001 > /zhao/binlog_`date +%F_%H`.sql

解析:--start-position=14203是上次全备之后的二进制事件位置;--stop-position=14527最近一天的二进制事件位置。

2.4、模拟数据库损坏,实现恢复工作

mysql> DROP DATABASE hellodb; #删除数据库
############下面这些过程要在离线状态下执行############
mysql> SET sql_log_bin=0; #先关闭二进制日志
mysql> flush logs; #滚动日志
[root@stu18 ~]# mysql -uroot -pmypass < /zhao/database_2013-08-13.sql #导入数据库备份文件
[root@stu18 ~]# mysql -uroot -pmypass < /zhao/binlog_2013-08-13_19.sql #导入增量备份文件
[root@stu18 ~]# mysql -uroot pmypass #登录查看,恢复完成
mysql> SET sql_log_bin=1; #开启?p>阅读更多内容

没有评论:

发表评论