您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。  1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通  2. 毕业设计专栏,毕业季咱们不慌忙,几百款毕业设计等你选。 ❤️ 3. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当 。python爬虫入门进阶 ❤️ 4. Ceph实战,从原理到实战应有尽有。 Ceph实战 ❤️ 5. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门

文章目录

1、binlog日志是什么

2、binlog日志如何查看2.1. 查看binlog日志是否开启2.2. 通过mysqlbinlog命令查看binlog日志删除binlog

1、binlog日志是什么

binlog主要用于记录MySQL中的数据库操作,它包括DDL和DML语句(除了查询语句)。它以事件的形式记录,它是一个二进制文件。MySQL的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗(参见MySQL官方中文手册 5.1.24版)。二进制有两个最重要的使用场景:

MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致性的目的。数据恢复,通过使用 mysqlbinlog 工具来恢复数据。

binlog日志主要包括两类文件:二进制索引文件(文件名后缀为.index)用于记录所有二进制文件,二进制日志文件(文件名后缀为.0000*),记录数据库中所有的DDL和DML语句。

2、binlog日志如何查看

binlog有三种模式

format定义优点缺点statement记录的是修改SQL语句日志文件小,节约IO,提高性能准确性差,对一些系统函数不能准确复制或不能复制,如now0.uuid0等row记录的是每行实际数据变化准确性强,能准确复制数据的变更日志文件大,较大的网络10和磁盘lOmixedstatement和row模式的混合准确性强,文件大小适中有可能发生主从不一致问题

业内目前推荐使用的是row模式,准确性高,虽然说文件大,但是现在有SSD和万兆光纤网络,这些磁盘IO和网络IO都是可以接受的。mysql默认的也是row模式。

binlog日志文件是二进制文件,不能直接查看。可以通过下面的命令进行查看

mysqlbinlog mysql-bin.00001

如果是row模式的话

mysqlbinlog -vv mysql-bin.00001

2.1. 查看binlog日志是否开启

mysql> show master status; #查看当前正在写入的binlog文件

如果没有开启的话则可以通过修改 my.ini (windows环境下)或者/etc/my.cnf 配置文件的 log-bin选项。

在配置文件中加入 log-bin 配置,表示启用binlog,如果没有给定值,写成 log-bin=,则默认名称为主机名。(注:名称若带有小数点,则只取第一个小数点前的部分作为名称)

[mysqld]

log-bin=my-binlog-name

2.2. 通过mysqlbinlog命令查看binlog日志

mysqlbinlog 是一个查看mysql二进制日志的工具,可以把mysql上面的所有操作记录从日志里导出,默认的安装路径是 :/usr/local/mysql/bin/mysqlbinlog

可以通过 find / -name "mysqlbinlog" 或者 which mysqlbinlog 命令来查找mysqlbinlog 工具的路径。

如果输入 mysqlbinlog 命令提示找不到命令的话,则可以通过建立软链的方式。比如我的mysqlbinlog命令在 /data/server/mysql/bin/mysqldump 路径下,可以通过如下命令建立软链解决此问题

ln -s /data/server/mysql/bin/mysqldump /usr/bin/mysqldump

如下是使用mysqlbinlog 命令的基本示例

# mysqlbinlog 的执行格式

mysqlbinlog [options] log_file ...

# 查看bin-log二进制文件(shell方式)

mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003

# 查看bin-log二进制文件(带查询条件)

mysqlbinlog -v --base64-output=decode-rows /var/lib/mysql/master.000003 \

--start-datetime="2023-09-11 00:00:00" \

--stop-datetime="2023-09-12 00:00:00" \

--start-position="5000" \

--stop-position="20000"

这里设置了日志查询的开始时间(2023-09-11 00:00:00),结束时间(2023-09-12 00:00:00),开始位置(5000)以及结束位置(20000)。

更多的mysqlbinlog命令的操作参数可以通过 mysqlbinlog --help进行查看。

mysqlbinlog 日志的部分内容

#230910 15:38:30 server id 1 end_log_pos 328 CRC32 0x3bb60240 Query thread_id=63 exec_time=0 error_code=0

BEGIN

/*!*/;

# at 328

# at 575

#230910 15:38:30 server id 1 end_log_pos 658 CRC32 0x20b2fcd1 Table_map: `db1`.`table1` mapped to number 197

# has_generated_invisible_primary_key=0

# at 658

#230910 15:38:30 server id 1 end_log_pos 771 CRC32 0xa0d5cf45 Write_rows: table id 197 flags: STMT_END_F

### INSERT INTO `db1`.`table1`

### SET

### @1=1

### @2=2190000159000076193

### @3=585

### @4=3

### @5=4

### @6=2

### @7=NULL

### @8='2020-06-05 17:04:51'

### @9='2023-09-10 15:38:30'

### @10='1268831135392108546'

### @11=0

# at 771

#230910 15:38:30 server id 1 end_log_pos 802 CRC32 0xecd87f75 Xid = 90733

COMMIT/*!*/;

上面的输出包括信息

position: 位于文件中的位置,即第一行的(# at 230910),说明该事件记录从文件第230910 个字节开始

timestamp: 事件发生的时间戳,即第二行的(#190308 15:38:30)

server id: 服务器标识(1)

end_log_pos 表示下一个事件开始的位置(即当前事件的结束位置+1)

thread_id: 执行该事件的线程id (thread_id=63)

exec_time: 事件执行的花费时间

error_code: 错误码,0意味着没有发生错误

type:事件类型Query

增加 --base64-output=decode-rows –v 选项解析

(base64-output,可以控制输出语句输出base64编码的BINLOG语句;decode-rows:选项将把基于行的事件解码成一个SQL语句)

mysqlbinlog --no-defaults --database=db1 --base64-output=decode-rows -v mysql-bin.000269>/data/server/binlog.sql

通过这个命令可以将mysql-bin.000269二进制文件的内容写到binlog.sql文件中。

删除binlog

删除binlog 可以通过 reset master 命令来实现。

参考文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。