MySQL二进制日志(binlog)配置、二进制日志binlog查看、mysqlbinlog查看二进制日志、二进制日志binlog清理等详解

提示:MySQL 中的日志比较重要的有 binlog(归档日志)、redo log(重做日志)以及 undo log,那么跟我们本文相关的主要是 binlog,另外两个日志松哥将来有空了再和大家详细介绍。

文章目录

    • 1、二进制日志binlong的作用
      • 1、1 灾难时恢复数据
      • 1、2 主从复制
    • 2、查看binlog日志文件
    • 2、binlong日志的三种格式
      • 2.1.1 Statement
      • 2.2.2 Row
      • 2.2.3 Mixed
    • 3、配置binlong
      • 3、1MySQL配置文件my.cnf中配置binlong参数
      • 3、2 二进制日志binlog查看工具mysqlbinlog
    • 4、测试mysqlbinlog查看二进制文件
      • 4、1 更新demp表数据
      • 4、2查看二进制文件记录更新
    • 5、二进制日志binlog清理
      • 手动清理:命令式
        • 5、1 reset master命令:
        • 5、2 purage master logs to命令
      • 自动设置清理


1、二进制日志binlong的作用

mysql中二进制日志记录了数据库的DDL定义操作和DDM操作语言

1、1 灾难时恢复数据

1、2 主从复制

2、查看binlog日志文件

命令:
mysql> show variables like ‘log_bin%’;
±--------------------------------±-----------------------------------+
| Variable_name | Value |
±--------------------------------±-----------------------------------+
| log_bin | ON |
| log_bin_basename | /data/log-bin/mysql-bin-3306 |
| log_bin_index | /data/log-bin/mysql-bin-3306.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
±--------------------------------±-----------------------------------+
log_bin_basename :二进制日志所在位置
log_bin_index:索引


查看binlong具体信息:

[root@mysql8 ~]# cd /data/log-bin
[root@mysql8 log-bin]# ll
total 28
-rw-r--r-- 1 root  root     0 Jul 29 03:53 1.sql
-rw-r----- 1 mysql mysql  179 Jul 28 21:09 mysql-bin-3306.000013
-rw-r----- 1 mysql mysql  179 Jul 29 00:26 mysql-bin-3306.000014
-rw-r----- 1 mysql mysql  179 Jul 29 00:46 mysql-bin-3306.000015
-rw-r----- 1 mysql mysql  179 Jul 29 00:46 mysql-bin-3306.000016
-rw-r----- 1 mysql mysql  179 Jul 29 00:46 mysql-bin-3306.000017
-rw-r----- 1 mysql mysql 1387 Jul 29 04:22 mysql-bin-3306.000018
-rw-r----- 1 mysql mysql  216 Jul 29 00:48 mysql-bin-3306.index

mysql-bin-3306为前缀的都是二进制文件,记录着数据库操作。

2、binlong日志的三种格式

MySQL 中的日志比较重要的有 binlog(归档日志)、redo log(重做日志)以及 undo log,

使用场景:
MySQL 主从复制时:在主机上开启 binlog,主机将 binlog 同步给从机,从机通 过 binlog 来同步数据,进而实现主机和从机的数据同步。

MySQL 数据恢复,通过使用 mysqlbinlog 工具再结合 binlog 文件,可以将数据恢复到过去的某一时刻。

binlog 有三种格式:

Statement(Statement-Based Replication,SBR):每一条会修改数据的 SQL 都会记录在 binlog 中。

Row(Row-Based Replication,RBR):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。

Mixed(Mixed-Based Replication,MBR):Statement 和 Row 的混合体。

2.1.1 Statement

Statement 模式只记录执行的 SQL,不需要记录每一行数据的变化,因此极大的减少了 binlog 的日志量,避免了大量的 IO 操作,提升了系统的性能。

但是,正是由于 Statement 模式只记录 SQL,而如果一些 SQL 中 包含了函数,那么可能会出现执行结果不一致的情况。比如说 uuid() 函数,每次执行的时候都会生成一个随机字符串,在 master 中记录了 uuid,当同步到 slave 之后,再次执行,就得到另外一个结果了。

所以使用 Statement 格式会出现一些数据一致性问题。

2.2.2 Row

从 MySQL5.1.5 版本开始,binlog 引入了 Row 格式,Row 格式不记录 SQL 语句上下文相关信息,仅仅只需要记录某一条记录被修改成什么样子了。

Row 格式的日志内容会非常清楚地记录下每一行数据修改的细节,这样就不会出现 Statement 中存在的那种数据无法被正常复制的情况。

不过 Row 格式也有一个很大的问题,那就是日志量太大了,特别是批量 update、整表 delete、alter 表等操作,由于要记录每一行数据的变化,此时会产生大量的日志,大量的日志也会带来 IO 性能问题。

2.2.3 Mixed

从 MySQL5.1.8 版开始,MySQL 又推出了 Mixed 格式,这种格式实际上就是 Statement 与 Row 的结合。

在 Mixed 模式下,系统会自动判断 该 用 Statement 还是 Row:一般的语句修改使用 Statement 格式保存 binlog;对于一些 Statement 无法准确完成主从复制的操作,则采用 Row 格式保存 binlog。

Mixed 模式中,MySQL 会根据执行的每一条具体的 SQL 语句来区别对待记录的日志格式,也就是在 Statement 和 Row 之间选择一种。

3、配置binlong

3、1MySQL配置文件my.cnf中配置binlong参数

# 这个参数表示启用 binlog 功能,并指定 binlog 的存储目录
log-bin=mysqlbin
# 配置二进制文件存放的位置
log-bin = /data/log-bin/mysql-bin-3306# 二进制日志格式的配置  STATEMENT Mixed row等配置binlog_format=STATEMENT# 设置一个 binlog 文件的最大字节
# 设置最大 100MB
max_binlog_size=104857600# 设置了 binlog 文件的有效期(单位:天)
expire_logs_days = 7# binlog 日志只记录指定库的更新(配置主从复制的时候会用到)
#binlog-do-db=javaboy_db# binlog 日志不记录指定库的更新(配置主从复制的时候会用到)
#binlog-ignore-db=javaboy_no_db# 写缓存多少次,刷一次磁盘,默认 0 表示这个操作由操作系统根据自身负载自行决定多久写一次磁盘
# 1 表示每一条事务提交都会立即写磁盘,n 则表示 n 个事务提交才会写磁盘
sync_binlog=0# 为当前服务取一个唯一的 id(MySQL5.7 之后需要配置)
server-id=1

配置文件配置结束后重启mysql服务即可生效,service mysqld start

3、2 二进制日志binlog查看工具mysqlbinlog

[root@mysql8 log-bin]# cd /data/log-bin/
[root@mysql8 log-bin]# ll
total 28
-rw-r--r-- 1 root  root     0 Jul 29 03:53 1.sql
-rw-r----- 1 mysql mysql  179 Jul 28 21:09 mysql-bin-3306.000013
-rw-r----- 1 mysql mysql  179 Jul 29 00:26 mysql-bin-3306.000014
-rw-r----- 1 mysql mysql  179 Jul 29 00:46 mysql-bin-3306.000015
-rw-r----- 1 mysql mysql  179 Jul 29 00:46 mysql-bin-3306.000016
-rw-r----- 1 mysql mysql  179 Jul 29 00:46 mysql-bin-3306.000017
-rw-r----- 1 mysql mysql 1387 Jul 29 04:22 mysql-bin-3306.000018
-rw-r----- 1 mysql mysql  216 Jul 29 00:48 mysql-bin-3306.index

查看binlog二进制日志文件:mysqlbinlog 日志文件

[root@mysql8 log-bin]# mysqlbinlog mysql-bin-3306.000014
mysqlbinlog: [ERROR] unknown variable 'default_character-set=utf8mb4'.

有报错建议修改配置文件中的字符集即可,可有利用第二中方式轻松查看
mysqlbinlog --no-defaults mysql-bin.3306.000018命令打开

4、测试mysqlbinlog查看二进制文件

4、1 更新demp表数据

更新demp表中所有id

mysql> select * from demp;
+-------------+------------+-----------+----------+--------------------+---------------------+--------+--------+----------------+------------+---------------+
| employee_id | first_name | last_name | email    | phone_number       | hire_date           | job_id | salary | commission_pct | manager_id | department_id |
+-------------+------------+-----------+----------+--------------------+---------------------+--------+--------+----------------+------------+---------------+
|         163 | Danielle   | Greene    | DGREENE  | 011.44.1346.229268 | 1999-03-19 00:00:00 | SA_REP |   9500 |           0.15 |        147 |            80 |
|         164 | Mattea     | Marvins   | MMARVINS | 011.44.1346.329268 | 2000-01-24 00:00:00 | SA_REP |   7200 |           0.10 |        147 |            80 |
|         166 | Sundar     | Ande      | SANDE    | 011.44.1346.629268 | 2000-03-24 00:00:00 | SA_REP |   6400 |           0.10 |        147 |            80 |
|         167 | Amit       | Banda     | ABANDA   | 011.44.1346.729268 | 2000-04-21 00:00:00 | SA_REP |   6200 |           0.10 |        147 |            80 |
|         168 | Lisa       | Ozer      | LOZER    | 011.44.1343.929268 | 1997-03-11 00:00:00 | SA_REP |  11500 |           0.25 |        148 |            80 |
|         169 | Harrison   | Bloom     | HBLOOM   | 011.44.1343.829268 | 1998-03-23 00:00:00 | SA_REP |  10000 |           0.20 |        148 |            80 |
|         170 | Tayler     | Fox       | TFOX     | 011.44.1343.729268 | 1998-01-24 00:00:00 | SA_REP |   9600 |           0.20 |        148 |            80 |
|         171 | William    | Smith     | WSMITH   | 011.44.1343.629268 | 1999-02-23 00:00:00 | SA_REP |   7400 |           0.15 |        148 |            80 |
|         172 | Elizabeth  | Bates     | EBATES   | 011.44.1343.529268 | 1999-03-24 00:00:00 | SA_REP |   7300 |           0.15 |        148 |            80 |
+-------------+------------+-----------+----------+--------------------+---------------------+--------+--------+----------------+------------+---------------+
9 rows in set (0.00 sec)mysql> update demp set employee_id=100;
Query OK, 9 rows affected (0.00 sec)
Rows matched: 9  Changed: 9  Warnings: 0mysql> commit;
Query OK, 0 rows affected (0.00 sec)mysql> select * from demp;
+-------------+------------+-----------+----------+--------------------+---------------------+--------+--------+----------------+------------+---------------+
| employee_id | first_name | last_name | email    | phone_number       | hire_date           | job_id | salary | commission_pct | manager_id | department_id |
+-------------+------------+-----------+----------+--------------------+---------------------+--------+--------+----------------+------------+---------------+
|         100 | Danielle   | Greene    | DGREENE  | 011.44.1346.229268 | 1999-03-19 00:00:00 | SA_REP |   9500 |           0.15 |        147 |            80 |
|         100 | Mattea     | Marvins   | MMARVINS | 011.44.1346.329268 | 2000-01-24 00:00:00 | SA_REP |   7200 |           0.10 |        147 |            80 |
|         100 | Sundar     | Ande      | SANDE    | 011.44.1346.629268 | 2000-03-24 00:00:00 | SA_REP |   6400 |           0.10 |        147 |            80 |
|         100 | Amit       | Banda     | ABANDA   | 011.44.1346.729268 | 2000-04-21 00:00:00 | SA_REP |   6200 |           0.10 |        147 |            80 |
|         100 | Lisa       | Ozer      | LOZER    | 011.44.1343.929268 | 1997-03-11 00:00:00 | SA_REP |  11500 |           0.25 |        148 |            80 |
|         100 | Harrison   | Bloom     | HBLOOM   | 011.44.1343.829268 | 1998-03-23 00:00:00 | SA_REP |  10000 |           0.20 |        148 |            80 |
|         100 | Tayler     | Fox       | TFOX     | 011.44.1343.729268 | 1998-01-24 00:00:00 | SA_REP |   9600 |           0.20 |        148 |            80 |
|         100 | William    | Smith     | WSMITH   | 011.44.1343.629268 | 1999-02-23 00:00:00 | SA_REP |   7400 |           0.15 |        148 |            80 |
|         100 | Elizabeth  | Bates     | EBATES   | 011.44.1343.529268 | 1999-03-24 00:00:00 | SA_REP |   7300 |           0.15 |        148 |            80 |
+-------------+------------+-----------+----------+--------------------+---------------------+--------+--------+----------------+------------+---------------+
9 rows in set (0.00 sec)

4、2查看二进制文件记录更新

total 28
-rw-r–r-- 1 root root 0 Jul 29 03:53 1.sql
-rw-r----- 1 mysql mysql 179 Jul 28 21:09 mysql-bin-3306.000013
-rw-r----- 1 mysql mysql 179 Jul 29 00:26 mysql-bin-3306.000014
-rw-r----- 1 mysql mysql 179 Jul 29 00:46 mysql-bin-3306.000015
-rw-r----- 1 mysql mysql 179 Jul 29 00:46 mysql-bin-3306.000016
-rw-r----- 1 mysql mysql 179 Jul 29 00:46 mysql-bin-3306.000017
-rw-r----- 1 mysql mysql 1697 Jul 30 07:29 mysql-bin-3306.000018
-rw-r----- 1 mysql mysql 216 Jul 29 00:48 mysql-bin-3306.index

根据时间显示和追加记录mysql-bin-3306.000018中记录了最新的数据库操作信息,利用mysqlbinlog工具进行查看:

[root@mysql8 log-bin]# mysqlbinlog --no-defaults mysql-bin-3306.000018

文件内容显示如下:


[root@mysql8 log-bin]# mysqlbinlog --no-defaults mysql-bin-3306.000018
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230729  0:48:15 server id 1  end_log_pos 125 CRC32 0x30ea3950  Start: binlog v 4, server v 8.0.24 created 230729  0:48:15 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
T/HDZA8BAAAAeQAAAH0AAAABAAQAOC4wLjI0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAABP8cNkEwANAAgAAAAABAAEAAAAYQAEGggAAAAICAgCAAAACgoKKioAEjQA
CigBUDnqMA==
'/*!*/;
# at 125
#230729  0:48:15 server id 1  end_log_pos 156 CRC32 0xfc28efee  Previous-GTIDs
# [empty]
# at 156
#230729  4:13:48 server id 1  end_log_pos 235 CRC32 0x52abd1d5  Anonymous_GTID  last_committed=0        sequence_number=1       rbr_only=no     original_committed_timestamp=1690575228721727 immediate_commit_timestamp=1690575228721727     transaction_length=299
# original_commit_timestamp=1690575228721727 (2023-07-29 04:13:48.721727 CST)
# immediate_commit_timestamp=1690575228721727 (2023-07-29 04:13:48.721727 CST)
/*!80001 SET @@session.original_commit_timestamp=1690575228721727*//*!*/;
/*!80014 SET @@session.original_server_version=80024*//*!*/;
/*!80014 SET @@session.immediate_server_version=80024*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 235
#230729  4:13:36 server id 1  end_log_pos 313 CRC32 0x5ce7bb97  Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575216/*!*/;
SET @@session.pseudo_thread_id=9/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1168113696/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=255,@@session.collation_connection=255,@@session.collation_server=45/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
/*!80011 SET @@session.default_collation_for_utf8mb4=255*//*!*/;
BEGIN
/*!*/;
# at 313
#230729  4:13:36 server id 1  end_log_pos 424 CRC32 0x4c694ced  Query   thread_id=9     exec_time=0     error_code=0
use `hr`/*!*/;
SET TIMESTAMP=1690575216/*!*/;
delete from demp where employee_id=165
/*!*/;
# at 424
#230729  4:13:48 server id 1  end_log_pos 455 CRC32 0xbf81adbc  Xid = 6
COMMIT/*!*/;
# at 455
#230729  4:17:44 server id 1  end_log_pos 534 CRC32 0xde2c6e07  Anonymous_GTID  last_committed=1        sequence_number=2       rbr_only=no     original_committed_timestamp=1690575464562403 immediate_commit_timestamp=1690575464562403     transaction_length=631
# original_commit_timestamp=1690575464562403 (2023-07-29 04:17:44.562403 CST)
# immediate_commit_timestamp=1690575464562403 (2023-07-29 04:17:44.562403 CST)
/*!80001 SET @@session.original_commit_timestamp=1690575464562403*//*!*/;
/*!80014 SET @@session.original_server_version=80024*//*!*/;
/*!80014 SET @@session.immediate_server_version=80024*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 534
#230729  4:17:02 server id 1  end_log_pos 612 CRC32 0xb3c5f7ed  Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575422/*!*/;
BEGIN
/*!*/;
# at 612
#230729  4:17:02 server id 1  end_log_pos 722 CRC32 0x883aae6d  Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575422/*!*/;
delete from demp where employee_id=18
/*!*/;
# at 722
#230729  4:17:08 server id 1  end_log_pos 833 CRC32 0x22d36194  Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575428/*!*/;
delete from demp where employee_id=180
/*!*/;
# at 833
#230729  4:17:17 server id 1  end_log_pos 944 CRC32 0xb75c1ace  Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575437/*!*/;
delete from demp where employee_id=178
/*!*/;
# at 944
#230729  4:17:22 server id 1  end_log_pos 1055 CRC32 0x23c4fb31         Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575442/*!*/;
delete from demp where employee_id=177
/*!*/;
# at 1055
#230729  4:17:44 server id 1  end_log_pos 1086 CRC32 0x0d1db327         Xid = 25
COMMIT/*!*/;
# at 1086
#230729  4:22:49 server id 1  end_log_pos 1165 CRC32 0xb420e324         Anonymous_GTID  last_committed=2        sequence_number=3       rbr_only=no     original_committed_timestamp=1690575769602803 immediate_commit_timestamp=1690575769602803     transaction_length=301
# original_commit_timestamp=1690575769602803 (2023-07-29 04:22:49.602803 CST)
# immediate_commit_timestamp=1690575769602803 (2023-07-29 04:22:49.602803 CST)
/*!80001 SET @@session.original_commit_timestamp=1690575769602803*//*!*/;
/*!80014 SET @@session.original_server_version=80024*//*!*/;
/*!80014 SET @@session.immediate_server_version=80024*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 1165
#230729  4:22:27 server id 1  end_log_pos 1243 CRC32 0x2f5d2059         Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575747/*!*/;
BEGIN
/*!*/;
# at 1243
#230729  4:22:27 server id 1  end_log_pos 1356 CRC32 0x4a403e8b         Query   thread_id=9     exec_time=0     error_code=0
SET TIMESTAMP=1690575747/*!*/;
delete from tb_cs t where t.order_id='5'
/*!*/;
# at 1356
#230729  4:22:49 server id 1  end_log_pos 1387 CRC32 0x30b73bb0         Xid = 35
COMMIT/*!*/;
# at 1387
#230730  7:29:44 server id 1  end_log_pos 1466 CRC32 0xe43139ec         Anonymous_GTID  last_committed=3        sequence_number=4       rbr_only=no     original_committed_timestamp=1690673384343676 immediate_commit_timestamp=1690673384343676     transaction_length=310
# original_commit_timestamp=1690673384343676 (2023-07-30 07:29:44.343676 CST)
# immediate_commit_timestamp=1690673384343676 (2023-07-30 07:29:44.343676 CST)
/*!80001 SET @@session.original_commit_timestamp=1690673384343676*//*!*/;
/*!80014 SET @@session.original_server_version=80024*//*!*/;
/*!80014 SET @@session.immediate_server_version=80024*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 1466
#230730  7:29:39 server id 1  end_log_pos 1553 CRC32 0xfa85f183         Query   thread_id=11    exec_time=0     error_code=0
SET TIMESTAMP=1690673379/*!*/;
BEGIN
/*!*/;
# at 1553
#230730  7:29:39 server id 1  end_log_pos 1666 CRC32 0xb0b99617         Query   thread_id=11    exec_time=0     error_code=0
SET TIMESTAMP=1690673379/*!*/;
update demp set employee_id=100
/*!*/;
# at 1666
#230730  7:29:44 server id 1  end_log_pos 1697 CRC32 0xe18478e3         Xid = 47
COMMIT/*!*/;
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*/;

里面具体描述了表的操作信息和具体时间以及sql语言二进制日志具体信息的获取要根据mysql配置文件中对二进制日志binlog格式的配置。

5、二进制日志binlog清理

手动清理:命令式

5、1 reset master命令:

reset master可以删除所有的日志文件,重置二进制日志文件的索引文件为空,然后产生新的二进制文件(编号还是从000001开始)以及索引文件

mysql> reset master
-> ;
Query OK, 0 rows affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

5、2 purage master logs to命令

purage master logs to 可以删除指定二进制日志文件名之前的所有二进制日志文件

自动设置清理

在my.ini配置文件的【mysqlId】选项组中设置expire_logs_days参数
expire_logs_days参数定义了二进制日志文件的过期天数,过期的二进制日志文件将被自动删除
expire_logs_days=7;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++部署学习

gcc -E src/main.c -o src/main.i gcc -S src/main.c -o src/main.s gcc -C src/main.c -o src/main.o gcc src/main.c -o exec ./exec

累加和最大的组合

1、题目 给定一个数组,选择数字组成组合,请问哪个组合的累加和最大。 要求:相邻的数不能同时选。 例子: 输入:[3, 7, 9] 输出:12。选择 3 和 92、思路 定义dp[i],表示在 arr 的 0 ~ i i i 范围上按照选择数组成组合,累加和最大的结果,即所有可能性的最优。 dp[…

RabbitMQ 教程 | 第3章 客户端开发向导

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

20230727-随笔

目录 List删除满足条件的元素,并且避免索引错误或并发修改异常常用方法使用迭代器删除元素通过逆向循环删除元素Java8 的 removeIf()方法 获取不到日志内容问题排查尝试解决最终解决 List删除满足条件的元素,并且避免索引错误或并发修改异常常用方法 使…

排序算法汇总

每日一句:你的日积月累终会成为别人的望尘莫及 目录 常数时间的操作 选择排列 冒泡排列 【异或运算】 面试题: 1)在一个整形数组中,已知只有一种数出现了奇数次,其他的所有数都出现了偶数次,怎么找到…

51单片机IO口控制

51单片机IO口控制 1.点亮LED灯 原理:根据电路图,指向IO口的引脚;拉低电平,灯亮、 如图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zfco4IjK-1690308697530)(C:/Users/xie19/Pictur…

C++基础篇(一)常用关键字及示例

一、C常见关键词 1、auto auto: 自动类型推断。它可以让编译器根据变量的初始值自动推断出变量的类型。例如: auto x 42; // x 的类型为 int auto y 3.14; // y 的类型为 double2、decltype decltype: 类型推断。它可以根据表达式的类型推断出一个类型。例如&…

面试之CurrentHashMap的底层原理

首先回答HashMap的底层原理? HashMap是数组链表组成。数字组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的。要将key 存储到(put)HashMap中,key类型实现必须计算hashcode方法,默认这个方法是对象的地址。接…

input元素中的form属性有什么用?

在HTML中,input元素的form属性用于指定该输入字段所属的表单(form元素)。通过将input元素的form属性设置为相应的表单的id值,可以将输入字段与表单进行关联。 这个属性对于两个主要目的非常有用: 表单关联&#xff1…

【应用层】Http协议总结

文章目录 一、续->Http协议的学习 1.http请求中的get方法和post方法 2.http的状态码 3.http的报头 4.长链接 5.cookie(会话保持)总结 继续上一篇的内容: 上一篇的最后我们讲到了web根目录,知道…

epoll服务器创建

驱动 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #include <linux/uaccess.h> #include <linux/poll.h> unsigned int major; char kbuf[128]{0}…

使用Docker部署EMQX

原文链接&#xff1a;http://www.ibearzmblog.com/#/technology/info?id9dd5bf4159d07f6a4e69a6b379ce4244 前言 在物联网中&#xff0c;大多通信协议使用的都是MQTT&#xff0c;而EMQX是基于 Erlang/OTP 平台开发的 MQTT 消息服务器&#xff0c;它的优点很多&#xff0c;我…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(12)-Fiddler设置IOS手机抓包,你知多少???

1.简介 Fiddler不但能截获各种浏览器发出的 HTTP 请求&#xff0c;也可以截获各种智能手机发出的HTTP/ HTTPS 请求。 Fiddler 能捕获Android 和 Windows Phone 等设备发出的 HTTP/HTTPS 请求。同理也可以截获iOS设备发出的请求&#xff0c;比如 iPhone、iPad 和 MacBook 等苹…

【BMC】OpenBMC使用基础(WSL2版本)

代码准备 OpenBMC是一个开源的项目&#xff0c;用于开发BMC固件。官网是https://www.openbmc.org/&#xff0c;不过里面似乎没有什么内容&#xff0c;所以还需要依赖其它的网站&#xff0c;https://github.com/openbmc&#xff0c;在这里可以下载到需要的代码和文档。其主体部…

C#,数值计算——对数正态分布(logarithmic normal distribution)的计算方法与源程序

对数正态分布&#xff08;logarithmic normal distribution&#xff09;是指一个随机变量的对数服从正态分布&#xff0c;则该随机变量服从对数正态分布。对数正态分布从短期来看&#xff0c;与正态分布非常接近。但长期来看&#xff0c;对数正态分布向上分布的数值更多一些。 …

Tailwind CSS:基础使用/vue3+ts+Tailwind

一、理解Tailwind 安装 - TailwindCSS中文文档 | TailwindCSS中文网 Installation - Tailwind CSS 1.1、词义 我们简单理解就是搭上CSS的顺风车&#xff0c;事半功倍。 1.2、Tailwind CSS有以下优势 1. 快速开发&#xff1a;Tailwind CSS 提供了一些现成的 class / 可复用…

ARM裸机-4

1、什么是交叉编译 1.1、两种开发模式 非嵌入式开发&#xff0c;A&#xff08;类&#xff09;机编写&#xff08;源代码&#xff09;、编译得到可执行程序&#xff0c;发布给A&#xff08;类&#xff09;机运行。 嵌入式开发&#xff0c;A&#xff08;类&#xff09;机编写&am…

webpack : 无法加载文件 C:\Program Files\nodejs\webpack.ps1

webpack : 无法加载文件 C:\Program Files\nodejs\webpack.ps1 1.问题2. 解决办法&#xff1a; 1.问题 使用webpack打包是报错如下&#xff1a; webpack : 无法加载文件 C:\Program Files\nodejs\webpack.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c…

Spring源码(三)Spring Bean生命周期

Bean的生命周期就是指&#xff1a;在Spring中&#xff0c;一个Bean是如何生成的&#xff0c;如何销毁的 Bean生命周期流程图 1、生成BeanDefinition Spring启动的时候会进行扫描&#xff0c;会先调用org.springframework.context.annotation.ClassPathScanningCandidateCompo…

Qt C++实现Excel表格的公式计算

用Qt的QTableViewQStandardItemModelQStyledItemDelegate实现类似Excel表格的界面&#xff0c;在parser 模块中提供解析表格单元格输入的公式。单元格编辑结束后按回车进行计算和更新显示。 效果如下&#xff1a; 支持的公式计算可以深度嵌套&#xff0c;目前parser模块中仅提…