Mysql并发控制和日志

文章目录

  • 一、并发控制
    • 锁机制
    • 事务(transactions)
    • 事务隔离级别
  • 二、日志
    • 事务日志
    • 错误日志
    • 通用日志
    • 慢查询日志
    • 二进制日志 备份
    • 在线查看二进制
    • 离线查看二进制日志


一、并发控制

锁机制

锁类型:

  • 读锁:共享锁,也称为 S 锁,只读不可写(包括当前事务)多个读互不阻塞 ,只能读不能写 别人也能看
  • 写锁:独占锁,排它锁,也称为 X 锁,写锁会阻塞其它事务(不包括当前事务)的读和写 写锁 别人看都看不了

锁的特性:

S 锁和 S 锁是兼容的,X 锁和其它锁都不兼容
举个例子,事务 T1 获取了一个行 r1 的 S 锁,另外事务 T2 可以立即获得行 r1 的 S 锁,此时 T1 和 T2 共同获得行 r1 的 S 锁,此种情况称为锁兼容,但是另外一个事务 T2 此时如果想获得行 r1 的 X 锁,则必须等待 T1 对行 r1 锁的释放,此种情况也称为锁冲突

锁粒度:

  • 表级锁:MyISAM
  • 行级锁:InnoDB

实现:

  • 存储引擎:自行实现其锁策略和锁粒度
  • 服务器级:实现了锁,表级锁,用户可显式请求

分类:

  • 隐式锁:由存储引擎自动施加锁
  • 显式锁:用户手动请求

锁策略:

在锁粒度及数据安全性寻求的平衡机制

update students set teacherid=1 where stuid=6;   
同时在两个窗口执行只有一个能成功

在这里插入图片描述
在这里插入图片描述
加锁

LOCK TABLES 表名 [[AS] alias] 锁的类别  [, tbl_name [[AS] alias] lock_type] ...

锁的类别一共有两种:读锁和写锁。

lock tables students  read;
给表students加读锁。
unlock  tables;
释放锁。注意释放锁是把所有人为加的的锁去除。
flush tables  with  read  lock;   
整个数据库加锁

在这里插入图片描述

事务(transactions)

事务的概念

  • 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
  • 事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
  • 事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。
  • 事务通过事务的整体性以保证数据的一致性。
  • 事务能够提高在向表中更新和插入信息期间的可靠性。

ACID特性: 特别注意
A:atomicity 原子性;整个事务中的所有操作要么全部成功执行,要么全部失败后回滚。
C:consistency一致性;数据库总是从一个一致性状态转换为另一个一致性状态,类似于质量守恒定律。(A有1w ,B 没有 。A给 B转1w ,始终保持A+B=1w。)
I:Isolation隔离性;一个事务所做出的操作在提交之前,是不能为其它事务所见。
D:durability持久性;一旦事务提交,其所做的修改会永久保存于数据库中。

在这里插入图片描述

mysql一般都是自动提交事务。

SELECT @@autocommit;查看是否自动提交事务。

为1自动提交,为0关闭自动提交。
在这里插入图片描述
set autocommit=0
关闭自动提交事务。
在这里插入图片描述

set autocommit=0
begin 开启事务
insert teachers values(null,'wyf',30,'M');
增加一个条目
rollback;回滚,begin之后的命令都不生效。
commit;输入commit命令则将命令执行结果写入磁盘。

注意:
create drop alter 这些命令是立即生效,rollback不可以撤回。
在这里插入图片描述

死锁
两个或多个事务在同一资源相互占用,并请求锁定对方占用的资源的状态。

BEGIN;
#开启事务
update students set classid=10;
#终端1

update students set classid=20;
#终端2

解决死锁问题

SHOW ENGINE INNODB STATUS;查看当前死锁信息。
KILL CONNECTION <connection_id>;;结束指定的数据库连接,从而强制释放该连接持有的锁资源。你需要先通过 SHOW PROCESSLIST 命令获取连接 ID。
一般情况下,数据库引擎会自动解决死锁问题,只需要设置相对应的等待超时时间。

事务隔离级别

select @@tx_isolation;
系统隔离级别,是系统自带的变量。

在这里插入图片描述
如何修改隔离级别?

vim  /etc/my.cnf
transaction-isolation='READ-UNCOMMITTED|READ-COMMITTED|REPEATABLE-READ|SERIALIZABLE'

退出重启即可。

MySQL 支持四种隔离级别,事务隔离级别从上至下更加严格。

隔离级别脏读可重复读幻读加读锁
读未提交可以出现可以出现可以出现
读提交不允许出现可以出现可以出现
可重复读不允许出现不允许出现可以出现
序列化不允许出现不允许出现不允许出现
  • READ UNCOMMITTED 未提交可读
    可读取到未提交数据,产生脏读。即事务A在操作这个时候,事务B可以读取到A修改的数据。
  • READ COMMITTED 提交可读
    可读取到提交数据,但未提交数据不可读,产生不可重复读,即可读取到多个提交数据,导致每次读取数据不一致可读。
  • REPEATABLE READ 幻读
    可重复读,多次读取数据都一致,产生幻读,即读取过程中,即使有其它提交的事务修改数据,仍只能读取到未修改前的旧数据。此为MySQL默认设置。
  • SERIALIZABLE 串读
    可串行化,未提交的读事务阻塞修改事务(加读锁,但不阻塞读事务),或者未提交的修改事务阻塞其它事务的读写(加写锁,其它事务的读,写都不可以执行)。会导致并发性能差。

MVCC和事务的隔离级别:

MVCC(多版本并发控制机制)只在READ COMMITTED和REPEATABLE READ两个隔离级别下工作。其他两个隔离级别都和MVCC不兼容,因为READ UNCOMMITTED总是读取最新的数据行,而不是符合当前事务版本的数据行。而SERIALIZABLE则会对所有读取的行都加锁。

二、日志

MySQL 支持丰富的日志类型,如下:

  • 事务日志:transaction log

    事务日志的写入类型为"追加",因此其操作为"顺序IO";通常也被称为:预写式日志 write ahead logging事务日志文件: ib_logfile0, ib_logfile1

  • 错误日志 error log

  • 通用日志 general log

  • 慢查询日志 slow query log

  • 二进制日志 binary log

  • 中继日志 reley log,在主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取的事件

事务日志

事务日志:transaction log

  • redo log:实现 WAL(Write Ahead Log) ,数据更新前先记录redo log。
  • undo log:保存与执行的操作相反的操作,用于实现rollback。

事务型存储引擎自行管理和使用,建议和数据文件分开存放。如果硬盘损坏,不会所有数据都没有。

show variables like '%innodb_log%';

在这里插入图片描述
1.innodb_log_buffer_size: 该参数设置了 InnoDB 日志缓冲池的大小,默认为 16 MB。这个缓冲池用于存储将要写入磁盘的日志数据。较大的缓冲池可以减少磁盘 I/O 操作,从而提高写入性能。
2.innodb_log_file_size: 该参数设置了每个 InnoDB 日志文件的大小,默认为 48 MB。较大的日志文件可以减少日志文件切换的频率,从而提高性能。但是过大的日志文件会占用更多磁盘空间。
3.innodb_log_files_in_group: 该参数设置了 InnoDB 日志组中的日志文件数量,默认为 2 个。日志组中的多个日志文件可以提高写入性能和容错性。
4.innodb_log_group_home_dir: 该参数指定了 InnoDB 日志文件的存储路径,默认为当前目录 ./。即安装目录。
5.innodb_log_write_ahead_size: 该参数设置了在写入日志之前要预读的字节数,默认为 8192 字节。这有助于减少磁盘 I/O 操作。

事务日志性能优化

select @@innodb_flush_log_at_trx_commit;
日志写入磁盘的默认方式。

修改日志写入磁盘的方式,在配置文件中修改。

innodb_flush_log_at_trx_commit=0|1|2
  • 1 此为默认值,日志缓冲区将写入日志文件,并在每次事务后执行刷新到磁盘。 这是完全遵守ACID特性
  • 0 提交时没有写磁盘的操作; 而是每秒执行一次将日志缓冲区的提交的事务写入刷新到磁盘。
    这样可提供更好的性能,但服务器崩溃可能丢失最后一秒的事务
  • 2 每次提交后都会写入OS的缓冲区,但每秒才会进行一次刷新到磁盘文件中。 性能比0略差一些,但操作系统或停电可能导致最后一秒的交易丢失
    在这里插入图片描述
级别012
安全性较高最高最高
性能最高最差较高

高并发业务行业最佳实践,是第三种配置,使其为2。

1.配置为2和配置为0,性能差异并不大,因为将数据从Log Buffer拷贝到OS cache,虽然跨越用户态与内核态,但毕竟只是内存的数据拷贝,速度很快。

2.配置为2和配置为0,安全性差异巨大,操作系统崩溃的概率相比MySQL应用程序崩溃的概率,小很多,设置为2,只要操作系统不奔溃,也绝对不会丢数据。

错误日志

错误日志

  • mysqld启动和关闭过程中输出的事件信息
  • mysqld运行中产生的错误信息
  • event scheduler运行一个event时产生的日志信息
  • 在主从复制架构中的从服务器上启动从服务器线程时产生的信息

错误文件路径

SHOW GLOBAL VARIABLES LIKE 'log_error' ;

在这里插入图片描述

mysql会将各种警告和错误信息记录到错误日志文件中。

  1. log_error
  • 这个参数指定了错误日志文件的路径和文件名。
  • 默认情况下,MySQL 会将错误日志记录到系统默认的日志目录中。
  1. log_warnings
  • 这个参数控制 MySQL 记录警告信息的级别。
  • 取值范围是 0-3,默认为 2。
  • 当设置为 0 时,MySQL 只会记录严重错误信息。
  • 当设置为 1 或更高时,MySQL 会记录更多的警告信息。
  1. log_error_verbosity
  • 这个参数控制 MySQL 记录错误信息的详细程度。
  • 取值范围是 1-3,默认为 3。
  • 当设置为 1 时,MySQL 只会记录最基本的错误信息。
  • 当设置为 2 时,MySQL 会记录更多的诊断信息。
  • 当设置为 3 时,MySQL 会记录最详细的错误信息。

通用日志

通用日志开启日志功能后,mysql会记录以下信息。

  • 客户端连接和断开连接的时间
  • 每个客户端执行的SQL语句
  • 每个SQL语句的执行时间
  • 每个SQL语句的结果及信息

通用日志可以保存在:file(默认值)或 table(mysql.general_log表)。

通用日志相关设置

general_log=ON|OFF
general_log_file=HOSTNAME.log
log_output=TABLE|FILE|NONE
select @@general_log;  
默认没有开启
set global general_log=1; 
开启
SHOW GLOBAL VARIABLES LIKE 'log_output';默认通用日志存放在文件中。
select @@general_log_file;
通用日志存放的文件路径。

在这里插入图片描述

慢查询日志

MySQL 的慢查询日志(Slow Query Log)是一种用于记录执行时间超过设定阈值的查询语句的日志功能。这对于分析和优化数据库性能非常有帮助。

相关变量:

slow_query_log=ON|OFF
开启或关闭慢查询,支持全局和会话,只有全局设置才会生成慢查询文件
long_query_time=N
慢查询的阀值,单位秒,默认为10s
slow_query_log_file=HOSTNAME-slow.log 
慢查询日志文件
log_slow_filter = admin,filesort,filesort_on_disk,full_join,full_scan,
query_cache,query_cache_miss,tmp_table,tmp_table_on_disk 
上述查询类型且查询时长超过long_query_time,则记录日志
log_queries_not_using_indexes=ON 
不使用索引或使用全索引扫描,不论是否达到慢查询阀值,都记录。
log_slow_verbosity= Query_plan,explain 
当设置了Query_plan 时,慢查询日志会记录查询的执行计划信息。
这些信息包括 MySQL 选择的索引、表扫描类型、join 类型等,可以帮助分析查询性能瓶颈。
当设置了 explain 时,慢查询日志会记录查询语句的 EXPLAIN 结果。

二进制日志 备份

  • 记录导致数据改变或潜在导致数据改变的SQL语句
  • 记录已提交的日志
  • 不依赖于存储引擎类型

MySQL 的二进制日志(Binary Log)是一个非常重要的日志功能,它主要用于以下两个方面:
复制(Replication)

  • 二进制日志记录了数据库的所有变更操作,从主库到从库的复制就是依靠这些日志实现的。
  • 从库通过读取主库的二进制日志来保持数据的一致性。

审计(Audit)

  • 二进制日志可以用于数据库的审计和恢复。
  • 通过分析二进制日志,可以查看数据库中发生的所有变更操作,并根据需要回滚某些操作。

注意:建议二进制日志和数据文件分开存放。

二进制日志记录三种格式

  • 基于"语句"记录:statement,记录语句,默认模式( MariaDB 10.2.3 版本以下 ),日志量较少。
  • 基于"行"记录:row,记录数据,日志量较大,更加安全,建议使用的格式,MySQL8.0默认格式。
  • 混合模式:mixed, 让系统自行判定该基于哪种方式进行,默认模式( MariaDB 10.2.4及版本以上)。
show variables like 'binlog_format';

在这里插入图片描述

二进制日志相关的服务器变量:

sql_log_bin=ON|OFF:
是否记录二进制日志,默认ON,支持动态修改,系统变量,而非服务器选项
log_bin=mysql-bin      默认是关闭
指定文件位置;默认OFF,表示不启用二进制日志功能,上述两项都开启才可以
binlog_format=STATEMENT|ROW|MIXED:
二进制日志记录的格式,mariadb5.5默认STATEMENT
max_binlog_size=1073741824:
单个二进制日志文件的最大体积,到达最大值会自动滚动,默认为1G
说明:文件达到上限时的大小未必为指定的精确值
binlog_cache_size=4m 
此变量确定在每次事务中保存二进制日志更改记录的缓存的大小(每次连接)
max_binlog_cache_size=512m 
限制用于缓存多事务查询的字节大小。
sync_binlog=1|0:
设定是否启动二进制日志即时同步磁盘功能,默认0,由操作系统负责同步日志到磁盘。
expire_logs_days=N:
二进制日志可以自动删除的天数。 默认为0,即不自动删除

注意:
sync_binlog

  • 这个参数控制着二进制日志刷新到磁盘的频率。
  • 当设置为 1 时,每次事务提交后,都会立即将二进制日志刷新到磁盘。
  • 这种设置可以确保即使服务器宕机,也不会丢失最新的二进制日志数据,但会对性能有一定影响。

二进制日志文件格式
有两类文件:
1.日志文件:mysql|mariadb-bin.文件名后缀,二进制格式,如: on.000001,mariadb-bin.000002
2.索引文件:mysql|mariadb-bin.index,文本格式,记录当前已有的二进制日志文件列表

在这里插入图片描述
注意:要给mysql的修改的权限。
在这里插入图片描述
验证是否生成二进制日志:
在这里插入图片描述
在这里插入图片描述

在线查看二进制

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]

SHOW BINLOG EVENTS
这是命令的核心部分,用于显示二进制日志中的事件信息。

IN ‘log_name’
这个参数用于指定要查看的二进制日志文件名称。
如果省略此参数,则默认查看当前正在写入的二进制日志文件。

FROM pos
这个参数用于指定从二进制日志的某个位置开始显示事件。
pos 表示事件在日志文件中的偏移量。

LIMIT [offset,] row_count
这个参数用于限制显示的事件数量。
offset 表示从第几个事件开始显示,row_count 表示最多显示多少个事件。

离线查看二进制日志

mysqlbinlog:二进制日志的客户端命令工具,支持离线查看二进制日志

命令格式:

mysqlbinlog [OPTIONS] log_file…
 --start-position=# 指定开始位置
 --stop-position=#
 --start-datetime=  #时间格式:YYYY-MM-DD hh:mm:ss
 --stop-datetime= 
 --base64-output[=name]
        -v -vvv

二进制日志事件的格式:

# at 328
#151105 16:31:40 server id 1 end_log_pos 431   Query   thread_id=1     
exec_time=0     error_code=0
use `mydb`/*!*/;
SET TIMESTAMP=1446712300/*!*/;
CREATE TABLE tb1 (id int, name char(30))
/*!*/;  
事件发生的日期和时间:151105 16:31:40
事件发生的服务器标识:server id 1
事件的结束位置:end_log_pos 431
事件的类型:Query 
事件发生时所在服务器执行此事件的线程的ID:thread_id=1
语句的时间戳与将其写入二进制文件中的时间差:exec_time=0
错误代码:error_code=0
事件内容:
GTID:Global Transaction ID,mysql5.6以mariadb10以上版本专属属性:GTID

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

方法种类的详解

1.有参无返回值 会出现在什么场景呢&#xff1f;比如我现在需要得到两个数&#xff08;哪里调用&#xff0c;哪里就给我&#xff09;&#xff0c;求和打印或者是打印三个数之和。 语法&#xff1a; 定义的语法&#xff1a; 修饰符 返回类型 方法名&#xff08;形参数1类型 …

[22] Opencv_CUDA应用之 使用背景相减法进行对象跟踪

Opencv_CUDA应用之 使用背景相减法进行对象跟踪 背景相减法是在一系列视频帧中将前景对象从背景中分离出来的过程&#xff0c;它广泛应用于对象检测和跟踪应用中去除背景 背景相减法分四步进行&#xff1a;图像预处理 -> 背景建模 -> 检测前景 -> 数据验证 预处理去除…

【Excel操作】Python Pandas判断Excel单元格中数值是否为空

判断Excel单元格中数值是为空&#xff0c;主要有下面两种方法&#xff1a; 1. pandas.isnull 2. pandas.isna判断Excel不为空&#xff0c;也有下面两种方法&#xff1a; 1. pandas.notna 2. pandas.notnull假设有这样一张Excel的表格 我们来识别出为空的单元格 import panda…

C#的五大设计原则-solid原则

什么是C#的五大设计原则&#xff0c;我们用人话来解释一下&#xff0c;希望小伙伴们能学会&#xff1a; 好的&#xff0c;让我们以一种幽默的方式来解释C#的五大设计原则&#xff08;SOLID&#xff09;&#xff1a; 单一职责原则&#xff08;Single Responsibility Principle…

【PYG】Cora数据集分类任务计算损失,cross_entropy为什么不能直接替换成mse_loss

cross_entropy计算误差方式&#xff0c;输入向量z为[1,2,3]&#xff0c;预测y为[1]&#xff0c;选择数为2&#xff0c;计算出一大坨e的式子为3.405&#xff0c;再用-23.405计算得到1.405MSE计算误差方式&#xff0c;输入z为[1,2,3]&#xff0c;预测向量应该是[1,0,0]&#xff0…

Python + 在线 + 中文文本转为英文语音,语音转为中文文本

模型 平台&#xff1a;https://huggingface.co/ars-语言转文本: pipeline("automatic-speech-recognition", model"openai/whisper-large-v3", device0 )tts-文本转语音&#xff1a;pipeline("text-to-speech", "microsoft/speecht5_tts&q…

Java8新特性之Optional、Lambda表达式、Stream、新日期Api使用总结

标题 Optional类常用Api使用说明Optional API 使用建议 Lambda表达式Lambda 表达式的局限性与解决方案 Stream案例实操优化 Stream 操作 新的日期和时间APILocalDateTime在SpringBoot中的应用 函数式接口&#xff08;Functional&#xff09; Optional博客参考地址1 Stream博客参…

【Linux从入门到放弃】探究进程如何退出以进程等待的前因后果

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《Linux从入门到放弃》 &#x1f466;个人简介&#xff1a;一名双非编程菜鸟&#xff0c;在这里分享自己的编程学习笔记&#xff0c;欢迎大家的指正与点赞&#xff0c;谢谢&#xff01; 进…

【C++】STL-priority_queue

目录 1、priority_queue的使用 2、实现没有仿函数的优先级队列 3、实现有仿函数的优先级队列 3.1 仿函数 3.2 真正的优先级队列 3.3 优先级队列放自定义类型 1、priority_queue的使用 priority_queue是优先级队列&#xff0c;是一个容器适配器&#xff0c;不满足先进先出…

pdf拆分,pdf拆分在线使用,pdf拆分多个pdf

在数字化的时代&#xff0c;pdf文件已经成为我们日常办公、学习不可或缺的文档格式。然而&#xff0c;有时候我们可能需要对一个大的pdf文件进行拆分&#xff0c;以方便管理和分享。那么&#xff0c;如何将一个pdf文件拆分成多个pdf呢&#xff1f;本文将为你推荐一种好用的拆分…

监控平台zabbix介绍与部署

目录 1.为什么要做监控 2.zabbix是什么&#xff1f; 3.zabbix 监控原理 4.Zabbix 6.0 新特性 5.Zabbix 6.0 功能组件 6.部署zabbix 6.1 部署 Nginx PHP 环境并测试 6.2 部署数据库 6.3 向数据库导入 zabbix 数据 6.4 编译安装 zabbix Server 服务端 6.5 修改 zabbix…

中小企业如何防止被查盗

在当前的商业环境中&#xff0c;小企业面临诸多挑战&#xff0c;其中之一便是如何在有限的预算内满足日常运营的技术需求。由于正版软件的高昂成本&#xff0c;一些小企业可能会选择使用盗版软件来降低成本。 我们联网之后存在很多风险&#xff0c;你可以打开自己的可以联网的电…

【面试系列】机器学习工程师高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…

Java--创建对象内存分析

1.如图所示&#xff0c;左边为一个主程序&#xff0c;拥有main方法&#xff0c;右边定义了一个Pet类&#xff0c;通过debug不难看出&#xff0c;当启动该方法时&#xff0c;有以下该步骤 1.运行左边的实例化Pet类对象 2.跳转至右边定义Pet类的语句 3.跳回至左边获取Pet类基本属…

代码生成器使用指南,JeecgBoot低代码平台

JeecgBoot 提供强大的代码生成器&#xff0c;让前后端代码一键生成&#xff0c;实现低代码开发。支持单表、树列表、一对多、一对一等数据模型&#xff0c;增删改查功能一键生成&#xff0c;菜单配置直接使用。 同时提供强大模板机制&#xff0c;支持自定义模板&#xff0c;目…

【bug报错已解决】ERROR: Could not find a version that satisfies the requirement

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析 二、解决方法2.1 方法一2.2 方法二 三、总结 引言 有没有遇到过那种让人…

JSON JOLT常用示例整理

JSON JOLT常用示例整理 1、什么是jolt Jolt是用Java编写的JSON到JSON转换库&#xff0c;其中指示如何转换的"specification"本身就是一个JSON文档。以下文档中&#xff0c;我统一以 Spec 代替如何转换的"specification"json文档。以LHS(left hand side)代…

kaggle量化赛金牌方案(第七名解决方案)

获奖文章(第七名解决方案) 致谢 我要感谢 Optiver 和 Kaggle 组织了这次比赛。这个挑战提出了一个在金融市场时间序列预测领域中具有重大和复杂性的问题。 方法论 我的方法结合了 LightGBM 和神经网络模型,对神经网络进行了最少的特征工程。目标是结合这些模型以降低最终…

arco disign vue 日期组件的样式穿透

问题描述: 对日期组件进行样式穿透. 原因分析: 如图,日期组件被展开时它默认将dom元素挂载到body下, 我们的页面在idroot的div 里层, 里层想要穿透外层是万万行不通的. 解决问题: 其实官网提供了参数,但是并没有提供例子, 只能自己摸索着过河. 对于日期组件穿透样式,我们能…

收集了很久的全网好用的磁力搜索站列表分享

之前找资源的时候&#xff0c;收集了一波国内外大部分主流的磁力链接搜索站点。每一个站可能都有对应的优缺点&#xff0c;多试试&#xff0c;就能知道自己要哪个了。 全网好用的磁力链接 大部分的时候&#xff0c;我们用国内的就可以了&#xff0c;速度块&#xff0c;而且不…