用日志进行mysql数据库实时恢复[阮胜昌]

使用二进制日志进行数据恢复
二进制日志记录一台服务器上所有SQL执行事务
提取二进制工具:mysqlbinlog

开启二进制日志功能:
vim my.cnf
[mysqld]
log-bin=/var/log/mysql/bing.log
将二进制日志与备份进行同步
#mysqladmin -u root -pmypwd  flush-logs

简单的数据恢复(全部恢复)
1.停止mysql服务器
 用以下命令启动mysql服务器
 #mysqld --socket=/tmp/mysql_restore.sock --skip-networking 
      重新创建一个socket文件    阻止用户通过TCP/IP,socket文件或管道来访问服务器
   本服务器只能从本地进行连接
2.恢复备份好的dump文件
 #mysql -u root -p mypwd --socket=/tmp/mysql_restore.sock </var/backup/20122232.sql

3.恢复数据库事务处理,使用mysqlbinlog
 #mysqlbinlog /var/log/mysql/bin.123456 | mysql -u root -pmypwd  --socket=/tmp/mysql_restore.sock
手动恢复数据(部分恢复)
1.将二进制日志文件导出一个文本文件中
#mysqlbinlog /var/log/mysql/bin.123456  >/tmp/mysql_restore.sql
2.删除一些不要的SQL语句并保存
vim mysql_restore.sql
...
3.用修改后的mysql_restore.sql恢复文件
#mysql -u root -pmypwd --socket=/tmp/mysql_restore.sock </tmp/mysql-restore.sql


针对一个时间点恢复数据
mysql 5.1以上版本
在2010.1.20上午10点执行SQL删除了一个表,现在要恢复
#mysqlbinlog --stop-date="2012-01-20 9:59:59" /var/log/mysql/bin.123456 | mysql -u root -pmypwd --socket=/tmp/mysql_restore.sock
以上将恢复--stop-date日期之前的数据
如果在执行SQL语句数小时之后才发现执行了错误操作
#mysqlbinlog --start-date="2012-01-20 10:01:00" /var/log/mysql/bin.123456 | mysql -u root -pmypwd --socket=/tmp/mysql_restore.sock
SQL语句记录的10:01:00以后的内容将被恢复

使用position参数恢复
通过日志文件中的数据来标识恢复的开始位置和结束位置
1.获取一个时间段里执行的SQL语句
#mysqlbinlog --start-date="2010-01-20 9:55:00" --stop-date="2010-01-22 10:04:00" /var/log/mysql/bin.123456 >/tmp/mysql_restore.sql

2.删除这个时间段内不想执行的SQL语句,记下位置数据,位置标识是log_pos后面跟随一个数字eg:log_pos123456
#mysqlbinlog --stop-postion="1314314" /var/log/mysql/bin.123456 | mysql -u root -pmypwd --socket=/tmp/mysql_restore.sock

恢复停止位置前的所有事务
#mysqlbinlog --start-postion="345245" /var/log/mysql/bin.123456 | mysql -u root -pmypwd --socket=/tmp/mysql_restore.sock
恢复从开始位置到二进制日志结束的所有内容

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据库,mysql)