欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

Mysql binlog日志功能使用简单易懂

终极管理员 知识笔记 53阅读
一、简单了解">">">">">log

MySQL的二进制日志">">">">">log可以说是MySQL最重要的日志它记录了所有的DDL和DML语句除了数据查询语句select。因此">">">">">log日志文件我们用cat等查看文件的命令是打不开的但是mysql提供了专门看">">">">">log文件的命令mysql">">">">">log。

">">">">">log日志有两个最重要的使用场景

a、mysql主从复制mysql replication在master端开启">">">">">log,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。

b、数据恢复通过mysql">">">">">log工具来恢复数据。

">">">">">log日志包括两类文件

 1)、二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件。

 2)、二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。

二、开启mysql支持">">">">">log

我们只需在mysql配置文件my.cnf中添加以下配置

#">">">">">loglog-">">">">">mysql-">">">">">server-id1">">">">">log-formatMIXED
三、简单命令操作 查看是否开启">">">">">log
mysql> show variables like log_%;---------------------------------------------------------------------| Variable_name                          | Value                       |---------------------------------------------------------------------| log_">">">">">                                | ON                          || log_">">">">">_basename                       | /data/mysql/mysql-">">">">">       || log_">">">">">_index                          | /data/mysql/mysql-">">">">">.index || log_">">">">">_trust_function_creators        | OFF                         || log_">">">">">_use_v1_row_events              | OFF                         || log_builtin_as_identified_by_password  | OFF                         || log_error                              | /data/mysql/mysql.err       || log_error_verbosity                    | 3                           || log_output                             | FILE                        || log_queries_not_using_indexes          | OFF                         || log_slave_updates                      | OFF                         || log_slow_admin_statements              | OFF                         || log_slow_slave_statements              | OFF                         || log_statements_unsafe_for_">">">">">log       | ON                          || log_syslog                             | OFF                         || log_syslog_facility                    | daemon                      || log_syslog_include_pid                 | ON                          || log_syslog_tag                         |                             || log_throttle_queries_not_using_indexes | 0                           || log_timestamps                         | UTC                         || log_warnings                           | 2                           |---------------------------------------------------------------------21 rows in set (0.00 sec)

lon_">">">">">对应的value值为on意为开启

查看所有的">">">">">log文件文件地址默认存储在数据文件路径
mysql> show master logs;-----------------------------| Log_name         | File_size |-----------------------------| mysql-">">">">">.000001 |       154 |-----------------------------1 row in set (0.00 sec)
查看master状态即最后最新一个">">">">">log日志的编号名称及其最后一个操作事件pos结束点(Position)值。
mysql> show master status;-------------------------------------------------------------------------------| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |-------------------------------------------------------------------------------| mysql-">">">">">.000001 |      793 |              |                  |                   |-------------------------------------------------------------------------------1 row in set (0.00 sec)
flush 刷新log日志自此刻开始产生一个新编号的">">">">">log日志文件;
mysql> flush logs;Query OK, 0 rows affected (0.01 sec)mysql> show master logs;-----------------------------| Log_name         | File_size |-----------------------------| mysql-">">">">">.000001 |       840 || mysql-">">">">">.000002 |       154 |-----------------------------2 rows in set (0.00 sec)
重置清空所有">">">">">log日志
mysql> reset master;Query OK, 0 rows affected (0.01 sec)mysql> show master logs;-----------------------------| Log_name         | File_size |-----------------------------| mysql-">">">">">.000001 |       154 |-----------------------------1 row in set (0.00 sec)
四、查看">">">">">log日志文件内容

第一种使用自带的mysql">">">">">log命令

./mysql">">">">">log /data/mysql/mysql-">">">">">.000001 # 下面截取一部分日志内容/*!*/;# at 316#231007 14:43:04 server id 1  end_log_pos 474 CRC32 0xff3b1884     Query    thread_id10    exec_time0    error_code0use qinglvjizhang/*!*/;SET TIMESTAMP1696660984/*!*/;INSERT INTO testdb.test(id, name) VALUES (2, 111)/*!*/;# at 474#231007 14:43:04 server id 1  end_log_pos 505 CRC32 0x122dcfc5     Xid  66COMMIT/*!*/;SET SESSION.GTID_NEXT AUTOMATIC /* added by mysql">">">">">log */ /*!*/;DELIMITER ;# End of log file/*!50003 SET COMPLETION_TYPEOLD_COMPLETION_TYPE*/;/*!50530 SET SESSION.PSEUDO_SLAVE_MODE0*/;

通过">">">">">log恢复数据原理通过日志文件我们可以看到这里面记录我们操作数据库时的sql语句当我们误操作删除某条数据便可以通过该记录找出删除的数据并通过对应sql进行重新插入这样数据就恢复了。但是实际生产中文件内容非常多而且出现事故往往不会是一条两条的数据这时在用自带的命令去看就非常麻烦因此还有第二种查看日志的方法。

第二种使用命令mysql> show ">">">">">log events [IN log_name] [FROM pos] [LIMIT [offset,] row_count];

参数解释

a、IN log_name:指定要查询的">">">">">log文件名不指定就是第一个">">">">">log文件

b、FROM pos:指定从哪个pos起始点开始查起不指定就是从整个文件首个pos点开始算

c、LIMIT【offset】偏移量(不指定就是0)

d、row_count :查询总条数不指定就是所有行

通过这种方式我们在大量数据中可以一步一步确定发生问题数据的部分从而进行数据恢复。万变不离其宗掌握恢复数据的思路具体问题具体分析

标签:
声明:无特别说明,转载请标明本文来源!