随笔 - 72,  文章 - 0,  评论 - 1,  阅读 - 22557

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



posted on   wilson'blog  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示