快照方式备份mysql 数据库

关闭mysql服务

# service mysqld stop
 

一、创建逻辑卷

依照如下连接的文档创建一个逻辑卷
要求:物理卷20G;卷组名为vg0;逻辑卷2G,逻辑卷名为mydata
 
 
创建逻辑卷挂载点,并挂载之
# mkdir /mydata
# mount /dev/vgo/mydata /mydata
 

二、安装MySQL数据库

如果机器已装有mysql,则此步可省略
只需修改mysql的配置文件中的datadir的值改为/mysata
然后将原数据库的数据文件全部copy至/mydata文件下,即转移数据库所在位置
修改/mydata目录及其内容的属主属组
然后重启mydql服务 
 
如果需要重新安装,可依如下文档进行安装:
同样安装完成后,只需将mysql配置文件中的datadir的值改为/mydata
操作如下:
# sed -i 's/ ^datadir.*$/datadir=\/mydata/g' /etc/my.cnf
# service mysqld restart
 
修改/mydata目录及其内容的属主属组
# chown -R mysql:mysql /mydata/*
# chown mydql:mysql /mydql
 
 
启动mysql服务
# service mysqld start
 

三、创建快照

锁定所有表先
# mydql
  >FLUSH TABLES WITH READ LOCK;
  >\q
  
创建快照
# pvvreat -L 20M -s -n mysnap /dev/vgo/mydata
注:此命令详细解释可参照如下文档:
http://www.178-go.com/archives/40
 
解锁表
# mysql
  >UNLOCK TABLES;
  >\q
 
 创建快照挂载点,并挂载之 
# mkdir /mysnap
# mount /dev/vgo/mysnap
 
# ls
发现此时/mysnap目录下的文件和/mydata下的文件一模一样
 
此时,在原卷上做任何修改都不会影响/mysnap中的文件
 

四、测试

对数据库进行一些修改
# mysql
  >CREATE DATABASE mydb;
  >USE mydb;
  >CREATE TABLE sanptest (
  >name char(30),
  >id   int);
  >\q
  
现在从快照目录下复制mydb文件到其它目录下,进行物理备份
注:生产应用中应该备份整个数据库
# cd /mysanp
# cp -rp mydb  /tmp/
 
卸载快照卷
# umount /mysnap
# lvremove /dev/vgo/mysnap
 
下面对数据库进行一些删除操作
# mydql
  >FLUSH LOGS;
  >DROP DATABASE mydb;
  >\q
  
此时,/mydata目录下已没有mydb文件
 
现在将刚才物理备份的的mydb文件复制回来
# copy -rp /tmp/mydb /mydata
# service mysqld restart
 
查看数据库
# mysql
  >SHOW DATABASES;
  发现和做修改之前的的数据库一模一样,没有刚创建的mydb库
  也就是说快照备份只保存做快照那一时刻的数据信息
  
此时,若想找回快照之后失去的数据,刚需要用的二进制日志
查看二进制日志
# mysql
  >SHOW BINLOG EVENTS IN'mysql-bin.0000X';
  这里X表示数据,数字不同,日志内容也不一样,数字越大越接近现在
  这些日志全放在/mydata文件下
  显示大致如下:
 

  如我们想从二进制日志文件mysql-bin.0000013中恢复一个insert操作,就可以用如下命令:
# mysqlbinlog --start-position 106 --end-position 220 mysql-bin.0000013 > /tmp/a.mysql
# mysql -uroot -p < /tmp/a.sql
 
显示结果如下:
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章