1.错误日志(log_error)
记录启动\关闭\日常运行过程中,状态信息,警告,错误
默认就是开启的: /数据路径下(data)/hostname.err
手工设定:
Master [(none)]>select @@log_error;
vim /etc/my.cnf
log_error=/var/log/mysql.log
log_timestamps=system
重启生效
show variables like 'log_error';
主要关注[ERROR],看上下文
2.二进制日志(binlog)
二进制日志记录了数据库所有变更类的操作日志
包含 DDL DCL DML
DDL和DCL 是以语句模式记录,和原来一模一样
对于 DML
记录已提交的事务
记录格式有3种,通过 binlog_format=row 控制
statement 又称SBR模式 语句模式记录日志
row 又称RBR模式 行模式,记录数据行的变化
mixed 又称MBR模式 混合模式,mysql自动决定
SBR的可读性很强,节省空间,日志量少,有可能会记录不准确
比如 insert into t1 values(1,'zs',now()); 使用了now函数,这样的话就会造成时间不准确
RBR 可读性较弱,日志量大,但是记录的会准确,高可用的环境中的新特性也要求RBR
所以会选择RBR 也就是row模式。
还有一个sync_binlog=1 每次事务提交都立即刷写binlog到磁盘
这是双一标准的另外一个1
什么时候会用到二进制日志
主从依赖于二进制日志
数据恢复时也要依赖于二进制日志
3.如何开启二进制日志,默认是没有开启的
核心参数如下:
vim /etc/my.cnf
server_id=6 #5.6中,单机可以不需要此参数
log_bin=/data/binlog/mysql-bin #其中/data/binlog 为提前创建的目录且有权限(mysql.mysql),mysql-bin 是二进制文件名的前缀
binlog_format=row
4.二进制日志记录单元
最小的单位是 event
对于DDL,DCL,一个语句就是一个event
对于DML语句来讲:只记录已提交的事务。
例如以下列子,就被分为了4个event
begin; 事件1
DML1 事件2
DML2 事件3
commit; 事件4
event的构成
三部分构成:
(1) 事件的开始标识
(2) 事件内容
(3) 事件的结束标识
这些都是为了方便我们截取事件
查看日志的开启情况
log_bin参数设置的路径,可以找到二进制日志
show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------+
| log_bin | ON |
| log_bin_basename | /data/binlog/mysql-bin |
| log_bin_index | /data/binlog/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------+
# ll /data/binlog
total 8
-rw-rw---- 1 mysql mysql 120 Sep 28 09:17 mysql-bin.000001
-rw-rw---- 1 mysql mysql 30 Sep 28 09:17 mysql-bin.index
一般都关注最后一个文件,因为每次只会使用一个文件,
查看一共多少个binlog
show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 120 |
+------------------+-----------+
目前是一个,我们flush 几次,让它多滚动几次出来
mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 167 |
| mysql-bin.000002 | 167 |
| mysql-bin.000003 | 167 |
| mysql-bin.000004 | 695 |
+------------------+-----------+
ll /data/binlog
total 24
-rw-rw---- 1 mysql mysql 167 Sep 28 23:57 mysql-bin.000001
-rw-rw---- 1 mysql mysql 167 Sep 28 23:57 mysql-bin.000002
-rw-rw---- 1 mysql mysql 167 Sep 28 23:57 mysql-bin.000003
-rw-rw---- 1 mysql mysql 695 Sep 29 00:23 mysql-bin.000004
-rw-rw---- 1 mysql mysql 150 Sep 29 00:23 mysql-bin.index
通过 show语句和ls 文件的位置,数量都是对的上的
5.查看mysql正在使用的日志文件
show master status;
file:当前MySQL正在使用的文件名
Position:最后一个事件的结束位置号
日志内容查看
event查看
查看之前先做几个操作
create database binlog charset utf8mb4;
use binlog;
create table t1(id int);
insert into t1 values(1);
此时新开一个终端
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 337 | | | |
+------------------+----------+--------------+------------------+-------------------+
show binlog events in 'mysql-bin.000004'; # 支持 后面加limit 设定查看的行数
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
| mysql-bin.000004 | 4 | Format_desc | 6 | 120 | Server ver: 5.6.49-log, Binlog ver: 4 |
| mysql-bin.000004 | 120 | Query | 6 | 236 | create database binlog charset utf8mb4 |
| mysql-bin.000004 | 236 | Query | 6 | 337 | use `binlog`; create table t1(id int) |
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
其中 Pos 是这一行事件的开始位置 End_log_pos是这一行的结束位置,这个位置后面会用到,便于我们截取用
补充:
SHOW BINLOG EVENTS
[IN 'log_name']
[FROM pos]
[LIMIT [offset,] row_count]
[root@db01 binlog]# mysql -e "show binlog events in 'mysql-bin.000004'" |grep drop
刚刚我们的操作还没哟commit 所以此时那条insert语句还看不到,现在commit一下
show binlog events in 'mysql-bin.000004';
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
| mysql-bin.000004 | 4 | Format_desc | 6 | 120 | Server ver: 5.6.49-log, Binlog ver: 4 |
| mysql-bin.000004 | 120 | Query | 6 | 236 | create database binlog charset utf8mb4 |
| mysql-bin.000004 | 236 | Query | 6 | 337 | use `binlog`; create table t1(id int) |
| mysql-bin.000004 | 337 | Query | 6 | 411 | BEGIN |
| mysql-bin.000004 | 411 | Table_map | 6 | 458 | table_id: 73 (binlog.t1) |
| mysql-bin.000004 | 458 | Write_rows | 6 | 498 | table_id: 73 flags: STMT_END_F |
| mysql-bin.000004 | 498 | Xid | 6 | 529 | COMMIT /* xid=74 */ |
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
其中
BEGIN
table_id: 73 (binlog.t1)
table_id: 73 flags: STMT_END_F
COMMIT /* xid=74 */
就是事务的记录,从begin到commit 中间是该行的变化
binlog文件内容详细查看
mysqlbinlog mysql-bin.000004
mysqlbinlog mysql-bin.000004 | grep -v '^SET' #也可以使用 grep -v 过滤掉一些不需要关注的部分
其中某一个事件的开始和下一个事件的开始,可以看到里面的操作
如:236-337之间就是 use到binlog库,然后建立一个t1的表
# at 236
#200929 0:38:26 server id 6 end_log_pos 337 CRC32 0xf81f11d4 Query thread_id=6 exec_time=0 error_code=0
use `binlog`/*!*/;
SET TIMESTAMP=1601311106/*!*/;
create table t1(id int)
/*!*/;
# at 337
再看下面的
# at 337
#200929 0:38:32 server id 6 end_log_pos 411 CRC32 0x48f75354 Query thread_id=6 exec_time=0 error_code=0
SET TIMESTAMP=1601311112/*!*/;
BEGIN
/*!*/;
# at 411
#200929 0:38:32 server id 6 end_log_pos 458 CRC32 0x4031dd46 Table_map: `binlog`.`t1` mapped to number 73
# at 458
#200929 0:38:32 server id 6 end_log_pos 498 CRC32 0x6e4b51c6 Write_rows: table id 73 flags: STMT_END_F
BINLOG '
iBFyXxMGAAAALwAAAMoBAAAAAEkAAAAAAAEABmJpbmxvZwACdDEAAQMAAUbdMUA=
iBFyXx4GAAAAKAAAAPIBAAAAAEkAAAAAAAEAAgAB//4BAAAAxlFLbg==
'/*!*/;
# at 498
#200929 0:46:47 server id 6 end_log_pos 529 CRC32 0x21a73cc0 Xid = 74
COMMIT/*!*/;
从337到498 记录了整个事务的操作,其中
iBFyXxMGAAAALwAAAMoBAAAAAEkAAAAAAAEABmJpbmxvZwACdDEAAQMAAUbdMUA=
iBFyXx4GAAAAKAAAAPIBAAAAAEkAAAAAAAEAAgAB//4BAAAAxlFLbg==
像这种根本看不懂的内容可以加参数
mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000004
# at 458
#200929 0:38:32 server id 6 end_log_pos 498 CRC32 0x6e4b51c6 Write_rows: table id 73 flags: STMT_END_F
### INSERT INTO `binlog`.`t1`
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
比刚才好了一点知道是条insert,
其中@1=1 是往这个表中的第一列插入了“1”这个值
查看指定时间的binlog
mysqlbinlog --start-datetime='2019-05-06 17:00:00' --stop-datetime='2019-05-06 17:01:00' /data/binlog/mysql-bin.000004
基于Position号进行日志截取
show binlog events in 'mysql-bin.000004';
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
| mysql-bin.000004 | 4 | Format_desc | 6 | 120 | Server ver: 5.6.49-log, Binlog ver: 4 |
| mysql-bin.000004 | 120 | Query | 6 | 236 | create database binlog charset utf8mb4 |
| mysql-bin.000004 | 236 | Query | 6 | 337 | use `binlog`; create table t1(id int) |
| mysql-bin.000004 | 337 | Query | 6 | 411 | BEGIN |
| mysql-bin.000004 | 411 | Table_map | 6 | 458 | table_id: 73 (binlog.t1) |
| mysql-bin.000004 | 458 | Write_rows | 6 | 498 | table_id: 73 flags: STMT_END_F |
| mysql-bin.000004 | 498 | Xid | 6 | 529 | COMMIT /* xid=74 */ |
+------------------+-----+-------------+-----------+-------------+----------------------------------------+
如果要截取建库语句也就是从120到236
可以使用下面的语句直接生成sql语句
mysqlbinlog --start-position=120 --stop-position=236 mysql-bin.000004>a.sql
6.通过binlog恢复数据
通过一系列实例演示
create database binlogrecover charset utf8mb4;
use binlogrecover;
create table t1 (id int);
insert into t1 values(1);
commit;
drop database binlogrecover;
开始恢复
mysql> show master status; #先看正在使用哪个binlog文件
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 1107 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> show binlog events in 'mysql-bin.000004'; #查看日志
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+
| mysql-bin.000004 | 4 | Format_desc | 6 | 120 | Server ver: 5.6.49-log, Binlog ver: 4 |
| mysql-bin.000004 | 120 | Query | 6 | 236 | create database binlog charset utf8mb4 |
| mysql-bin.000004 | 236 | Query | 6 | 337 | use `binlog`; create table t1(id int) |
| mysql-bin.000004 | 337 | Query | 6 | 411 | BEGIN |
| mysql-bin.000004 | 411 | Table_map | 6 | 458 | table_id: 73 (binlog.t1) |
| mysql-bin.000004 | 458 | Write_rows | 6 | 498 | table_id: 73 flags: STMT_END_F |
| mysql-bin.000004 | 498 | Xid | 6 | 529 | COMMIT /* xid=74 */ |
| mysql-bin.000004 | 529 | Query | 6 | 666 | create database binlogrecover charset utf8mb4 |
| mysql-bin.000004 | 666 | Query | 6 | 782 | use `binlogrecover`; create table t1 (id int) |
| mysql-bin.000004 | 782 | Query | 6 | 863 | BEGIN |
| mysql-bin.000004 | 863 | Table_map | 6 | 917 | table_id: 74 (binlogrecover.t1) |
| mysql-bin.000004 | 917 | Write_rows | 6 | 957 | table_id: 74 flags: STMT_END_F |
| mysql-bin.000004 | 957 | Xid | 6 | 988 | COMMIT /* xid=95 */ |
| mysql-bin.000004 | 988 | Query | 6 | 1107 | drop database binlogrecover |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+
从上面可以得知我们要恢复的是创建数据那时开始到drop前的部分也就是529-988
mysqlbinlog --start-position=529 --stop-position=988 /data/binlog/mysql-bin.000004>recover.sql
用上面的语句直接生成恢复用sql文件
在恢复前需要注意的问题
恢复时会再次的记录binlog,这些binlog会占用空间,所以可以暂时关闭binlog,待恢复完成后再开启
set sql_log_bin=0; #仅针对本窗口有效
source recover.sql #恢复数据
set sql_log_bin=1; #开启日志
到此为止 数据恢复完成
二进制数据恢复的弊端
不适合恢复时间跨度长的
对于时间跨度大的情况,可以先找到最近的一次备份,然后从最近的一次备份到出问题的时刻去截取binlog做恢复
mysqlbinlog -d binlogrecover /data/binlog/mysql-bin.000004
指定仅显示某个库的binlog
7.binlog的gtid记录模式的管理
对于binlog中的每一个事务,都会生成一个GTID
DDL DCL 一个event 就是一个事务,就会有一个GTID号
对于DML来说,begin 到 commit 是一个事务,就是一个GTID
gtid由2部分组成
server_uuid:TID
cat /data/mysql/data/auto.cnf
[auto]
server-uuid=5ad4fdd7-0223-11eb-90ea-000c29583568
TID的特性是自增长 从1开始
GTID的幂等性
如果用有GTID的日志去恢复时,检查当前系统中是否有相同的GTID号,有相同的就自动跳过
会影响binlog恢复和主从复制
8.GTID的开启与配置
开启
vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
systemctl restart mysqld
补充一个命令 show variables like '%gtid%'
当记不住参数时可以通过类似的命令来查看
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
此时Executed_Gtid_Set为空,注意这个地方
先建一个库
create database gtid charset utf8mb4;
此时再查看
show master status;
+------------------+----------+--------------+------------------+----------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+----------------------------------------+
| mysql-bin.000003 | 329 | | | 5ad4fdd7-0223-11eb-90ea-000c29583568:1 |
+------------------+----------+--------------+------------------+----------------------------------------+
发现 Executed_Gtid_Set 有了数据
再继续建个表
use gtid
create table t1 (id int);
此时
show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 | 492 | | | 5ad4fdd7-0223-11eb-90ea-000c29583568:1-2 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
再插入一条数据
insert into t1 values(1);
commit
show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 | 745 | | | 5ad4fdd7-0223-11eb-90ea-000c29583568:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
现在再查看event
show binlog events in 'mysql-bin.000003';
+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 6 | 123 | Server ver: 5.7.26-log, Binlog ver: 4 |
| mysql-bin.000003 | 123 | Previous_gtids | 6 | 154 | |
| mysql-bin.000003 | 154 | Gtid | 6 | 219 | SET @@SESSION.GTID_NEXT= '5ad4fdd7-0223-11eb-90ea-000c29583568:1' |
| mysql-bin.000003 | 219 | Query | 6 | 329 | create database gtid charset utf8mb4 |
| mysql-bin.000003 | 329 | Gtid | 6 | 394 | SET @@SESSION.GTID_NEXT= '5ad4fdd7-0223-11eb-90ea-000c29583568:2' |
| mysql-bin.000003 | 394 | Query | 6 | 492 | use `gtid`; create table t1 (id int) |
| mysql-bin.000003 | 492 | Gtid | 6 | 557 | SET @@SESSION.GTID_NEXT= '5ad4fdd7-0223-11eb-90ea-000c29583568:3' |
| mysql-bin.000003 | 557 | Query | 6 | 629 | BEGIN |
| mysql-bin.000003 | 629 | Table_map | 6 | 674 | table_id: 108 (gtid.t1) |
| mysql-bin.000003 | 674 | Write_rows | 6 | 714 | table_id: 108 flags: STMT_END_F |
| mysql-bin.000003 | 714 | Xid | 6 | 745 | COMMIT /* xid=25 */ |
+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+
由此可见 GTID 会出现在每条event前面,有了GTID 截取就会变得简单
现在drop掉 刚刚建立的gtid的库
下面开始基于 GTID的binlog恢复
先进到/data/binlog 下
cd /data/binlog/
开始截取,实际上记住--include-gtids 参数就可以了,后面跟的是GTID的范围,上面的例子是从1-3 所以
mysqlbinlog --include-gtids='5ad4fdd7-0223-11eb-90ea-000c29583568:1-3' mysql-bin.000003 >gtid.sql
开始恢复
set sql_log_bin=0;
source gtid.sql
但是发现报错了
这是因为GTID的幂等性在作怪,因为要恢复的1-3在系统中存在,所以就没有执行。
所以正确的做法是在导出时增加 --skip-gtids 参数
这个参数的意思是在导出时,忽略原有的gtid信息,恢复时生成最新的gtid信息
mysqlbinlog --skip-gtids --include-gtids='5ad4fdd7-0223-11eb-90ea-000c29583568:1-3' mysql-bin.000003 >newgtid.sql
此时就可以恢复数据了
mysqlbinlog --help | grep gtid #查看和gtid相关的参数
GTID 相关的参数
--exclude-gtids='uuid:2','uuid:3' #排除多个
9.慢日志(slow-log)
开启
vim /etc/my.cnf
slow_query_log=1 #开启慢日志
slow_query_log_file=/data/mysql/slow.log #文件位置及名字
long_query_time=0.1 #设定慢查询时间:
log_queries_not_using_indexes #没走索引的语句也记录:
systemctl restart mysqld #重启后生效
注意: /data/mysql 要提前创建好,并有权限
关于 long_query_time 默认是10s
select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
| 10.000000 |
+-------------------+
10.模拟慢查询
随便运行一些sql查询,再次查看slowlog可以发现
/application/mysql/bin/mysqld, Version: 5.7.26-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /tmp/mysql.sock
Time Id Command Argument
# Time: 2020-09-29T19:23:04.889979Z
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 0.692758 Lock_time: 0.000256 Rows_sent: 289 Rows_examined: 1030345
use test;
SET timestamp=1601407384;
select * from t100w where k1='aa';
# Time: 2020-09-29T19:23:08.578732Z
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 0.598559 Lock_time: 0.000217 Rows_sent: 288 Rows_examined: 1030345
SET timestamp=1601407388;
select * from t100w where k1='bb';
# Time: 2020-09-29T19:23:12.829435Z
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 0.739686 Lock_time: 0.000145 Rows_sent: 250 Rows_examined: 1030345
SET timestamp=1601407392;
select * from t100w where k1='cc';
# Time: 2020-09-29T19:23:22.642187Z
# User@Host: root[root] @ localhost [] Id: 2
# Query_time: 2.209855 Lock_time: 0.000228 Rows_sent: 1030345 Rows_examined: 1030345
SET timestamp=1601407402;
select * from t100w where num!= 19;
都是一些无序的日志,所以要做排序,可以依据 查询时间 查询次数等
mysqldumpslow -s c -t 10 /data/mysql/slow.log
Reading mysql slow query log from /data/mysql/slow.log
Count: 3 Time=0.68s (2s) Lock=0.00s (0s) Rows=275.7 (827), root[root]@localhost
select * from t100w where k1='S'
Count: 1 Time=2.21s (2s) Lock=0.00s (0s) Rows=1030345.0 (1030345), root[root]@localhost
select * from t100w where num!= N
Died at /application/mysql/bin/mysqldumpslow line 161, <> chunk 4.
其中 -s 排序 c 次数 t 前多少(top)
11. 第三方工具(自己扩展)
https://www.percona.com/downloads/percona-toolkit/LATEST/
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5
toolkit工具包中的命令:
./pt-query-diagest /data/mysql/slow.log
Anemometer基于pt-query-digest将MySQL慢查询可视化
12.二进制日志的清理
binlog时间久了会占用磁盘空间,在释放磁盘空间时,切忌不要使用操作系统层面的命令,而是使用数据库内部的命令
清理binlog的2中方案
自动方式
mysql> show variables like '%expire_log%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1 row in set (0.00 sec)
0代表永不过期,永远不会自动清除
直接修改 /etc/my.cnf
expire_logs_days=
最少设置为一个全备周期+1天
为了安全起见最好备份2个备份周期+1天
+1天是留出1天确认备份是否成功
手动方式
PURGE BINARY LOGS TO 'mysql-bin.010'; #按文件删除
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26' #按日期删除
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 167 |
| mysql-bin.000002 | 167 |
| mysql-bin.000003 | 167 |
| mysql-bin.000004 | 1107 |
| mysql-bin.000005 | 0 |
| mysql-bin.000004 | 1107 |
+------------------+-----------+
试试第一个
mysql> PURGE BINARY LOGS TO 'mysql-bin.000003';
Query OK, 0 rows affected (0.01 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000003 | 167 |
| mysql-bin.000004 | 1107 |
| mysql-bin.000005 | 0 |
| mysql-bin.000004 | 1107 |
+------------------+-----------+
mysql-bin.000003 以前的就都删除了
此处发现一个问题就是mysql-bin.000003 后面的数字是递增的,而且就算删除了以前的,也会自增下去
此时可以使用 reset master 命令,但是这个命令一定要慎用,比如主从节点的主节点一旦执行了这个命令后果会很严重
13.二进制日志的滚动
下面的情况会触发日志滚动
flush logs
数据库重启时
二进制日志文件到达文件大小上限时
show variables like '%max_binlog_size%';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
默认上限是1G
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)