Mysql binlog日志及binlog恢复数据库操作

初识MySQL 日志binlog
MySQL重要log,二进制日志文件,记录所有DDL和DML语句(除select),事件形式记录,包含语句所执行的消耗时间,事务安全型。
DDL(数据库定义语言),主要命令有create、alter、drop等。DDL主要定义或改变表table的结构、数据类型。建表时使用。
MDL(数据操纵语言),主要命令有select、update、insert、delete。

mysqlbinlog常见选项:
--start-datetime:从二进制中读取指定时间戳。
--stop-datetime:从二进制中读取指定时间戳。
--start-position:从二进制中读取指定position事件位置。
--stop-position:从二进制中读取指定position事件位置。

binlog日志使用场景:
1)MySQL主从复制:MySQL在replication在Master端开启binlog,master将二进制文件传递给slaves来达到master-slave数据一致。
2)数据恢复:通过mysqlbinlog工具恢复数据
binlog日志包括两类文件:
1)二进制日志索引文件(文件后缀名.index)用于记录所有二进制文件
2)二进制日志文件(文件后缀名.00000)记录数据库所有DDL和DML(select除)语句事件

开启binlog日志和基本操作

开启binlog:
/etc/my.cnf文件
log-bin=mysql-bin

mysql命令操作:

查看日志开启
mysql>show variables like ‘log_%‘;

查看所有binlog列表
mysql>show master logs;

查看master状态,最后一个binlog日志的编号名称,及最后一个操作事件pos结束点(position)值。
mysql>show master status;

刷新log日志,开始产生一新的编号的binlog日志文件
mysql>flush logs;
注:mysqld服务重启时,也会执行此命令,刷新binlog日志。

重置(清空)所有binlog
mysql>reset master;

MySQL binlog日志内容查看
binlog日志为二进制文件,cat、vim等工具无法打开,使用自带的mysqlbinlog命令查看

binlog内容分析:

# at 28226679
#181116 0:20:01 server id 776499703 end_log_pos 28226710 CRC32 0xb12373d2 Xid = 54012151
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= ‘AUTOMATIC‘ /* added by mysqlbinlog */ /*!*/;
# at 28226710
#181116 0:20:35 server id 3095565156 end_log_pos 28226757 CRC32 0x05f2d78a Rotate to mysql-bin.001121 pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

server id :数据库主机服务号
end_log_pos:数据库SQL结束时pos节点

binlog日志查看命令:
mysql> show binlog events in ‘mysql-bin.001120’\G;

binlog 从pos点100开始查,查询10条
mysql> show binlog events in ‘mysql-bin.001120’ from 100 limit 10\G;

利用binlog日志恢复数据库
1)恢复就近的完整备份库
mysql -uusername -p -v db_test -h 192.168.1.100 < ./db_test .sql

2)通过binlog找到要恢复的--stop-position点 和 --stop-position
binlog:mysql-bin.001118 、mysql-bin.001119 、mysql-bin.001120

mysqlbinlog -v --base64-output=DECODE-ROWS  /data/binlog/mysql-bin.001118 | head -10
mysqlbinlog -v --base64-output=DECODE-ROWS /data/binlog/mysql-bin.001120 | grep -C 30 -i "22:05:01"

3)binlog恢复
/bin/mysqlbinlog --start-position=120 --stop-position=2174941 /data/binlog/mysql-bin.001118 /data/binlog/mysql-bin.001119 /data/binlog/mysql-bin.001120 |/bin/mysql -uusername -p -v db_test -h 192.168.1.100
--start-position是备份后记录下的pos点, --stop-position是误操前的pos点,如果批多个binlog文件,那么start-position是第一个binlog文件的pos点,stop-position是最后一个binlog的pos点

总结:所谓恢复,就是用mysql保存的binlog日志中指定的区间段的sql语句进行重新执行一次。

原文地址:https://blog.51cto.com/10874766/2355594

时间: 2024-10-17 15:28:41

Mysql binlog日志及binlog恢复数据库操作的相关文章

Mysql bin-log日志配置与恢复数据

1:在使用日志之前先确认日志是否已经开启了,登录mysql客户端,mysql -uroot -p123456(如果是源码安装且没有把mysql bin的路径加入到环境变量中,可以输入 /usr/local/mysql/bin/mysql -uroot -p123456 或 在家目录配置.bash_profile文件把/usr/local/mysql/bin一次性加到环境变量中),输入:shou variables like "%bin%",查看log_bin 的值是不是ON. 2:配置

MySQL 系列(二) 你不知道的数据库操作

本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网远程连接法 查看\创建\使用\删除\清空\修改 数据库表(是否可空,默认值,主键,自增,外键) 表内容的增删改查 where条件.通配符_%.限制limit.排序desc\asc.连表join.组合union 查看建表语句.查看表结构.查看是否走索引 数据类型 索引! 一.数据库操作 1.查看数据库 SHOW DATABASES; # 默认数据库: mysql - 用户权限相关数据 test - 用于用户测试数据 inform

mysql 使用 Forcing InnoDB Recovery 恢复数据库

环境: CentOS release 6.6 (Final) Server version: 5.5.42-37.1-log Percona Server (GPL), Release 37.1, Revision 39acee0 现象: 数据库挂掉,重启报错 The server quit without updating PID file (/var/lib/mysql/cm.data.dingkai.com.pid).[失败] 日志: 150721 12:38:37  InnoDB: Da

使用MySQL命令行备份及恢复数据库

使用MySQL命令行,可以实现对数据库的备份以及恢复,下面就为您介绍使用MySQL命令行实现该功能的详细方法步骤,供您参考. MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server 4.1\bin(或者直接将windows的环境变量path中添加该目录) 2,导出数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名 如我输入的命令

Linux下Mysql的表名大小写敏感引起数据库操作失败

今天处理了一个奇怪的问题,现象如下: 1.  Linux下安装了Mysql,导入数据库表,一切正常: 2.  Spring+Myibatis连接数据库正常: 3.  当执行数据库查询的时候,抛出如下异常: org.springframework.jdbc.BadSqlGrammarException: ### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Ta

学习MYSQL过程中自己写的数据库操作

2119731621 查看所有数据库 show databases; 进入数据库 use 数据库名字: 创建数据库 create database 数据库名字 [charset/character set 字符集] 根据数据库设置中文编码 set names 大写的中文编码; //如set names UTF8; 查看数据库的创建语句 show create database 数据库名字 查看所有表 show tables; 查看一张表的所有内容 select * from 表名; 修改数据库的

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一.初步了解binlogMySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. DDL-

mysql开启binlog日志和慢查询日志

1)首先,为什么要开启binlog日志和慢查询日志呢? binlog日志会记录下数据库的所以增删改操作,当不小心删除.清空数据,或数据库系统出错,这时候就可以使用binlog日志来还原数据库,简单来说就是一个记录备份的东西 慢查询日志 slow_query_log,这个东西是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,然后就可以进行数据库或sql语句或程序上的优化,简单来说就是一个优化辅助工具 PS:binlog日志应该一直开着(因为你不知道数据库哪一天会崩掉,或者哪

MySQL用户授权 和 bin-log日志 详解和实战(http://www.cnblogs.com/it-cen/p/5234345.html)

看 了上一篇博文的发布时间,到目前已经有三个月没更新博文了.这三个月经历了很多事情,包括工作.生活和感情等等.由于个人发展的原因,这个月准备换工作 啦.在这段时间,我会把Web大型项目中所接触到的技术都总结出来,分享给各位支持我的博友.博客园是个好地方,在这里能学到很多东西,同时你也可以收获 很多东西,就比如我本人,去年被两个比较大型的在线培训机构邀请当讲师(只接受了一家,当然由于太忙所以课程录制也不是特别多),另有一企业聘请我写一本 技术相关的书籍(我拒了,没时间写)等等,这些都是我在博客园里