MYSQL基础:binlog使用基础: 1:开启binlog与常用命令介绍
Binlog是binary log的缩写,这种以二进制文件形式存放的log,记录了mysql的数据变更,所有的DDL和DML语句都会以时间的形式予以记录,同时语句执行的消耗时间等也会被记录。它也是在数据丢失的时候,往往第一时间想到的部分。当你不小心drop database的时候,如果你有日别的定时备份和binlog,使用binlog恢复增量数据部分,往往问题并不会很大。
使用场景
主要的使用场景有如下两种:
MYSQL主从复制
Master端打开binlog,需要进行主从复制时通过binlog文件的传递来实现
数据恢复
使用mysqlbinlog工具来进行数据的恢复,本文将使用简单示例进行说明。
binlog的三种模式
binlog主要有如下三种模式:
- Row:行模式。记录每条数据详细变更内容和所有字段,日志会比较大。
- Statement:语句模式。记录的只是执行语句,减少了日志量。
- Mixed:混合模式。一般的修改使用statement格式,当statement无法完成主从复制时,则采用Row模式。
确认binlog
使用如下命令可以确认binlog状态,可以看到当前状态为OFF
mysql> show variables like 'log_bin%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+-------+ 5 rows in set (0.00 sec) mysql>
开启binlog
此官方mysql镜像,设定文件可以直接修改/etc/mysql/mysql.conf.d/mysqld.cnf。
# echo "log_bin=ON" >>/etc/mysql/mysql.conf.d/mysqld.cnf #
但是请注意,在mysql 5.7及其以上版本的话,如果开启binlog,做上述设定时,必须同时设定server-id,此server-id在MYSQL集群中需要指定不重复的信息,单机版本的MYSQL可以随意指定,但是如果没有指定,则可能会由于出现如下错误,导致mysql无法启动
[ERROR] You have enabled the binary log, but you haven't provided the mandatory server-id. Please refer to the proper server start-up parameters documentation
比如这里指定信息如下所示
server-id=1001
重启mysql的容器即可开启binlog,在此确认binlog状态如下所示,可以看到log_bin_basename和log_bin_index也同时被设定。
mysql> show variables like 'log_bin%'; +---------------------------------+-------------------------+ | Variable_name | Value | +---------------------------------+-------------------------+ | log_bin | ON | | log_bin_basename | /var/lib/mysql/ON | | log_bin_index | /var/lib/mysql/ON.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | +---------------------------------+-------------------------+ 5 rows in set (0.00 sec) mysql>
binlog的两类文件
可以通过show master logs来查询binlog的日志信息
mysql> show master logs; +-----------+-----------+ | Log_name | File_size | +-----------+-----------+ | ON.000001 | 154 | +-----------+-----------+ 1 row in set (0.00 sec) mysql>
可以看到当前日志名称为ON.000001,此文件在/var/lib/mysql下,详细信息如下
# pwd /var/lib/mysql # ls ON.* ON.000001 ON.index #
这里可以看到有两类文件:
- 文件后缀为.index的文件:二进制日志索引文件
- 文件猴嘴为.00000*的文件:二进制日志文件,记录所有的DDL和DML语句事件。
查看master状态
使用show master status可以查看master状态:
mysql> show master status; +-----------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------+----------+--------------+------------------+-------------------+ | ON.000001 | 154 | | | | +-----------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql>
此命令会显示最新的binlog日志的编号名称(File)以及Postion(最后一个操作事件的结束值)
刷新日志
使用flush logs可以进行日志的刷新,此时会产生一个新的编号的日志文件
mysql> flush logs; Query OK, 0 rows affected (0.02 sec) mysql>
结果信息确认如下
mysql> show master logs; +-----------+-----------+ | Log_name | File_size | +-----------+-----------+ | ON.000001 | 194 | | ON.000002 | 154 | +-----------+-----------+ 2 rows in set (0.00 sec) mysql> show master status; +-----------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------+----------+--------------+------------------+-------------------+ | ON.000002 | 154 | | | | +-----------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec) mysql>
文件信息如下所示
# pwd /var/lib/mysql # ls ON.* ON.000001 ON.000002 ON.index #
查询binlog的事件信息
可以使用show binlog events来查询事件信息
mysql> show binlog events; +-----------+-----+----------------+-----------+-------------+---------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +-----------+-----+----------------+-----------+-------------+---------------------------------------+ | ON.000001 | 4 | Format_desc | 1001 | 123 | Server ver: 5.7.16-log, Binlog ver: 4 | | ON.000001 | 123 | Previous_gtids | 1001 | 154 | | | ON.000001 | 154 | Rotate | 1001 | 194 | ON.000002;pos=4 | +-----------+-----+----------------+-----------+-------------+---------------------------------------+ 3 rows in set (0.00 sec) mysql>
使用mysqlbinlog来查看日志内容
使用自带的命令mysqlbinlog可以查看日志内容,同样也可使用show binlog events in 'ON.00002’¥G;命令进行查询。
# pwd /var/lib/mysql # ls ON.* ON.000001 ON.000002 ON.index # mysqlbinlog ON.000002 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #190307 14:51:58 server id 1001 end_log_pos 123 CRC32 0x805f2f4b Start: binlog v 4, server v 5.7.16-log created 190307 14:51:58 # Warning: this binlog is either in use or was not closed properly. BINLOG ' DjCBXA/pAwAAdwAAAHsAAAABAAQANS43LjE2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA AUsvX4A= '/*!*/; # at 123 #190307 14:51:58 server id 1001 end_log_pos 154 CRC32 0x0e5d49ca Previous-GTIDs # [empty] SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/; #
也可以使用如下命令:
mysql> show binlog events in 'ON.000002'\G; *************************** 1. row *************************** Log_name: ON.000002 Pos: 4 Event_type: Format_desc Server_id: 1001 End_log_pos: 123 Info: Server ver: 5.7.16-log, Binlog ver: 4 *************************** 2. row *************************** Log_name: ON.000002 Pos: 123 Event_type: Previous_gtids Server_id: 1001 End_log_pos: 154 Info: 2 rows in set (0.00 sec) ERROR: No query specified mysql>
总结
这篇文章介绍了如何设定binlog以及常见的命令的使用方法,接下来介绍drop table或者drop table的恢复方法和示例。
- Mysql基础原理和常用命令使用
- Mysql安装过程--使用源码安装 & 常用命令
- linux 目录结构+常用命令+压缩命令+vim使用+及一些基础知识(非常好)
- Git基础(常用命令)介绍
- MySQL常用操作命令详细介绍
- MySQL 远程登录与其常用命令的介绍
- MySQL 基础常用命令
- linux 常用基础命令 echo 详细介绍
- mysql -- 基础 -- 常用命令
- Synplify 使用过程中最常用的选项及命令的介绍
- MySQL 常用命令的使用
- MySql基础教程(常用命令)
- Git基础(常用命令)介绍
- linux 常用基础命令 cd 详细介绍
- linux 常用基础命令 ln 详细介绍
- linux 常用基础命令 tar 详细介绍
- Mysql常用命令使用
- mysql 中show 命令用法详细介绍 mysql过程(procedure)的使用
- MySQL Show常用命令的使用
- 开启mysql慢查询日志并使用mysqldumpslow命令查看