为了保障数据的安全,需要定期对数据进行备份。备份的方式有很多种,效果也不一样。一旦数据库中的数据出现了错误,就需要使用备份好的数据进行还原恢复。从而将损失降到最低。下面我们来了解一下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>阅读更多内容
订阅:
博文评论 (Atom)
|
没有评论:
发表评论