当前位置: 首页 > news >正文

MySQL 9从入门到性能优化-二进制日志

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客

《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

MySQL9数据库技术_夏天又到了的博客-CSDN博客

二进制日志主要记录MySQL数据库的变化,以一种有效的格式并且是事务安全的方式包含更新日志中可用的所有信息。二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的语句。语句以“事件”的形式保存,描述数据的更改。此外,二进制日志还包含每个更新数据库的语句的执行时间信息。

二进制日志不包含没有修改任何数据的语句。如果想要记录所有语句(例如,为了识别有问题的查询),需要使用通用查询日志。使用二进制日志的主要目的是最大可能地恢复数据库,因为二进制日志包含备份后进行的所有更新。本节将介绍二进制日志的相关内容。

12.2.1  启动和设置二进制日志

默认情况下,二进制日志是开启的,可以通过修改MySQL的配置文件来启动和设置二进制日志。

在my.ini中配置文件中的[mysqld]组下面有关于二进制日志的设置:

log-bin [=path/ [filename] ]

log-bin定义开启二进制日志;path表明日志文件所在的目录路径;filename指定日志文件的名称,如文件的全名为“filename.000001”“filename.000002”等。除此之外,还有一个名称为“filename.index”的文件,文件内容为所有日志的清单,可以使用记事本打开该文件。

添加以下几个参数与参数值:

[mysqld]
log-bin
expire_logs_days = 10
max_binlog_size = 100M
  • expire_logs_days定义MySQL清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示不自动删除。当MySQL启动或刷新二进制日志时,操作系统可能会删除过期的二进制日志文件。
  • max_binlog_size定义单个文件的大小限制,如果二进制日志写入的内容大小超出了给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将该变量设置为大于1GB或小于4096B,默认值是1GB。

添加完毕之后,关闭并重新启动MySQL服务进程,即可打开二进制日志,然后可以通过SHOW VARIABLES语句来查询日志设置。

【例12.1】使用SHOW VARIABLES语句查询日志设置,执行的语句及结果如下:

mysql> SHOW VARIABLES LIKE 'log_%' ;
+--------------------------------------+-----------------------------------------+
|Variable_name                         | Value                                          |
+--------------------------------------+-----------------------------------------+
|log_bin                               | ON                                              |
|log_bin_basename                      | D:\ProgramData\MySQL\MySQL Server 9.0\Data\X0NHUNO7YDZVSSI-bin           |
|log_bin_index                         |D:\ProgramData\MySQL\MySQL Server 9.0\Data\X0NHUNO7YDZVSSI-bin.index       |
|log_bin_trust_function_creators       |OFF                                           |
|log_bin_use_v1_row_events             | OFF                                               |
|log_error| .\X0NHUNO7YDZVSSI.err      |
|log_error_services                    |log_filter_internal;log_sink_internal       |
|log_error_suppression_list            |                                                   |
|log_error_verbosity                   |2                                                 |
|log_output                            | FILE                                             |
|log_queries_not_using_indexes         |OFF                                              |
|log_slave_updates                     |ON                                               |
|log_slow_admin_statements             |OFF                                              |
|log_slow_slave_statements             |OFF                                              |
|log_statements_unsafe_for_binlog      |ON                                           |
|log_throttle_queries_not_using_indexes|0                                     |
|log_timestamps                        | UTC                                              |
+--------------------------------------+-----------------------------------------+

通过上面的查询结果可以看出,log_bin变量的值为ON,表明二进制日志已经打开。MySQL重新启动之后,读者可以在自己的计算机上的MySQL数据文件夹下面看到新生成的文件后缀为“.000001”和“.index”的两个文件,文件名称为默认主机名称。例如,在笔者的计算机上,文件名称为“X0NHUNO7YDZVSSI-bin.000001”和“X0NHUNO7YDZVSSI-bin.index”。

 数据库文件最好不要与日志文件放在同一个磁盘上,这样当数据库文件所在的磁盘发生故障时,可以使用日志文件恢复数据。

12.2.2  查看二进制日志

MySQL二进制日志是经常用到的,它存储了所有的变更信息。当MySQL创建二进制日志文件时,先创建一个以“filename”为名称、以“.index”为后缀的文件,再创建一个以“filename”为名称、以“.000001”为后缀的文件。MySQL服务重新启动一次,以“.000001”为后缀的文件会增加一个,并且后缀名加1递增;如果日志长度超过了max_binlog_size的上限(默认是1GB),就会创建一个新的日志文件。

SHOW BINARY LOGS语句可以查看当前的二进制日志文件的个数及其名称。MySQL二进制日志并不能直接查看,如果要查看日志内容,可以使用mysqlbinlog命令。

【例12.2】使用SHOW BINARY LOGS查看二进制日志文件的个数及其名称,SQL语句  如下:

mysql> SHOW BINARY LOGS;
+----------------------------+-----------+ -----------+
| Log_name                   | File_size | Encrypted  +
+----------------------------+-----------+ -----------+
| X0NHUNO7YDZVSSI-bin.000001 |     178   | No         |
+----------------------------+-----------+ -----------+
1 row in set (0.00 sec)

可以看到,当前只有一个二进制日志文件。日志文件的个数与MySQL服务启动的次数相同。每启动一次MySQL服务,就会产生一个新的日志文件。

【例12.3】使用mysqlbinlog查看二进制日志,SQL语句如下:

C:\> mysqlbinlog D:/mysql/log/binlog.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#190130 15:27:48 server id 1  end_log_pos 107   Start: binlog v 4, server v 9.0.1-log created 160330
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
9JBcTg8BAAAAZwAAAGsAAAABAAQANS41LjEzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAAAAAAAAAAD0kFxOEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
# at 107
#190330 15:34:17 server id 1  end_log_pos 175   Query   thread_id=2     exec_time=0     
error_code=0
SET TIMESTAMP=1314689657/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, 
@@session
SET @@session.sql_mode=0/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_
offset=1/*!*/;
/*!\C gb2312 *//*!*/;
SET @@session.character_set_client=24,@@session.collation_connection=24,
@@session.collation_server=24/
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 175
#190330 15:34:17 server id 1  end_log_pos 289   Query   thread_id=2     exec_time=0     
error_code=0
use test/*!*/;
SET TIMESTAMP=1314689657/*!*/;
UPDATE fruits set f_price = 5.00  WHERE f_id = 'a1'
/*!*/;
# at 289
#190330 15:34:17 server id 1  end_log_pos 316   Xid = 14
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

这是一个简单的日志文件,记录了一些用户的操作。从文件内容中可以看到,用户对表fruits进行了更新操作,语句为“UPDATE fruits set f_price = 5.00  WHERE f_id = 'a1';”。

12.2.3  删除二进制日志

MySQL的二进制日志文件可以配置为自动删除,但也提供了安全的手动删除二进制日志文件的方法:RESET MASTER删除所有的二进制日志文件;PURGE MASTER LOGS只删除部分二进制日志文件。本小节将介绍这两种删除二进制日志文件的方法。

1. 使用RESET MASTER语句删除所有二进制日志文件

RESTE MASTER语法如下:

RESET MASTER;

执行完该语句后,所有二进制日志文件将被删除,MySQL会重新创建二进制日志文件,新的日志文件扩展名将重新从000001开始编号。

2. 使用PURGE MASTER LOGS语句删除指定二进制日志文件

PURGE MASTER LOGS 语法如下:

PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'

第一种方法指定文件名,执行该语句将删除文件编号比指定文件编号小的所有二进制日志文件。第二种方法指定日期,执行该语句将删除指定日期以前的所有二进制日志文件。

【例12.4】使用PURGE MASTER LOGS删除创建时间比X0NHUNO7YDZVSSI-bin.000003早的所有二进制日志文件。

为了演示语句的操作过程,准备多个日志文件,读者可以对MySQL服务进行多次重新启动。例如,这里有3个二进制日志文件:

mysql> SHOW BINARY LOGS;
+----------------------------+-----------+ -----------+
| Log_name                   | File_size | Encrypted  +
+----------------------------+-----------+------------+
| X0NHUNO7YDZVSSI-bin.000001 |     178   | No         |
| X0NHUNO7YDZVSSI-bin.000002 |     641   | No         |
| X0NHUNO7YDZVSSI-bin.000003 |     345   | No         |
+----------------------------+-----------+------------+
3 rows in set (0.00 sec)

执行删除命令:

mysql> PURGE MASTER LOGS TO " X0NHUNO7YDZVSSI-bin.000003";
Query OK, 0 rows affected (0.07 sec)

执行完成后,使用SHOW binary logs语句查看二进制日志:

mysql> SHOW binary logs;
+----------------------------+-----------+
| Log_name                   | File_size |
+----------------------------+-----------+
| X0NHUNO7YDZVSSI-bin.000003 |     345   |
+----------------------------+-----------+
1 rows in set (0.00 sec)

可以看到,X0NHUNO7YDZVSSI-bin.000001、X0NHUNO7YDZVSSI-bin 000002两个二进制日志文件被删除了。

【例12.5】使用PURGE MASTER LOGS删除2024年7月30日前创建的所有二进制日志文件,SQL语句及结果如下:

mysql> PURGE MASTER LOGS BEFORE '20240730';
Query OK, 0 rows affected (0.05 sec)

语句执行之后,2024年7月30日之前创建的二进制日志文件都将被删除,但2024年7月30日的日志会被保留(读者可根据自己计算机中创建日志的时间修改命令参数)。使用mysqlbinlog可以查看指定日志的创建时间,如【例12.3】所示,部分日志内容如下:

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#240730 15:27:48 server id 1  end_log_pos 107   Start: binlog v 4, server v 9.0.1-log created 160330
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '

其中,240730为日志创建的时间,即2024年7月30日。

12.2.4  使用二进制日志恢复数据库

如果MySQL服务器启用了二进制日志,那么当数据库意外丢失数据时,可以使用mysqlbinlog工具从指定的时间点开始(例如,最后一次备份),直到现在或另一个指定的时间点的日志中恢复数据。

要想使用二进制日志恢复数据,需要知道当前二进制日志文件的路径和文件名,一般可以从配置文件(my.cnf或者my.ini,文件名取决于MySQL服务器的操作系统)中找到路径。

mysqlbinlog恢复数据的语法如下:

mysqlbinlog [option] filename |mysql –uuser -ppass

option是一些可选的选项,filename是日志文件名。比较重要的两对option参数是--start-date与--stop-date、--start-position与--stop-position。--start-date与--stop-date可以指定恢复数据库的起始时间点和结束时间点。--start-position与--stop-position可以指定恢复数据库的开始位置和结束位置。

【例12.6】使用mysqlbinlog恢复MySQL数据库到2024年7月30日15:27:48时的状态,执行命令及结果如下:

mysqlbinlog --stop-date="2024-07-30 15:27:48" D:\mysql\log\binlog\ X0NHUNO7YDZVSSI-bin.000003 | mysql –uuser –ppass

该命令执行成功后,会根据X0NHUNO7YDZVSSI-bin.000003日志文件恢复2024年7月30日15:27:48以前的所有操作。这种方法对于因意外操作而导致的数据丢失非常有效,比如因操作不当误删了数据表。

12.2.5  暂时停止二进制日志功能

如果在MySQL的配置文件中配置启动了二进制日志,那么MySQL会一直记录二进制日志。如果想停止记录二进制日志,可以修改配置文件,但是需要重启MySQL数据库。为此,MySQL提供了暂时停止记录二进制日志的功能:通过SET SQL_LOG_BIN语句可以使MySQL暂停或者启动二进制日志。

SET SQL_LOG_BIN的语法如下:

SET sql_log_bin = {0|1}

执行如下语句将暂停记录二进制日志:

mysql> SET sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)

执行如下语句将恢复记录二进制日志:

mysql> SET sql_log_bin = 1;
Query OK, 0 rows affected (0.00 sec)

相关文章:

MySQL 9从入门到性能优化-二进制日志

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

Cloudlog delete_oqrs_line 未授权SQL注入漏洞复现

0x01 产品简介 Cloudlog 是一个自托管的 PHP 应用程序,可让您在任何地方记录您的业余无线电联系人。使用PHP和MySQL构建的基于Web的业余无线电记录应用程序支持从HF到微波的一般站记录任务 0x02 漏洞概述 Cloudlog delete_oqrs_line 接口存在未授权SQL注入漏洞,未经身份验…...

【Linux】解锁软硬链接奥秘,高效动静态库管理的实战技巧

软硬连接和动静态库 1. 软链接1.1. 概念1.2. 特点1.3. 应用场景 2. 硬链接2.1. 概念2.2. 硬链计数2.3. 特点2.4. 应用场景 3. 动静态库3.1 库存在的原因3.2. 静态库制作与使用3.2.1 打包3.2.2. 使用 3.3. 动态库制作与使用3.3.1. 打包3.3.2. 使用 4. 解决动态库查不到的4种方法…...

【设计模式】Python 后端开发中的工厂模式设计与实现

Python 后端开发中的工厂模式设计与实现 1. 引言 在后端开发中,如何设计一套易于扩展、可维护且灵活的系统架构是开发者面临的重要课题。设计模式在这一过程中扮演了至关重要的角色,尤其是在面向对象编程中,它提供了大量解决重复问题的标准…...

划重点!入门安全测试,这几点要注意!

朋友们,今天我们一起来学习下如何做安全测试。 那么首先,什么是安全测试? 安全测试是评估和验证软件系统、应用程序或网络的安全性和强度的过程。其目标是发现和修复潜在的安全漏洞和脆弱性,以确保系统能够抵御恶意攻击和未授权…...

mysql 09 独立表空间结构

表空间中的页实在是太多了,为了更好的管理这些页面,设计 InnoDB 的大叔们提出了 区 (英文名: extent )的概念。对于16KB的页来说,连续的64个页就是一个 区 ,也就是说一个区默认占用1MB空间大小。…...

linux 虚拟环境下源码安装DeepSpeed

第一步:创建虚拟环境: conda create -n deepspeed python3.10 第二步:进入虚拟环境,安装Pytorch 2.3.1 # CUDA 12.1 conda install pytorch2.3.1 torchvision0.18.1 torchaudio2.3.1 pytorch-cuda12.1 -c pytorch -c nvidia 第…...

常见八大排序算法

今天我们带来数据结构中常见的8大排序算法。 排序算法平均时间复杂度最好情况最坏情况空间复杂度稳定性冒泡排序O(n方)O(n方)O(n方)O(1)稳定插入排序O(n方)O(n方)O(n方)O(1)稳定选择排序O(n方)O(n方)O(n方)O(1)不稳定希尔排序O(n1.3方到1,5方)O(n)O(n方)O(1)不稳定堆排序O(n lo…...

汽车免拆诊断案例 | 2022款大众捷达VS5车行驶中挡位偶尔会锁在D3挡

故障现象  一辆2022款大众捷达VS5汽车,搭载EA211发动机和手自一体变速器,累计行驶里程约为4.5万km。该车行驶中挡位偶尔会锁在D3挡,车速最高约50 km/h,且组合仪表上的发动机故障灯和EPC灯异常点亮。 故障诊断  用故障检测仪检…...

Linux之HugePage的原理与使用

Linux之HugePage的原理与使用 虚拟地址与物理地址虚拟地址物理地址虚拟地址与物理地址的转换 HugePage的概念Linux使用HugePage创建HugePage在程序中使用HugePage 总结 虚拟地址与物理地址 在研究HugePage之前,首先需要明白虚拟地址和物理地址的概念。在计算机系统…...

一步步优化Redis实现分布式锁

分布式锁概念 在多线程的程序里,为了避免同时操作一个共享变量产生数据问题,会加一个互斥锁,以确保共享变量的正确性,使用范围是同一个进程。 那如果是多个进程,需要同时操作一个共享资源,如何互斥呢&…...

C++进阶——二叉搜索树

目录 一、基本概念 二、性能分析 三、模拟实现 四、使用场景 1.key搜索场景 2.key/value搜索场景 一、基本概念 二叉搜索树(Binary Search Tree),看名字就知道,是可以用来搜索数据的一种二叉树。 它可以是空树(一个数据都…...

Require:业界优秀的HTTP管理方案。

方案异步JDK额外依赖特点HttpURLConnection 【优点】Java内置,简单易用。对于简单的HTTP请求和响应处理非常合适。 【缺点】功能相对较少,不支持现代特性(如异步请求、连接池等)。API相对繁琐,处理复杂请求时代码冗长。…...

装饰模式(Decorator Pattern)在 Go 语言中的应用

文章目录 引言什么是装饰模式?在Go语言中的应用定义接口实现具体逻辑创建装饰器使用装饰器 装饰模式 vs 中间件装饰模式中间件区别 总结 引言 在软件开发中,设计模式是解决常见问题的模板。装饰模式(Decorator Pattern)是一种结构…...

Windows系统部署redis自启动服务

文章目录 引言I redis以本地服务运行(Windows service)使用MSI安装包配置文件,配置端口和密码II redis服务以终端命令启动缺点运行redis-server并指定端口和密码III 知识扩展确认redis-server可用性Installing the Service引言 服务器是Windows系统,所以使用Windows不是re…...

34岁IT男的职场十字路口:是失业预警,还是转型契机?

在信息技术这片充满机遇与挑战的广袤领域,34岁,一个看似正值壮年却暗藏危机的年龄,成为了许多IT男性不得不面对的职场考验。当“34岁现象”逐渐凸显,我们不禁要问:在这个快速变化的时代,34岁的IT男&#xf…...

复试经验分享《三、计算机学科专业基础综合》- 数据结构篇

复试经验分享 三、计算机学科专业基础综合 3.1 数据结构 3.1.1 概念 时间复杂度 时间复杂度是指执行算法所需要的计算工作量一般情况下,按照基本操作次数最多的输入来计算时间复杂度,并且多数情况下我们去最深层循环内的语句所描述的操作作为基本操作…...

数学建模算法与应用 第16章 优化与模拟方法

目录 16.1 线性规划 Matlab代码示例:线性规划求解 16.2 整数规划 Matlab代码示例:整数规划求解 16.3 非线性规划 Matlab代码示例:非线性规划求解 16.4 蒙特卡洛模拟 Matlab代码示例:蒙特卡洛模拟计算圆周率 习题 16 总结…...

windows下安装、配置neo4j并服务化启动

第一步:下载Neo4j压缩包 官网下载地址:https://neo4j.com/download-center/ (官网下载真的非常慢,而且会自己中断,建议从以下链接下载) 百度网盘下载地址:链接:https://pan.baid…...

【JVM】—深入理解G1回收器—回收过程详解

深入理解G1回收器—回收过程详解 ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 文章目录 深入理解G1回收…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

【网络安全】开源系统getshell漏洞挖掘

审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...