小编给大家分享一下MySQL如何实现备份与恢复,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
实验环境:RHEL5.8 ,SElinux关闭,MySQL是tar包初始化安装版本5.5.28
一.测试环境准备
1.1 mysql的安装就不说了,见 http://www.linuxidc.com/Linux/2012-04/58990.htm
1.2 编缉/etc/my.cnf把二进制日志存放目录改到其它非数据目录,innodb每表一文件
建立一目录用于存放二进制日志
mkdir /mybinlog
chown mysql:mysql /mybinlog
修改my.cnf
vim /etc/my.cnf
log-bin=/mybinlog/mysql-bin ##二进制日志目录及文件名前缀
innodb_file_per_table = 1 ##启用InnoDB表每表一文件,默认所有库使用一个表空间
启动mysqld
service mysqld start
1.3 创建一个测试库与测试表
mysql> create database laoguang;
mysql> use laoguang;
mysql> create table linux (id tinyint auto_increment primary key,name char(10));
mysql> insert into linux (name) values ('apache'),('nginx'),('php');
1.4 创建用于存放备份的目录
mkdir /myback
chown -R mysql:mysql /myback
二,用mysqldump实现备份
2.1 mysqldump用来温备,所以我们得为所有库加读锁,并且滚动一下二进制日志,并记录当前二进制文件位置
mysqldump --all-databases --lock-all-tables --routines --triggers --master-data=2 \
--flush-logs > /myback/2012-12-3.19-23.full.sql
--all-tables 备份所有库
--lock-all-tables 为所有表加读锁
--routinge 存储过程与函数
--triggers 触发器
--master-data=2 在备份文件中记录当前二进制日志的位置,并且为注释的,1是不注释掉在主从复制中才有意义
--flush-logs 日志滚动一次
查看有没有备份成功,有没有启用新二进制的日志,查看备份的文件中有没有记录完整备份后二进制的位置
备份二进制日志
cp /mybinlog/mysql-bin.000001 /myback/2012-12-3.19-23.full.00001
2.2 模拟数据库意外损坏,测试完整恢复
rm -rf /data/mydata;
DROP TABLE `linux`
;
DELIMITER ;
# End of log file
2.3.4 由上图可知删除是在8893时做的,将二进制文件中完整备份到删除表之前的记录导出
mysqlbinlog --stop-position=8893 /mybinlog/mysql-bin.000001 > /tmp/change.sql
--start-position 指定从哪开始导出二进制日志
--stop-position 指定到哪结束
--start-datetime 从哪个时间开始格式如"2005-12-25 11:25:56"
--stop-datetime 到哪个时间结束
由于这个二进制日志是我们完整恢复后才启用的,所以我们直接从头开始即可,如果你的二进制日志很多,请查看完整备份中记录的备份时的位置,从那开始到删除之前即可
将这段二进制记录应用到mysql的库中
mysql < /tmp/change.sql
进入数据库查看数据有没有恢复
mysql> select * from linux;
看完了这篇文章,相信你对“MySQL如何实现备份与恢复”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!