mysql 快照和binlog_利用快照卷和日志文件对mysql数据库备份和恢复

本文介绍了如何使用Linux快照卷和MySQL的binlog进行数据库的备份与恢复。首先对数据库施加读锁,记录binlog文件名和位置,创建快照,然后解锁并挂载快照进行数据复制。通过binlog信息恢复误操作前的状态,演示了从备份到恢复的完整流程。
摘要由CSDN通过智能技术生成

基于快照卷做备份和日志文件做恢复

1、首先对数据库施加读锁

2、记录二进制日志文件的文件名和事件位置

3、创建快照卷

4、解锁数据库

5、挂载快照卷,复制数据文件

6、删除快照卷

#登录mysql服务器

[root@station58 ~]#mysql

#对数据库施加读锁

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.02 sec)

#查看数据库的状态

mysql> show master status;

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

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000001 |      107 |              |                  |

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

1 row in set (0.02 sec)

#创建快照卷

[root@station58 ~]# lvcreate -L 150M -s -p r -n mybackup /dev/myvg/mydata      #-p 带权限 r 只读方式 -n 快照卷的名字

Rounding up size to full physical extent 152.00 MB

Logical volume "mybackup" created

#解锁数据库

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

#创建快照卷的挂载点并以只读方式挂载

[root@station58 ~]# mkdir /backup

[root@station58 ~]# mount -o ro /dev/myvg/mybackup /backup/

[root@station58 ~]# cd /backup

#压缩数据库的数据存放目录并查看压缩后的大小

[root@station58 backup]# tar jcf /root/data_back-`date +%F`.tar.bz2 data/

[root@station58 backup]#cd

[root@station58 ~]# ll -h

#解压打包的数据文件至/tmp下并查看是否和原来的文件一致

[root@station58 ~]# tar xf data_back-2012-02-04.tar.bz2 -C /tmp

[root@station58 ~]# cd /tmp

[root@station58 tmp]# ls

data            keyring-rzxDba  orbit-root

gconfd-root     mapping-root    ssh-lviWWn3623

keyring-QKdZbd  mysql.sock      virtual-root.THhkv1

#如果相同可以删除/tmp下的备份数据

[root@station58 data]# cd ..

[root@station58 tmp]# rm -rf data/

[root@station58 tmp]# cd

#卸载挂载点并强制删除逻辑卷

[root@station58 ~]# umount /backup

[root@station58 ~]# lvremove --force /dev/myvg/mybackup

Logical volume "mybackup" successfully removed

到此快照卷备份完成

但如果备份完成后我们对数据库做了误操作我们又如何恢复呢

实验前提:我们先创建个www数据库然后在删除,然后再恢复到有www数据库的时刻

#创建www数据库

mysql> create database www;

Query OK, 1 row affected (0.04 sec)

#查看数据库

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| test               |

| www                |

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

5 rows in set (0.03 sec)

#删除www数据库和退出数据库

mysql> drop database www;

Query OK, 0 rows affected (0.08 sec)

mysql> \q;

#查看创建www数据库时刻的日志文件的序号

[root@station58 data]# mysqlbinlog --start-position=107  mysql-bin.000001

#将从完全备份到创建www时刻的日志信息保存

[root@station58 data]# mysqlbinlog --start-position=107 --stop-position 188 mysql-bin.000001 >/root/a.sql

#备份完全备份后至此刻的日志文件

[root@station58 data]# cp mysql-bin.000001 /tmp

#删除数据目录里的所有文件

[root@station58 data]# cd /mydata

[root@station58 mydata]# rm -rf data

[root@station58 mydata]# cd

#解压备份的文件到/mydata并查看

[root@station58 ~]# tar vxf data_back-2012-02-04.tar.bz2 -C /mydata

[root@station58 ~]# cd /mydata/data

[root@station58 data]# ls

ibdata1      mysql             performance_schema         test

ib_logfile0  mysql-bin.000001  station58.example.com.err

ib_logfile1  mysql-bin.index   station58.example.com.pid

#重新启动mysql服务

[root@station58 data]# service mysqld start

Starting MySQL                                             [  OK  ]

#重新连接mysql数据库

[root@station58 data]# mysql

#查看数据库

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| test               |

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

4 rows in set (0.01 sec)

#把备份的日志文件信息重新执行一次

mysql> source /root/a.sql

Query OK, 0 rows affected (0.00 sec)

#查看数据库是否有www数据库

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| test               |

| www                |

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

5 rows in set (0.00 sec)

此时已经恢复到正常的状态下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值