MySQL的binlog日志文件(也叫做:二进制日志)记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改。若操作本身并没有导致数据库发生变化,那么该操作不会被写入binlog。binlog日志文件的主要作用:
- 可以完成主从复制。在主服务器上把所有修改数据的操作记录到binlog中,通过网络发送给从服务器,从而达到主从同步。
- 进行恢复操作。数据可以通过binlog日志,使用mysqlbinlog命令,实现基于时间点和位置的恢复操作。
视频讲解如下:
https://www.bilibili.com/video/BV1v9YDeyE4V/?aid=112942540391...
下表列举了binlog文件的三种模式。
与binlog非常相似的一个概念叫做redo log,下表列出了二者的区别。
下面我们通过一个简单的例子来说明binlog的作用。
(1)查看MySQL是否启用binlog
mysql> show variables like '%log_bin%';
# 输出的信息如下:
+------------------+------------------------------------+
| Variable_name | Value |
+------------------+------------------------------------+
| log_bin | ON |
| log_bin_basename | /usr/local/mysql/data/binlog |
| log_bin_index | /usr/local/mysql/data/binlog.index |
+------------------+------------------------------------+
# 其中:
# log_bin:表示是否开启了binlog。
# log_bin_basename:binlog日志的基本文件名,最终生成的binlog文件会追加标识来表示每一个文件
# log_bin_index:指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录 。
提示:从MySQL 8开始默认启用了binlog。但是在MySQL 8之前的版本中,默认并没有开启Binlog。需要修改my.cnf文件增加下面的参数,并重启MySQL以启用binlog。
log-bin=mysql-binlog
server-id=1
注意:这里的mysql-binlog是生成的binlog的文件名。
(2)将binlog的格式设置为STATEMENT,即:每条改变数据的语句都被记录到binlog中。
mysql> set binlog_format = 'STATEMENT';
提示:binlog_format参数的默认值是ROW模式,执行下面的语句:
mysql> select @@binlog_format;
# 输出的信息如下:
+-------------------+
| @@binlog_format |
+-------------------+
| ROW |
+-------------------+
(3)查看当前的binblog日志文件是哪个。
mysql> show master status \G;
# 输出的信息如下:
*************************** 1. row ***************************
File: binlog.000010
Position: 12255
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 3f332e68-9d5c-11ec-9a32-000c298c28d2:1-176384
1 row in set (0.00 sec)
(4)创建测试表,并插入测试数据。
mysql> use demo1;
mysql> create table test4(tid int,tname varchar(10),money int);
mysql> insert into test4 values(1,'Tom',1000);
(5)修改数据
mysql> update test4 set money=1234 where tid=1;
(6)查看binlog中记录的日志信息
mysql> show binlog events in 'binlog.000010';
# 输出的信息如下:
use `demo1`; create table test4(tid int,tname varchar(10),money int)
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
BEGIN
use `demo1`; insert into test4 values(1,'Tom',1000)
COMMIT /* xid=27 */
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
BEGIN
use `demo1`; update test4 set money=1234 where tid=1
COMMIT /* xid=28 */
提示:也可以通过下面的语句直接查看binlog日志:
mysqlbinlog --no-defaults binlog.000001
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。