binlog 基本认识 MySQL二进制日志可以说是MySQL最重要的日志记录了所有的日志DDL和DML(数据查询语句除外)语句以事件形式记录,它还包句子执行所消耗的时间,MySQL二进制日志是事务安全型的。 一般来说,打开二进制日志会有1%左右的性能损失(见MySQL官方中文手册 5.1.24版)。二进制有两个最重要的使用场景: 其一:MySQL Replication在Master端开启binlog,Mster将其二进制日志传递给slaves来达到master-slave数据一致的目的。二进制有两个最重要的使用场景: 其一:MySQL Replication在Master端开启binlog,Mster将其二进制日志传递给slaves来达到master-slave数据一致的目的。 第二通过使用自然恢复数据。mysqlbinlog恢复数据的工具。 二进制日志包括两种文件:二进制日志索引文件(文件名后缀为.index)用于记录所有二进制文件和二进制日志文件(文件名后缀为.00000*)记录所有数据库DDL和DML(数据查询语句除外)语句事件。 一、开启binlog日志: vi编辑打开mysql配置文件 # vi /usr/local/mysql/etc/my.cnf 在[mysqld]区块 设置/添加 log-bin=mysql-bin 确认为打开状态(值) mysql-bin 是日志的基本名或前缀名); 重启mysqld服务使配置生效 # pkill mysqld # /usr/local/mysql/bin/mysqld_safe --user=mysql &二、也可以登录mysql服务器,通过mysql检查二进制日志是否已打开变量配置表 单词:variable[?v?v?ri?b?l]变量 登录服务器 # /usr/local/mysql/bin/mysql -uroot -p123456 mysql> show variables like 'log_%'; ---------------------------------------- --------------------------------------- | Variable_name | Value | ---------------------------------------- --------------------------------------- | log_bin | ON | ------> ON表示已开启binlog日志 | log_bin_basename | /usr/local/mysql/data/mysql-bin | | log_bin_index | /usr/local/mysql/data/mysql-bin.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events 路由网 | OFF | | log_error | /usr/local/mysql/data/martin.err | | log_output | FILE | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_admin_statements | OFF | | log_slow_slave_statements | OFF | | log_throttle_queries_not_using_indexes | 0 | | log_warnings | 1 | ---------------------------------------- --------------------------------------- 三、常用binlog更多的日志操作命令linux内核视频教程核】免费获取内核视频教程文本资料。 1.查看所有binlog日志路由知识列表 mysql> show master logs; 2.查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一次操作事件pos结束点(Position)值 mysql> show master status; 3.刷新log日志从现在开始生成一个新的编号binlog日志文件 mysql> flush logs; 注:每当mysqld服务重启时,该命令将自动执行,刷新binlog日志;在mysqldump备份数据时添加 -F 选项也会刷新binlog日志; 4.所有重置(清空)binlog日志 mysql> reset master;四、检查某个binlog日志内容,常用的方法有两种: 1.使用mysqlbinlog自带查看命令法: 注: binlog是二进制文件,普通文件查看器cat more vi等都打不开,必须自带使用 mysqlbinlog 命令查看 binlog在同一目录中选择日志和数据库文件(我的环境配置安装是/usr/local/mysql/data中) 在MySQL5.使用以下版本mysqlbinlog如果在命令中报错,就加上 “--no-defaults”选项 # /usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000013 下面截取一个片段分析: ... # at 552 #131128 17:50:46 server id 1 end_log_pos 665 Query thread_id=11 exec_time=0 error_code=0 ---->执行时间:17:50:46;pos点:665 SET TIMESTAMP=1385632246/*!*/;路由知识 update zyyshop.stu set name='李四' where id=4 ---->执行的SQL /*!*/; # at 665 #131128 17:50:46 server id 1 end_log_pos 692 Xid = 1454 ---->执行时间:17:50:46;pos点:692 ... 注: server id 1 数据库主机的服务号; end_log_pos 665 pos点 thread_id=11 线程号 2.读取上述方法binlog日志全文内容较多,不易区分和查看pos点击信息,这里介绍一个更方便的查询命令: mysql> show binlog events[IN 'log_name'][FROM pos][LIMIT[offset,]row_count]; 选项解析: IN 'log_name' 指定要查询的binlog文件名(不指定是第一个binlog文件) FROM pos 指定从哪个pos起点开始检查(不指定是整个文件的第一个pos点开始算) LIMIT[offset,]偏移量(不指定为0) row_count 查询总数(不指定就是所有行) 截取部分查询结果: *************************** 20. row *************************** Log_name: mysql-bin.000021 ----------------------------------------------> 查询的binlog日志文件名 Pos: 11197 ----------------------------------------------------------> pos起始点: Event_type: Query ----------------------------------------------------------> 事件类型:Query Server_id: 1 --------------------------------------------------------------> 哪个服务器执行标志? End_log_pos: 11308 ----------------------------------------------------------> pos结束点:11308(即:下行pos起始点) Info: use `zyyshop`; INSERT INTO `team2` VALUES (0,345,'asdf8er5') ---> 执行的sql语句 ****************
**