MySQL Shell 使用指南

news2024/11/15 0:00:44

前言:

MySQL Shell 是官方提供的 MySQL 周边适配组件,是新一代的高级客户端,在 MySQL 8.0 及其以后的版本得以慢慢推广应用。之前笔者因为 MySQL 8.0 用得比较少,一直没有详细使用过这个工具,近期在捣鼓 MySQL 8.0,趁此机会,一起来学习下吧。

1.MySQL Shell 介绍与安装使用

MySQL Shell 是 MySQL 新一代的高级客户端和代码编辑器,是 Oracle 公司提供的一个交互式命令行工具。对比自带的客户端工具 mysql ,MySQL Shell 不仅可以通过它执行传统的 SQL 语句,还可以使用包括 Python 和 JavaScript 在内的编程语言与服务器进行交互,为用户提供更多的选择和灵活性,而且为 MySQL 的不同产品(如 MySQL Server,MySQL Router,MySQL Innodb Cluster等)提供了一个统一接口。与此同时 MySQL Shell 还集成了很多功能,例如数据库查询和更新,数据库管理,集群管理,插件支持,备份恢复等。

MySQL Shell 经常更新,包括修复和新功能。官方建议始终使用可用的最新版本,最新版本的 MySQL Shell 可以与任何版本的 MySQL 5.7 或 8.0 一起使用。与 mysql 客户端不同的是,MySQL Shell 需要独立安装,下面我们一起来学习安装下。

例如我们在 CentOS 7.9 系统上想安装 MySQL Shell 8.0.36 版本,我们需要进入 MySQL Shell 官方网站:https://dev.mysql.com/downloads/shell/8.0.html 然后选择对应系统及版本即可。有两种安装方式可以选择,一是下载二进制包,然后解压缩并配置好环境变量即能安装成功,二是下载 rpm 包,直接 rpm -ivh 即可安装,两种方法都非常简单方便。

image.png
image.png
image.png

安装完成后,直接 mysqlsh 或者 mysqlsh -uroot -p -h127.0.0.1 -P3306 即可进入交互式命令行。MySQL Shell 可以执行 SQL、JavaScript 或 Python 代码,但一次只能激活一种语言。如果使用 SQL 模式,则语句将作为 SQL 处理,这意味着它们将发送到 MySQL 服务器执行;如果使用 JavaScript 模式,则语句将作为 JavaScript 代码进行处理;如果使用 Python 模式,则语句将作为 Python 代码进行处理。

在交互模式下运行 MySQL Shell 时,通过输入以下命令激活特定语言: \sql 、 \js 、 \py 。在批处理模式下运行 MySQL Shell 时,通过传递以下任一命令行选项来激活特定语言: --js 或 --py --sql 。如果未指定任何模式,则默认模式为 JavaScript。

# 批处理模式下 可用--js --py --sql 指定某种语言
[root@db01 ~]# mysqlsh --sql < /opt/world-db/world.sql

# 交互模式下 使用\sql 、 \js 、 \py 切换语言
[root@db01 ~]# mysqlsh
MySQL Shell 8.0.36

Copyright (c) 2016, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.
Creating a Classic session to 'root@localhost:3306'
Fetching schema names for auto-completion... Press ^C to stop.
Your MySQL connection id is 49
Server version: 8.0.36 MySQL Community Server - GPL
No default schema selected; type \use <schema> to set one.
 MySQL  localhost:3306 ssl  JS > 
 MySQL  localhost:3306 ssl  JS > \sql
Switching to SQL mode... Commands end with ;
Fetching global names for auto-completion... Press ^C to stop.
 MySQL  localhost:3306 ssl  SQL > \js
Switching to JavaScript mode...
 MySQL  localhost:3306 ssl  JS > \py
Switching to Python mode...
 MySQL  localhost:3306 ssl  Py > 

当选择 SQL 语言时,MySQL Shell 与自带的 mysql 客户端用法基本一致,不同的是 MySQL Shell 可以使用 TAB 键进行自动补全,可补全系统关键字、库名、表名、字段名等。并且 MySQL Shell 支持使用 \history 命令显示执行过的历史命令。

image.png

除了 SQL 语言外,MySQL Shell 还支持 JavaScript 和 Python 语言,这使得它超越了传统 SQL 命令行界面的限制,提供了更高级的功能和灵活性。特别是对于熟悉 js 及 Python 的同学,你可以编写 js 或 Python脚本,利用 MySQL Shell 来完成自动化脚本运行。下面我们简单来体验下:

# JavaScript 模式下
# 创建一个测试数据库
 MySQL  localhost:33060+ ssl  JS > var db = session.createSchema('testDB');
 MySQL  localhost:33060+ ssl  JS > print("Database 'testDB' created.");
Database 'testDB' created.
# 创建一个表
 MySQL  localhost:33060+ ssl  JS > var sqlCreateTable = "CREATE TABLE testDB.myTable (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))";
 MySQL  localhost:33060+ ssl  JS > var result = session.sql(sqlCreateTable).execute();
 MySQL  localhost:33060+ ssl  JS > print("Table 'myTable' created.");
Table 'myTable' created.

# Python 模式下
# 创建一个名为 mydb 的数据库
 MySQL  localhost:33060+ ssl  Py > session.run_sql('CREATE DATABASE IF NOT EXISTS mydb')
Query OK, 1 row affected (0.0084 sec)
# 使用 mydb 数据库
 MySQL  localhost:33060+ ssl  Py > session.run_sql('USE mydb')
Query OK, 0 rows affected (0.0008 sec)
# 创建一个名为 users 的表
 MySQL  localhost:33060+ ssl  Py > session.run_sql('CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50), age INT)')
Query OK, 0 rows affected (0.0402 sec)
# 插入一些数据
 MySQL  localhost:33060+ ssl  Py > session.run_sql("INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25), ('Charlie', 35)")
Query OK, 3 rows affected (0.0090 sec)

Records: 3  Duplicates: 0  Warnings: 0
# 查询并打印记录
 MySQL  localhost:33060+ ssl  Py > result = session.run_sql('SELECT * FROM users')
 MySQL  localhost:33060+ ssl  Py > print(result.fetch_all())
[[1, "Alice", 30], [2, "Bob", 25], [3, "Charlie", 35]]

目前 MySQL Shell 比较常用的就是 util 模块了,util 模块提供了一系列实用工具函数,以下是 util 模块中的一些关键功能:

  1. 检查服务器升级: util.checkForServerUpgrade() 函数可以帮助检查MySQL服务器是否可以升级到新版本,并提供相关建议。
  2. 数据导入工具
  • importTable / import_table(JavaScript和Python中的命名差异): 通过传统MySQL协议,允许用户导入数据到 MySQL 表中,提供了一种替代 LOAD DATA INFILE 的方法。
  • importJson / import_json: 利用X插件协议导入JSON格式的数据,提供了更高效的数据导入方式。
  1. 逻辑转储实用程序:在 MySQL Shell 8.0.21 版本中引入了一套新的逻辑转储实用程序,包括 util.dumpInstance(), util.dumpSchemas() 和 util.loadDump()。这些功能支持通过 zstd 或 gzip 压缩进行快速并行创建和恢复 MySQL 数据库的逻辑转储。
2.利用 MySQL Shell 进行备份恢复

下面我们来了解下如何使用 MySQL Shell 进行备份恢复,备份恢复程序需要在 JavaScript 语言下运行,可在批处理命令行执行,也可在交互模式下执行。下图是进行全量备份的截图,显示的信息还是非常全面的,包括备份了多少个数据库对象,多少个用户,备份速度及备份线程数量等等。

image.png

备份完成后,备份目录结果里可以查看结果如下:

image.png

可以看到备份目录下有很多文件,其中主要文件解释:

  • @.done.json:该文件记录了备份结束时间,每个库下每个表的大小等信息。
  • @.json:该文件记录了客户端版本,备份类型(实例、库或表等),元数据信息以及binlog信息(点位及GTID)。
  • @.sql、@.post.sql:这两个文件记录注释信息
  • @.users.sql:数据库用户信息,包含创建用户以及授权的SQL脚本。
  • 库名.json:记录此数据库下各类数据库对象信息,如表、视图、函数、存储过程等。
  • 库名.sql:具体的建库SQL脚本以及创建函数、存储过程脚本。
  • 库名@表名.json:记录对应表的元数据信息,包括库名,表名,字段名,主键等信息。
  • 库名@表名.sql:具体的建表SQL脚本。
  • 库名@表名.triggers.sql:若此表有触发器,则此文件记录触发器创建脚本。
  • 库名@表名@@*.tsv.zst:这是实际的数据文件,.tsv 表示纯文本格式,.zst 表示数据被 zstd 压缩算法压缩。每个表的数据可能会被分割成多个 chunk,每个 chunk 一个文件。
  • 库名@表名@@*.tsv.zst.idx:与数据文件配套的索引文件。
  • 库名@视图名.pre.sql:创建视图预处理脚本,防止上下文依赖。
  • 库名@视图名.sql:真正的创建视图SQL脚本

下面分享几种不同的备份场景:

# util.dumpInstance() 使用场景:
# 备份整个实例(默认4线程 采用zstd 压缩算法)
util.dumpInstance('/mysql_backup/all')

# 指定线程数和压缩算法
util.dumpInstance('/mysql_backup/all_gzip', {threads: 8, compression: 'gzip'})

# 不进行压缩
util.dumpInstance('/mysql_backup/all_none', {threads: 8, compression: 'none'})

# 排除某个库
util.dumpInstance('/mysql_backup/all_excludetest', {excludeSchemas: ['employees']})

# 排除指定库和指定用户
util.dumpInstance('/mysql_backup/all_excludedb', {excludeSchemas: ['mydb','testdb'],excludeUsers: ['root']})

# 指定备份特别库及用户
util.dumpInstance('/mysql_backup/testdb', {includeSchemas: ['testdb'],includeUsers: ['test_user']})

# 排除指定表
util.dumpInstance('/mysql_backup/all_excludetable', {excludeTables: ['employees.salaries']})

# 只备份数据库DDL结构
util.dumpInstance('/mysql_backup/all_nodata', {ddlOnly: true})

# 只备份数据
util.dumpInstance('/mysql_backup/all_noddl', {dataOnly: true})

# 不备份用户
util.dumpInstance('/mysql_backup/all_nouser', {users: false})

# util.dumpSchemas() 使用场景:
# 备份指定库
util.dumpSchemas(['employees', 'sakila'], '/mysql_backup/employees_sakila')

# 备份指定库 并排除特定表
util.dumpSchemas(['employees'], '/mysql_backup/employees_excludetable', {excludeTables: ['employees.salaries','employees.departments']})

# util.dumpTables() 使用场景:
# 备份指定表
util.dumpTables('employees', ['departments', 'dept_emp'], '/mysql_backup/employees_dept')

# 备份指定表的部分数据
util.dumpTables('employees', ['departments'], '/mysql_backup/employees_where', { where: {'employees.departments': "dept_no = 'd001'"} })

// 如果在批处理命令行下执行备份,类似命令如下:
mysqlsh -uroot -pxxxxx -h127.0.0.1 --js -e " util.dumpInstance('/mysql_backup/all_instance') "

相应的,util.loadDump() 用于从之前使用 util.dumpInstance()、util.dumpSchemas() 或 util.dumpTables() 创建的逻辑备份中恢复数据。在执行 util.loadDump() 之前,确保目标 MySQL 实例的 local_infile 系统变量设置为 ON,因为 loadDump 会使用 LOAD DATA LOCAL INFILE 语句来导入数据。

下面一起来学习下如何在不同场景下进行恢复:

# 只指定恢复目录,则会默认全部恢复
util.loadDump('/mysql_backup/all_instance')

# 恢复时指定并行加载的线程数
util.loadDump('/mysql_backup/all_instance', { threads: 8 })

# 恢复时忽略某些警告
util.loadDump('/mysql_backup/all_instance', { continueOnError: true })

# 恢复指定的数据库
util.loadDump('/mysql_backup/all_instance', { includeSchemas: ['mydb'] })

# 恢复指定的表
util.loadDump('/mysql_backup/all_instance', { includeTables: ['world.city'] })

# 排除特定的数据库或表
util.loadDump('/mysql_backup/all_instance', { excludeSchemas: ['db_to_exclude'] })
util.loadDump('/mysql_backup/all_instance', { excludeTables: ['db1.table_to_exclude'] })

# 恢复到不同的 MySQL 实例
mysqlsh -uroot -pxxxxx -hxxxxx --js -e "util.loadDump('/mysql_backup/all_instance')"

其实 MySQL Shell备份恢复的参数还有很多,参考官方文档,部分整理如下:

util.dump 命令使用参考:

  • 备份整个实例(instance):util.dumpInstance(destinationPath, options)
  • 备份整个数据库(schema):util.dumpSchemas([schemas], destinationPath, options)
  • 备份表(table):util.dumpTables(schema, [tables], destinationPath, options)

其中 destinationPath 指的是备份文件存放的路径,options 是备份可选的其他参数,一些主要参数说明如下:

  • defaultCharacterSet:缺省字符集,默认为utf8mb4
  • where: 设置导出数据的条件,可以指定通过where条件来导出表的数据
  • ddlOnly: 仅仅导出表的ddl语句,默认为false
  • dataOnly: 仅仅导出数据,默认false
  • users: 导出用户,缺省为true, (Instance dump utility only)
  • excludeUsers: 排除用户,缺省为false, (Instance dump utility only)
  • includeUsers: 导出时指定包含的用户, (Instance dump utility only)
  • excludeSchemas: 导出时指定排除的DB, (Instance dump utility only)
  • includeSchemas: 导出时指定包含的DB, (Instance dump utility only)
  • excludeTables: 导出时指定排除的表, (Instance dump utility and schema dump utility only)
  • includeTables: 导出时指定包含的表, (Instance dump utility and schema dump utility only)
  • events:是否备份定时器,默认为 true,(Instance dump utility and schema dump utility only)
  • excludeEvents:忽略某些定时器的备份,(Instance dump utility and schema dump utility only)
  • includeEvents:指定某些定时器的备份,(Instance dump utility and schema dump utility only)
  • routines:是否备份函数和存储过程,默认为 true,(Instance dump utility and schema dump utility only)
  • excludeRoutines:忽略某些函数和存储过程的备份,(Instance dump utility and schema dump utility only)
  • includeRoutines:指定某些函数和存储过程的备份,(Instance dump utility and schema dump utility only)
  • triggers:是否备份触发器,默认为 true,(All dump utilities)
  • excludeTriggers:忽略某些触发器的备份,(All dump utilities)
  • includeTriggers:指定某些触发器的备份,(All dump utilities)
  • chunking:是否开启 chunk 级别的并行备份功能,默认为 true
  • bytesPerChunk:每个 chunk 文件的大小,默认 64M
  • threads:并发线程数,默认为 4
  • compression:备份文件的压缩算法,默认为 zstd。也可设置为 gzip 或 none(不压缩)
  • showProgress:是否打印进度信息,如果是 TTY 设备(命令行终端),则为 true,反之,则为 false

util.loadDump 命令使用参考:util.loadDump(dumpPath, options) ,dumpPath 代表备份文件的路径,options 指恢复可选参数。部分参数做以下说明:

  • excludeEvents: 忽略某些定时器的导入
  • excludeRoutines:忽略某些函数和存储过程的导入
  • excludeSchemas: 忽略某些库的导入
  • excludeTables: 忽略某些表的导入
  • excludeTriggers:忽略某些触发器的导入
  • excludeUsers: 忽略某些账号的导入
  • includeEvents: 导入指定定时器
  • includeRoutines:导入指定函数和存储过程
  • includeSchemas: 导入指定库
  • includeTables: 导入指定表
  • includeTriggers:导入指定触发器
  • includeUsers: 导入指定账号
  • loadData: 是否导入数据,默认为 true
  • loadDdl: 是否导入 DDL 语句,默认为 true
  • loadUsers: 是否导入账号,默认为 false。注意,即使将 loadUsers 设置为 true,也不会导入当前正在执行导入操作的用户
  • ignoreExistingObjects: 是否忽略已经存在的对象,默认为 off
  • backgroundThreads: 获取元数据和 DDL文件内容的线程数。备份集如果存储在本地,backgroundThreads 默认和 threads 一致
  • threads: 并发线程数,默认为 4
  • maxBytesPerTransaction:指定单个 LOAD DATA 操作可加载的最大字节数。默认与 bytesPerChunk 一致。这个参数可用来规避大事务
  • skipBinlog: 是否设置 sql_log_bin=0 ,默认 false
  • updateGtidSet: 更新 GTID_PURGED。可设置:off(不更新,默认值), replace(替代目标实例的 GTID_PURGED), append(追加)

总结:

本篇文章主要介绍了 MySQL Shell 的安装与简单使用,利用比较大的篇幅介绍了 MySQL Shell 的备份恢复功能,还有更多高级功能没有介绍到,特别是对 MySQL InnoDB Cluster 和 MySQL InnoDB ReplicaSet 高可用集群的支持。可以看得出,MySQL Shell 确实更加强大和智能,在备份恢复方面确实有很多场景很实用,而且更加快速稳定,肯定会是 DBA 人员的一款得力工具。

参考:

  • https://dev.mysql.com/doc/mysql-shell/8.0/en/
  • https://www.modb.pro/db/1784394111142924288

wx_blog.png

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

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

相关文章

Android Compose 十:常用组件列表 监听

1 去掉超出滑动区域时的拖拽的阴影 即 overScrollMode 代码如下 CompositionLocalProvider(LocalOverscrollConfiguration provides null) {LazyColumn() {items(list, key {list.indexOf(it)}){Row(Modifier.animateItemPlacement(tween(durationMillis 250))) {Text(text…

WPF真入门教程32--WPF数字大屏项目实干

1、项目背景 WPF (Windows Presentation Foundation) 是微软的一个框架&#xff0c;用于构建桌面客户端应用程序&#xff0c;它支持富互联网应用程序&#xff08;RIA&#xff09;的开发。在数字大屏应用中&#xff0c;WPF可以用来构建复杂的用户界面&#xff0c;展示庞大的数据…

《猎杀:对决》是适合什么样的人玩 Mac电脑怎么玩《猎杀:对决》

《猎杀&#xff1a;对决》是一款集合了生存、竞技和恐怖元素的多人在线游戏&#xff0c;自推出以来受到了广大玩家的热爱。本文将详细探讨《猎杀&#xff1a;对决》适合什么样的人玩以及Mac电脑怎么玩《猎杀&#xff1a;对决》。本文将一一解析&#xff0c;帮助你了解这款游戏是…

稍微学学react

文章开始前&#xff0c;先划划水~ 今日份开心&#xff1a; 今天看之前发布的按钮npm包下载量有162次&#xff0c;早知道好好做了 今日份不开心&#xff1a; 爬岗位看到一个整体都挺满意的岗位&#xff0c;公司位置和发展大方向都好喜欢&#xff01;&#xff01;&#xff01;…

本地Nginx的安装到使用

借鉴文章 https://blog.csdn.net/weixin_44005802/article/details/135488448 1.官网下载链接&#xff1a;链接: https://nginx.org/en/download.html 2.将下载的zip包解压后&#xff0c;打开D:…\nginx-1.20.2\conf\nginx.conf&#xff0c;修改server为实际配置。 worker_pr…

Vue 封装elementUI的el-popover

1.封装公共组件 <template><div class"confirm-popover disInlineBlock ml10"><el-popover placement"bottom" v-model"visible" :trigger"triggerType"><div class"confirm-popover-popover"><…

分表策略,你真的分对了?

垂直分表方案 表的记录并不多&#xff0c;但是字段却很长&#xff0c;表占用空间很大&#xff0c;检索表的时候需要执行大量的IO&#xff0c;严重降低了性能。这时需要把大的字段拆分到另一个表&#xff0c;并且该表与原表是一对一的关系。 为什么垂直拆分之后查询性能就变快…

ROG CETRA II 降临2代RGB版 使用体验!

现在Type-C接口的设备越来越多&#xff0c;不仅是台式机开始普及&#xff0c;像NUC、笔记本、Switch、安卓手机等也都是Type-C接口了&#xff0c;所以游戏耳机方面也开始迭代。Type-C还有一个好处就是供电足以撑起降噪处理和RGB灯效&#xff0c;你懂的。今天跟大家分享的就是RO…

基于yolov5s的垃圾桶满溢检测 (附数据集与Coovally操作步骤)

本文主要内容:详细介绍了垃圾桶满溢检测整个过程&#xff0c;从创建数据集到训练模型再到预测结果全部可视化操作与分析。 文末有数据集获取方式&#xff0c;请先看检测效果 现状 在当今城市化高速发展的背景下&#xff0c;随着人口密度的增加和垃圾产生量的急剧攀升&#xff…

linux线程的同步与互斥

前面我们讲了线程的概念以及如何创建与控制线程&#xff0c;接下来我们来对线程的细节与线程之间的问题进行一些讲解&#xff1b; 1.线程的互斥 互斥就是相互排斥&#xff0c;我们可以理解为对立竞争不相容&#xff1b;线程的互斥则是线程之间在对于临界资源竞争时相互排斥的…

Unity | Shader基础知识(番外:了解内置Shader-Standard<一>)

前言 有粉丝给我说&#xff0c;感觉自己内部自带的Shader都还不知道怎么用&#xff0c;希望我讲一下内置Shader。 那我们就从Standard开始吧&#xff01;~ 一、什么是Standard standard是标准着色器&#xff0c;但标准着色器是什么意思&#xff1f; 官方解释&#xff1a;U…

推荐系统三十六式学习笔记:原理篇.内容推荐06|超越标签的内容推荐系统

目录 为什么要做好内容推荐&#xff1f;内容源内容分析和用户分析内容推荐算法总结&#xff1a; 基于内容的推荐系统&#xff0c;有个误区&#xff0c;衡量其性能优劣&#xff0c;评判标准是标签数量够不够。其实标签只是很小一部分。而且即便是标签&#xff0c;衡量质量的方式…

现在有一个生产计划,甲乙丙3个品类共16个产品,生产时间6天,每天甲品类可以生产1张单,乙3张,丙1张,请用MySQL写出H列的效果

现在有一个生产计划&#xff0c;甲乙丙3个品类共16个产品&#xff0c;生产时间6天&#xff0c;每天甲品类可以生产1张单&#xff0c;乙3张&#xff0c;丙1张&#xff0c;请用MySQL写出H列的效果吗&#xff1f; 最终展示结果要求为&#xff1a; 品类产品生产时间开始生产时间…

Nvidia 目前的市值为 3.01 万亿美元,超过苹果Apple

人工智能的繁荣将英伟达的市值推高到足以使其成为全球第二大最有价值的公司。 英伟达已成为全球第二大最有价值的公司。周三下午&#xff0c;这家芯片制造巨头的市值达到 3.01 万亿美元&#xff0c;领先于苹果公司的 3 万亿美元。 喜好儿网AIGC专区&#xff1a;https://heehe…

一文了解UVLED线光源的应用

在机器视觉系统中&#xff0c;光源作为不可或缺的一部分&#xff0c;能够提高目标成像效果&#xff0c;增强检测效果。光源的选择至关重要&#xff0c;选到不合适的会影响成像及检测效果。针对不同的检测对象,不同的形状光源应运而生。我们来看看最UVLED线光源。 下面以CCS的光…

Linux 36.3 + JetPack v6.0@jetson-inference之目标检测

Linux 36.3 JetPack v6.0jetson-inference之目标检测 1. 源由2. detectnet2.1 命令选项2.2 下载模型2.3 操作示例2.3.1 单张照片2.3.2 多张照片2.3.3 视频 3. 代码3.1 Python3.2 C 4. 参考资料 1. 源由 从应用角度来说&#xff0c;目标检测是计算机视觉里面第二个重要环节。之…

【python/pytorch】已解决ModuleNotFoundError: No module named ‘torch‘

【PyTorch】成功解决ModuleNotFoundError: No module named torch 一、引言 在深度学习领域&#xff0c;PyTorch作为一款强大的开源机器学习库&#xff0c;受到了众多研究者和开发者的青睐。然而&#xff0c;在安装和使用PyTorch的过程中&#xff0c;有时会遇到一些问题和挑战…

安全测试 之 安全漏洞: ClickHiJacking

1. ClickHiJacking 定义 点击劫持&#xff08;Click Jacking&#xff09;是一种视觉上的欺骗手段&#xff0c;攻击者通过使用一个透明的iframe&#xff0c;覆盖在一个网页上&#xff0c;然后诱使用户在该页面上进行操作&#xff0c;通过调整iframe页面的位置&#xff0c;可以使…

通用高电子迁移率晶体管(HEMT)的差分微变解算方案及分析型模型

来源&#xff1a;A Difference-Microvariation Solution and Analytical Model for Generic HEMTs&#xff08;TED 22年&#xff09; 摘要 这篇论文提出了一种AlGaN/GaN和AlGaAs/GaAs基高电子迁移率晶体管(HEMT)的分析型直流模型。该模型考虑了高栅偏压下势垒层中积累的电荷。…

Nat Commun|直捣黄龙!空间单细胞组学发现外周血靶细胞亚群的组织落脚点

溃疡性结肠炎&#xff08;Ulcerative colitis&#xff0c;UC&#xff09;是一种慢性炎症性肠道疾病&#xff0c;其特征是免疫介导的黏膜炎症和上皮损伤。目前UC的治疗策略已经从单纯的症状缓解转变为更精准的靶向治疗。Vedolizumab&#xff08;VDZ&#xff09;作为一种抗整合素…