标签:mysql备份与恢复
在MySQl中我们备份数据一般有几种方式
热备份 温备份 冷备份
热备份指的是当数据库进行备份时, 数据库的读写操作均不是受影响
温备份指的是当数据库进行备份时, 数据库的读操作可以执行, 但是不能执行写操作
冷备份指的是当数据库进行备份时, 数据库不能进行读写操作, 即数据库要下线
这里我们说个MYSQL数据库的备份与恢复的企业案例
条件:
1.具备全量备份(mysqldump)。
2.除全量备份以外,还有全量备份之后产生的的所有binlog增量日志。
首先创建环境
#创建个名为oldboy的数据库
CREATE DATABASE oldboy;
#切到oldboy库中
use `oldboy`;
#键表
CREATE TABLE `oldboy` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `oldboy` VALUES (1,‘oldboy‘),(2,‘oldgirl‘),(3,‘inca‘),(4,‘zuma‘),(5,‘kaka‘);
#查看下oldboy库中的表
mysql> select * from oldboy;
+----+---------+
| id | name |
+----+---------+
| 1 | oldboy |
| 2 | oldgirl |
| 3 | inca |
| 4 | zuma |
| 5 | kaka |
+----+---------+
5 rows in set (0.01 sec)
mysql> quit
#将时间改为晚上12点,准备个存放备份文件的目录
mkdir /data/backup -p
date -s "2017/06/22"
#备份库
mysqldump -uroot -poldboy123 -B --master-data=2 --single-transaction oldboy|gzip>/data/backup/oldboy_$(date +%F).sql.gz
#此时我们的binlog日志已经分割了
#增加两个表
mysql -uroot -poldboy123 -e "use oldboy;insert into oldboy values(6,‘bingbing‘);"
mysql -uroot -poldboy123 -e "use oldboy;insert into oldboy values(7,‘xiaoting‘);"
#查看下
mysql -uroot -poldboy123 -e "select * from oldboy.oldboy;"
+----+----------+
| id | name |
+----+----------+
| 1 | oldboy |
| 2 | oldgirl |
| 3 | inca |
| 4 | zuma |
| 5 | kaka |
| 6 | bingbing |
| 7 | xiaoting |
+----+----------+
#模拟误删数据库
date -s "2017/06/22 11:40"
mysql -uroot -poldboy123 -e "drop database oldboy;show databases;"
#出现问题10分钟后,发现问题,删除了数据库了.
#开始恢复准备
#采用iptables防火墙屏蔽所有应用程序的写入。
[root@oldboy ~]# iptables -I INPUT -p tcp --dport3306 ! -s 172.16.1.51 -j DROP #<==非172.16.1.51禁止访问数据库3306端口。
#拷贝binlog文件到刚才创建的目录中
cp -a /application/mysql/logs/oldboy-bin.* /data/backup/
cd /data/backup
#解压备份文件
zcat oldboy_2017-06-22.sql.gz>oldboy_2017-06-22.sql
#查看备份后执行的命令放在哪个binlog下
sed -n ‘22p‘ oldboy_2017-06-22.sql
-- CHANGE MASTER TO MASTER_LOG_FILE=‘oldboy-bin.000003‘,MASTER_LOG_POS=2623;
#讲binlog转换格式
mysqlbinlog -d oldboy --start-position=2623 oldboy-bin.000003-r bin.sql
#这里要对应上面查看的
#开始恢复
#开始恢复全备。恢复顺序很重要
[root@db02 backup]# mysql –uroot –poldboy123<oldboy_2017-06-22.sql
[root@db02 backup]# mysql -e "showdatabases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| oldboy |
| oldgirl |
| performance_schema |
+--------------------+
[root@db02 backup]# mysql -e "useoldboy;select * from oldboy;"
+----+---------+
| id | name |
+----+---------+
| 1 |oldboy |
| 2 |oldgirl |
| 3 |inca |
| 4 |zuma |
| 5 |kaka |
+----+---------+
#开始恢复增量
[root@db02 backup]# mysql oldboy <bin.sql
[root@db02 backup]# mysql -e "useoldboy;select * from oldboy;"
+----+----------+
| id | name |
+----+----------+
| 1 |oldboy |
| 2 |oldgirl |
| 3 |inca |
| 4 |zuma |
| 5 |kaka |
| 6 |bingbing |
| 7 |xiaoting |
+----+----------+
恢复完毕。
调整iptables允许用户访问.
本文出自 “12666239” 博客,转载请与作者联系!
标签:mysql备份与恢复
原文地址:http://12676239.blog.51cto.com/12666239/1941129