总结:MySQL备份与恢复的三种方法

发表于:2012-12-07 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:老广    来源:51Testing软件测试网采编

分享:

  恢复到备份状态,备份前先关闭对恢复过程的二进制日志记录,因为记录恢复语句是毫无意义的

  1. mysql> set global sql_log_bin=0
  2. mysql < /myback/2012-12-3.19-23.full.sql ##如果有账号密码记的-u -h哦 
  3. 打开记录并查看恢复状况 
  4. mysql> set global sql_log_bin=1
  5. mysql> show databases;

  打开二进制记录并查看恢复状况

  1. mysql> set global sql_log_bin=1
  2. mysql> show databases;

  2.3 模拟一种场景,我往linux表中新添加了数据,然后不小心将这个表删了,我们要恢复到删除之前的状态,并且新加的数据还存在。

  2.3.1 新增数据

  1. mysql> use laoguang; 
  2. mysql> insert into linux  (name) values ('haddop'), ('mysql'); 
  3. mysql> drop table linux; 
  4. mysql> show master status;   ##查看当前所在二进制日志中的位置 
  5. +------------------+----------+--------------+------------------+ 
  6. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  7. +------------------+----------+--------------+------------------+ 
  8. | mysql-bin.000001 |     9005 |              |                  |  
  9. +------------------+----------+--------------+------------------+

  我们先恢复完整数据,再恢复完整备份后到删除之前的数据,对应二进制日志就是完整备份后的二进制日志位置到删除表之前的位置

  2.3.2 先恢复完整备份,同样恢复过程不要记录日志

  1. mysql > set global sql_log_bin=0
  2. mysql < /myback/2012-12-3.19-23.full.sql

  2.3.3 查看删除表时的记录位置

  1. mysqlbinlog /mybinlog/mysql-bin.000001  
  2. # at 8893 
  3. #121202 14:14:07 server id 1  end_log_pos 9005  Query  thread_id=5 exec_time=0 error_code=0 
  4. SET TIMESTAMP=1354428847/*!*/; 
  5. DROP TABLE `linux` /* generated by server */ 
  6. /*!*/; 
  7. DELIMITER ; 
  8. # End of log file

  2.3.4 由上图可知删除是在8893时做的,将二进制文件中完整备份到删除表之前的记录导出

  1. mysqlbinlog --stop-position=8893 /mybinlog/mysql-bin.000001  > /tmp/change.sql 
  2. --start-position 指定从哪开始导出二进制日志 
  3. --stop-position 指定到哪结束 
  4. --start-datetime 从哪个时间开始格式如"2005-12-25 11:25:56" 
  5. --stop-datetime 到哪个时间结束

  由于这个二进制日志是我们完整恢复后才启用的,所以我们直接从头开始即可,如果你的二进制日志很多,请查看完整备份中记录的备份时的位置,从那开始到删除之前即可

  将这段二进制记录应用到mysql的库中

mysql < /tmp/change.sql

  进入数据库查看数据有没有恢复

mysql> select * from linux;

  基于mysqldump通常我们就是完整备份+二进制日志来进行恢复的。

  三、利用lvm的快照来备份MySQL

  要求你的MySQL的数据目录必须在lvm卷上,下面来演示过程

  3.1 建立lvm卷组,挂载到/data/mydata下,这个我就不演示了

  3.2 初始化MySQL时将数据目录指向/data/mydata,安装过程见上链接

  3.3 同样如第一步那样准备环境

  3.4 在MySQL中为所有表加读锁,不要关闭终端,否则锁将失效,滚动日志

  1. mysql> flush tables with read lock; 
  2. mysql> flush logs; 
  3. mysql> show master status; 
  4. +------------------+----------+--------------+------------------+ 
  5. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  6. +------------------+----------+--------------+------------------+ 
  7. | mysql-bin.000002 |      107 |              |                  |  
  8. +------------------+----------+--------------+------------------+

42/4<1234>
100家互联网大公司java笔试题汇总,填问卷领取~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号