mysql binlog入门

binlog

什么是binlog

binlg记录了所有的表结构变更(CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…),以事件形式记录,还包含语句所执行的消耗的时间。

简单的说就是,只要对表结构与表数据的修改,就会以事件的形式记录到binlog日志。系统管理员可以借助binlog日志,进行数据恢复、主从同步,统计分析等操作

有什么用

  • binlog 的主要目的是主从复制和数据的增量恢复。。

通过binlog就可以将一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器(slave),以实现灾难恢复、水平扩展、统计分析、远程数据分发等功能。

如何使用binlog

开启binlog

  • 永久开启binlog
vim /etc/my.cnf
[mysqld]
# 开启binlog
log-bin = mysql-bin/etc/init.d/mysqld restart
  • 检查是否开启成功
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)
  • 临时开启binlog
mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

关于binlog的常用命令

# 是否启用binlog日志
show variables like 'log_bin';# 查看详细的binlog日志配置信息
show global variables like '%log%';# 查看binlog的目录
show global variables like "%log_bin%";# 查看binlog文件日志列表
show binary logs;# 查看最新一个binlog日志文件名称和Position(操作事件pos结束点)
show master status;# 刷新log日志,自此刻开始产生一个新编号的binlog日志文件
# 每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqldump备份数据时加 -F 选项也会刷新binlog日志;
flush logs;# 查看第一个binlog文件内容
show binlog events  # 查看具体一个binlog文件的内容
show binlog events in 'master.000001';# 重置(清空)所有binlog日志
reset master;# 删除slave的中继日志
reset slave;# 删除指定日期前的日志索引中binlog日志文件
purge master logs before '2022-02-22 00:00:00';# 删除指定日志文件
purge master logs to 'master.000001';

查出binlog的事件

语法

mysql> show binlog events [IN ‘log_name’] [FROM pos] [LIMIT [offset,] row_count];

IN ‘log_name’ 指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos 指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset,] 偏移量(不指定就是0)
row_count 查询总条数(不指定就是所有行)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      622 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                   |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------+
| mysql-bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.33-0ubuntu0.16.04.1-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids |         1 |         154 |                                                        |
| mysql-bin.000001 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                   |
| mysql-bin.000001 | 219 | Query          |         1 |         291 | BEGIN                                                  |
| mysql-bin.000001 | 291 | Table_map      |         1 |         344 | table_id: 108 (test.mytest)                            |
| mysql-bin.000001 | 344 | Update_rows    |         1 |         408 | table_id: 108 flags: STMT_END_F                        |
| mysql-bin.000001 | 408 | Xid            |         1 |         439 | COMMIT /* xid=39 */                                    |
| mysql-bin.000001 | 439 | Anonymous_Gtid |         1 |         504 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                   |
| mysql-bin.000001 | 504 | Query          |         1 |         576 | BEGIN                                                  |
| mysql-bin.000001 | 576 | Table_map      |         1 |         629 | table_id: 108 (test.mytest)                            |
| mysql-bin.000001 | 629 | Write_rows     |         1 |         678 | table_id: 108 flags: STMT_END_F                        |
| mysql-bin.000001 | 678 | Xid            |         1 |         709 | COMMIT /* xid=41 */                                    |
| mysql-bin.000001 | 709 | Rotate         |         1 |         756 | mysql-bin.000002;pos=4                                 |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------+
13 rows in set (0.00 sec)mysql> show binlog events in 'mysql-bin.000003';
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                      |
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------+
| mysql-bin.000003 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.33-0ubuntu0.16.04.1-log, Binlog ver: 4    |
| mysql-bin.000003 | 123 | Previous_gtids |         1 |         154 |                                                           |
| mysql-bin.000003 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                      |
| mysql-bin.000003 | 219 | Query          |         1 |         291 | BEGIN                                                     |
| mysql-bin.000003 | 291 | Table_map      |         1 |         344 | table_id: 115 (test.mytest)                               |
| mysql-bin.000003 | 344 | Update_rows    |         1 |         407 | table_id: 115 flags: STMT_END_F                           |
| mysql-bin.000003 | 407 | Xid            |         1 |         438 | COMMIT /* xid=456 */                                      |
| mysql-bin.000003 | 438 | Anonymous_Gtid |         1 |         503 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                      |
| mysql-bin.000003 | 503 | Query          |         1 |         622 | use `test`; DROP TABLE `mytest` /* generated by server */ |
+------------------+-----+----------------+-----------+-------------+-----------------------------------------------------------+
9 rows in set (0.00 sec)

查看binlog日志内容

  • 需要借助mysqlbinlog工具
root@dg02-xianwetitest-dy03:/var/log/mysql# mysqlbinlog mysql-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#240429 15:26:55 server id 1  end_log_pos 123 CRC32 0x60124025 	Start: binlog v 4, server v 5.7.33-0ubuntu0.16.04.1-log created 240429 15:26:55 at startup
ROLLBACK/*!*/;
BINLOG '
v0svZg8BAAAAdwAAAHsAAAAAAAQANS43LjMzLTB1YnVudHUwLjE2LjA0LjEtbG9nAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC/Sy9mEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
ASVAEmA=
'/*!*/;
# at 123
#240429 15:26:55 server id 1  end_log_pos 154 CRC32 0x45671611 	Previous-GTIDs
# [empty]
# at 154
#240429 15:27:20 server id 1  end_log_pos 219 CRC32 0x13e18364 	Anonymous_GTID	last_committed=0	sequence_number=1	rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#240429 15:27:20 server id 1  end_log_pos 291 CRC32 0x57afa1d9 	Query	thread_id=3	exec_time=0	error_code=0
SET TIMESTAMP=1714375640/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 291
#240429 15:27:20 server id 1  end_log_pos 344 CRC32 0xb82fc741 	Table_map: `test`.`mytest` mapped to number 108
# at 344
#240429 15:27:20 server id 1  end_log_pos 408 CRC32 0x6aa30bbe 	Update_rows: table id 108 flags: STMT_END_FBINLOG '
2EsvZhMBAAAANQAAAFgBAAAAAGwAAAAAAAEABHRlc3QABm15dGVzdAADAw8DAjwABkHHL7g=
2EsvZh8BAAAAQAAAAJgBAAAAAGwAAAAAAAEAAgAD///4BQAAAAR4dzA1XgAAAPgFAAAABHh3MDVd
AAAAvgujag==
'/*!*/;
# at 408
#240429 15:27:20 server id 1  end_log_pos 439 CRC32 0x4e34ad89 	Xid = 39
COMMIT/*!*/;
# at 439
#240429 15:27:44 server id 1  end_log_pos 504 CRC32 0x268c5f40 	Anonymous_GTID	last_committed=1	sequence_number=2	rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 504
#240429 15:27:44 server id 1  end_log_pos 576 CRC32 0xcb62e1e1 	Query	thread_id=3	exec_time=0	error_code=0
SET TIMESTAMP=1714375664/*!*/;
BEGIN
/*!*/;
# at 576
#240429 15:27:44 server id 1  end_log_pos 629 CRC32 0xbc66d528 	Table_map: `test`.`mytest` mapped to number 108
# at 629
#240429 15:27:44 server id 1  end_log_pos 678 CRC32 0x63198af6 	Write_rows: table id 108 flags: STMT_END_FBINLOG '
8EsvZhMBAAAANQAAAHUCAAAAAGwAAAAAAAEABHRlc3QABm15dGVzdAADAw8DAjwABijVZrw=
8EsvZh4BAAAAMQAAAKYCAAAAAGwAAAAAAAEAAgAD//gGAAAABHh3MDZgAAAA9ooZYw==
'/*!*/;
# at 678
#240429 15:27:44 server id 1  end_log_pos 709 CRC32 0x931e24bd 	Xid = 41
COMMIT/*!*/;
# at 709
#240429 15:36:37 server id 1  end_log_pos 756 CRC32 0x2b455551 	Rotate to mysql-bin.000002  pos: 4
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*/;
root@dg02-xianwetitest-dy03:/var/log/mysql#
  • 默认显示的是二进制数据,可以使用-vv参数,解析出二进制数据中的sql语句
root@dg02-xianwetitest-dy03:/var/log/mysql# mysqlbinlog mysql-bin.000001 -vv
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#240429 15:26:55 server id 1  end_log_pos 123 CRC32 0x60124025 	Start: binlog v 4, server v 5.7.33-0ubuntu0.16.04.1-log created 240429 15:26:55 at startup
ROLLBACK/*!*/;
BINLOG '
v0svZg8BAAAAdwAAAHsAAAAAAAQANS43LjMzLTB1YnVudHUwLjE2LjA0LjEtbG9nAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAC/Sy9mEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
ASVAEmA=
'/*!*/;
# at 123
#240429 15:26:55 server id 1  end_log_pos 154 CRC32 0x45671611 	Previous-GTIDs
# [empty]
# at 154
#240429 15:27:20 server id 1  end_log_pos 219 CRC32 0x13e18364 	Anonymous_GTID	last_committed=0	sequence_number=1	rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#240429 15:27:20 server id 1  end_log_pos 291 CRC32 0x57afa1d9 	Query	thread_id=3	exec_time=0	error_code=0
SET TIMESTAMP=1714375640/*!*/;
SET @@session.pseudo_thread_id=3/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 291
#240429 15:27:20 server id 1  end_log_pos 344 CRC32 0xb82fc741 	Table_map: `test`.`mytest` mapped to number 108
# at 344
#240429 15:27:20 server id 1  end_log_pos 408 CRC32 0x6aa30bbe 	Update_rows: table id 108 flags: STMT_END_FBINLOG '
2EsvZhMBAAAANQAAAFgBAAAAAGwAAAAAAAEABHRlc3QABm15dGVzdAADAw8DAjwABkHHL7g=
2EsvZh8BAAAAQAAAAJgBAAAAAGwAAAAAAAEAAgAD///4BQAAAAR4dzA1XgAAAPgFAAAABHh3MDVd
AAAAvgujag==
'/*!*/;
### UPDATE `test`.`mytest`
### WHERE
###   @1=5 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw05' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=94 /* INT meta=0 nullable=1 is_null=0 */
### SET
###   @1=5 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw05' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=93 /* INT meta=0 nullable=1 is_null=0 */
# at 408
#240429 15:27:20 server id 1  end_log_pos 439 CRC32 0x4e34ad89 	Xid = 39
COMMIT/*!*/;
# at 439
#240429 15:27:44 server id 1  end_log_pos 504 CRC32 0x268c5f40 	Anonymous_GTID	last_committed=1	sequence_number=2	rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 504
#240429 15:27:44 server id 1  end_log_pos 576 CRC32 0xcb62e1e1 	Query	thread_id=3	exec_time=0	error_code=0
SET TIMESTAMP=1714375664/*!*/;
BEGIN
/*!*/;
# at 576
#240429 15:27:44 server id 1  end_log_pos 629 CRC32 0xbc66d528 	Table_map: `test`.`mytest` mapped to number 108
# at 629
#240429 15:27:44 server id 1  end_log_pos 678 CRC32 0x63198af6 	Write_rows: table id 108 flags: STMT_END_FBINLOG '
8EsvZhMBAAAANQAAAHUCAAAAAGwAAAAAAAEABHRlc3QABm15dGVzdAADAw8DAjwABijVZrw=
8EsvZh4BAAAAMQAAAKYCAAAAAGwAAAAAAAEAAgAD//gGAAAABHh3MDZgAAAA9ooZYw==
'/*!*/;
### INSERT INTO `test`.`mytest`
### SET
###   @1=6 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw06' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=96 /* INT meta=0 nullable=1 is_null=0 */
# at 678
#240429 15:27:44 server id 1  end_log_pos 709 CRC32 0x931e24bd 	Xid = 41
COMMIT/*!*/;
# at 709
#240429 15:36:37 server id 1  end_log_pos 756 CRC32 0x2b455551 	Rotate to mysql-bin.000002  pos: 4
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*/;
root@dg02-xianwetitest-dy03:/var/log/mysql#
  • 可以通过grep过滤出sql语句对应的行
root@dg02-xianwetitest-dy03:/var/log/mysql# mysqlbinlog mysql-bin.000001 -vv  |grep '###'
### UPDATE `test`.`mytest`
### WHERE
###   @1=5 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw05' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=94 /* INT meta=0 nullable=1 is_null=0 */
### SET
###   @1=5 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw05' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=93 /* INT meta=0 nullable=1 is_null=0 */
### INSERT INTO `test`.`mytest`
### SET
###   @1=6 /* INT meta=0 nullable=0 is_null=0 */
###   @2='xw06' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
###   @3=96 /* INT meta=0 nullable=1 is_null=0 */

binlog的使用场景

1、mysql主从复制

2、mysql数据恢复

3、数据同步,比如基于Canal投递MySQL Binlog到kafka、elasticsearch

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

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

相关文章

call 和 apply

call() 和 apply() 方法在功能上是类似的,它们都用于调用函数并指定函数执行时的上下文(即 this 的值),但它们的参数传递方式略有不同: call() 方法:接受一个参数列表,第一个参数是要绑定给函数…

Java Spring 中的声明式事务管理

Spring框架中的声明式事务管理是一种非编程式的事务管理方式,它允许开发者通过配置而非编程的方式来管理事务。这种方式使得事务管理与业务逻辑解耦,提高了代码的可读性和可维护性。 在Spring中,声明式事务管理主要依赖于AOP(面向…

Grafana 添加一台管理服务器

1、修改prometheus.yml 添加新服务器信息 2、重启pro 3、导入node文件 4、启动node 5、检验数据

大话人工智能之训练数据集

1.训练集(Training Set) 用于训练模型的数据集。训练集用来训练模型,拟合出数据分布规律,即确定模型的权重和偏置等参数,这些参数称为学习参数。 训练集使用多次确定模型权重、偏置等学习参数训练出(学习出)模型通常情…

拓云启航 移动云全网型经销渠道合作伙伴火热招募

2024年4月28日至29日,2024中国移动算力网络大会在苏州召开。28 日下午大会主论坛现场,中国移动发布移动云全新万象算力网络生态合作计划,加速算力网络新质生产力落地。后续,移动云将依托“拓云计划”,招募超万家渠道伙…

华为配置mDNS网关示例(AP与AC间二层转发)

华为配置mDNS网关示例(AP与AC间二层转发) 组网图形 图1 配置mDNS网关组网图 组网需求配置思路操作步骤配置文件 组网需求 如图1所示,某企业的移动终端通过WLAN连接网络,AP_1和AP_2分别与AC之间采用二层转发。部门1和部门2分别属…

用Python Turtle画一个中国结

中国结,作为中华民族传统文化的象征之一,以其独特的编织技艺和深厚的文化内涵,深受人们喜爱。今天,我们就来用Python的turtle模块,尝试绘制一个充满韵味的中国结。 我们先来看看整个中国结生成的过程: 中国…

2024年,如何实现高效的自动化渗透测试?

随着当前网络安全威胁的不断扩展与升级,开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而,传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求,企业需要投入较大的时间和资源才能完成。在此…

springboot3使用spring-boot-maven-plugin插件打包后找不到主类问题

打包后的jar很小只有几十K 修改plugin为以下内容 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal&…

linux jmeter ant下载并安装【2024-亲测】

环境 centos7 一、下载jmeter 在这里插入代码片wget https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.3.tgz --no-check-certificate解压 tar -zxvf apache-jmeter-5.6.3.tgz复制到安装目录、设置环境变量 vim /etc/profile添加环境变量&#xff0c;路径改成…

监控操作台为生活提供安全保障

在科技日新月异的现代社会&#xff0c;监控操作台已成为我们生活中不能缺少的一部分。它犹如一座城市的守护神&#xff0c;默默无闻地守护着我们的安全&#xff0c;确保着每一刻的平安。今天&#xff0c;和北京嘉德立一同走进这个神秘的世界&#xff0c;揭开监控操作台的神秘面…

中国智造再升级,基点生物全球首发新一代高端自动化实验室冰箱

生物低温存储领域中国智造再次取得重要突破。近日&#xff0c;基点生物在第十六届中国整合生物样本学大会和2024国际生物及环境样本库协会年会&#xff08;ISBER 2024&#xff09;上&#xff0c;正式发布了最新一代高端实验室冰箱&#xff0c;这一创新设备的发布&#xff0c;标…

三种修改 Docker 镜像默认存储位置的方法

由于系统初始分区的原因&#xff0c;导致操作系统中对应 / 分区不会太大&#xff0c;通过 /var 目录不会单独分区。如果上面运行 Docker 服务&#xff0c;经过长时间的使用&#xff0c;会使原本就比较大的分区越来越不够用。如何更好地的处理这个问题呢&#xff1f; 1. 使用软…

ai口语软件有合适的吗?分享4款!

在全球化日益深入的今天&#xff0c;英语作为国际通用语言&#xff0c;其重要性不言而喻。然而&#xff0c;传统的英语学习方式往往枯燥无味&#xff0c;难以持续。幸运的是&#xff0c;随着人工智能技术的快速发展&#xff0c;AI英语口语软件应运而生&#xff0c;为语言学习者…

C#-FTP帮助类相关操作的简单封装

目录 1、Ftp帮助类的框架封装 2、初始化Ftp连接 3、检查Ftp连接 4、Ftp文件上传 5、Ftp文件下载 6、获取Ftp上文件/文件夹列表 7、删除Ftp文件 8、删除Ftp文件夹 9、创建Ftp文件夹 10、更改Ftp文件名 11、获取Ftp文件大小 1、Ftp帮助类的框架封装 public class FtpH…

中应该如何让c++工程认识.c工程编译出来的库文件?

from gpt 但是 测试此方法没问题 在 .h 文件中声明 C 函数的原型是让 C 工程认识 C 工程编译出来的库文件的关键。下面是一种常见的做法&#xff1a; 在 .h 文件中声明函数原型&#xff1a; 创建一个 .h 文件&#xff0c;其中包含要在 C 代码中调用的 C 函数的声明。这些声明…

IT外包:打通企业和IT技术人才之间的障碍

近年来&#xff0c;随着互联网信息的快速发展&#xff0c;各种企业之间的信息竞争越来越激烈&#xff0c;越来越多的企业对IT人才的需求逐渐增加。很多企业经常感叹每年都在招人&#xff0c;然而每年都不靠谱。一方面要谨慎&#xff0c;担心请神容易送神难。另一方面&#xff0…

红魔8/8Pro/8SPro手机升级安卓14版RedMagic9.0系统+降级出厂救砖刷机

红魔8系列手机也终于引来了安卓14系统的更新&#xff0c;该系统为最新的RedMagic9.0&#xff0c;目前属于公测版本&#xff0c;如果你已经升级了官方UI8.0最新版系统&#xff0c;并且拥有公测资格&#xff0c;可以直接在线检测到最新版UI9.0系统。9.0系统目前对比之前的8.0的版…

西门子:HMI小游戏-灰太狼与喜羊羊

DB块&#xff1a; HMI界面&#xff1a; 实际视频&#xff1a; 抓羊小游戏

day26 java Stream

①Stream 自己不会存储元素。 ②Stream 不会改变源对象。每次处理都会返回一个持有结果的新Stream。 ③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。说明&#xff1a;可以把Stream想象成一条流&#xff08;流水线&#xff09;在流的上面有很多操作&…