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

Fedora41安装MySQL8.4.4

Fedora41安装MySQL8.4.4

  • Fedora41用yum仓库安装MySQL8.4.4 笔记250310
      • 下载安装
      • 启动`mysqld`服务
      • 查看生成的初始密码 , 用初始密码登录
      • 登录后,必须修改初始密码才能执行其它操作
        • 可选设置降低密码强度要求, 使用简单密码
          • 降低 validate_password 组件对密码强度的要求
        • 用`SET GLOBAL`命令来设置
        • 可选: 卸载 validate_password 组件, 可将密码设为空, 实现无密码登录
      • 创建远程用户
        • 创建远程用户
        • 创建远程root的语句模板
      • 开放 firewalld 防火墙的3306端口
      • 删除用户 `DROP USER 'u'@'h'`
      • 用脚本安装
        • Fedora41一步安装MySQL8.4.4并且第一次登录
        • Fedora41一步安装MySQL8.4.4并且将root@localhost免密, 创建免密的remote用户, 开放3306端口
  • 补充
      • validate_password插件 和 validate_password组件
        • 查看 validate_password 组件或插件的相关MySQL系统变量
        • 安装卸载 validate_password 组件
        • 安装卸载 validate_password 插件
        • 对比 validate_password 插件和组件的系统变量, "_"换成了"."
    • MySql8.4介绍
    • Mysql8.4 与 Mysql8.0 对比
    • validate_password.changed_characters_percentage

Fedora41用yum仓库安装MySQL8.4.4 笔记250310

下载安装

下载页面

MySQL Community Downloads 多种社区产品选择

MySQL Community 社区版安装包的下载地址—https://dev.mysql.com/downloads/mysql/,


YUM仓库安装MySQL的yum配置文件的下载地址—https://dev.mysql.com/downloads/repo/yum/


在这里插入图片描述

页面会随时间而变化

Fedora41安装MySQL8.4.4对应的链接是

https://dev.mysql.com/get/mysql84-community-release-fc41-1.noarch.rpm

可以下载 mysql84-community-release-fc41-1.noarch.rpm 后用 rpm -ivhyum install 安装仓库

也可以直接用 rpm -ivhyum install 从网络下载并安装

sudo rpm -ivh https://dev.mysql.com/get/mysql84-community-release-fc41-1.noarch.rpm
sudo yum install -y https://dev.mysql.com/get/mysql84-community-release-fc41-1.noarch.rpm

更新yum

sudo yum update

此时就能用 yum 安装 mysql-server 了, 自动包含 mysql-client

sudo yum install -y mysql-server

或者

sudo yum install -y mysql-community-server.x86_64

效果一样



启动mysqld服务

Fedora,CentOS的mysql服务是mysqld , Ubuntu是mysql

  • 启动CentOS7的MySQL8.0用的是 systemctl start mysqld
  • 启动Ubuntu20.04的MySQL8.0用的是 systemctl start mysql
sudo systemctl enable mysqld --now

或者

sudo systemctl enable mysqld
sudo systemctl start mysqld

查看生成的初始密码 , 用初始密码登录

Ubuntu20.04 下用apt安装的mysql8.0.30默认不带validate_password组件,可以使用空密码
Fedora,CentOS7下用yum安装的mysql8.0.30带validate_password组件,默认要大小写字母数字特殊符号一起用,还有长度要求,体验很差
密码可能以括号开头结尾

生成的初始密码在 /var/log/mysqld.log 日志文件中
可能包含冒号,但不会包含冒号加空格, 所以可以用 : 冒号空格进行拆分

sudo awk -F': ' '/A temporary password is generated for/{print $2}' /var/log/mysqld.log

查看密码所在行

sudo grep 'temporary password' /var/log/mysqld.log;

本地登录不用开防火墙端口,
远程登陆开放端口3306:

sudo firewall-cmd --zone=$(sudo firewall-cmd --get-default-zone) --add-port=3306/tcp --permanent ;
sudo systemctl restart firewalld ;

用初始密码登录

手动输入密码

mysql -uroot -p

或者直接在-p后粘贴密码
用复制粘贴的话,因为有特殊字符,所以要加上单引号和双引号,最好用 单引号
并且-p单双引号之间不能有空格

mysql -uroot -p':id(.aZr<1Tt'

登录后,必须修改初始密码才能执行其它操作

必须先更改为另一个强密码, 可以不用记住它, 设好后, 降低密码强度, 或者卸载validate_password这个组件
设置密码方法1

ALTER USER root@localhost IDENTIFIED BY 'ABCDEFGhijklmn1234567!!!';

设置密码方法2

SET PASSWORD='ABCDEFGhijklmn1234567!!!';

可选设置降低密码强度要求, 使用简单密码

降低密码强度要求的方法有:

  • 设置validate_password的相关选项来降低密码强度要求
  • 卸载validate_password
降低 validate_password 组件对密码强度的要求

查看原始的 validate_password 各属性默认值

SHOW VARIABLES LIKE '%validate_password%';

结果

mysql> SHOW VARIABLES LIKE '%validate_password%';
+-------------------------------------------------+--------+
| Variable_name                                   | Value  |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0      |
| validate_password.check_user_name               | ON     |
| validate_password.dictionary_file               |        |
| validate_password.length                        | 8      |
| validate_password.mixed_case_count              | 1      |
| validate_password.number_count                  | 1      |
| validate_password.policy                        | MEDIUM |
| validate_password.special_char_count            | 1      |
+-------------------------------------------------+--------+
8 rows in set (0.02 sec)

其中

  • validate_password.changed_characters_percentage 是msqyl8.0.34的新属性, 取值0-100百分比,表示修改密码时,新密码与旧密码的不相同程度要求
  • validate_password.check_user_name 检查密码是否包含用户名
  • validate_password.dictionary_file 指定自定义弱密码字典文件路径(仅 STRONG 策略生效)。
  • validate_password.length 密码的最小长度。
  • validate_password.mixed_case_count 密码中至少包含的大写和小写字母总数。(MEDIUM及以上策略生效)。
  • validate_password.number_count 密码中至少包含的数字数量。(MEDIUM及以上策略生效)。
  • validate_password.policy 策略, 可选: LOW(0) , MEDIUM(1) , STRONG(2)
    • LOW0: 仅检查密码长度。
    • MEDIUM1:(默认):检查长度、大小写字母、数字和特殊字符。
    • STRONG2: 在 MEDIUM 基础上,额外检查密码是否包含弱密码字典中的词汇。
  • validate_password.special_char_count 密码中至少包含的特殊字符数量(MEDIUM及以上策略生效)。
SET GLOBAL命令来设置
  • SET GLOBAL validate_password.policy=LOW; 降低密码复杂度要求
  • SET GLOBAL validate_password.mixed_case_count=0; 最少大小写字符数
  • SET GLOBAL validate_password.number_count=0; 最少数字字符数
  • SET GLOBAL validate_password.special_char_count=0; 最少特殊字符数
  • SET GLOBAL validate_password.check_user_name=OFF; 允许用户名和密码相同
  • SET GLOBAL validate_password.length=0; 设置密码最小长度, 要放到最后设置, 否则可能被其它值影响, 使其没法为0, 可能是4或者2
### 密码策略: 0或LOW是只检查长度  ,  1或MEDIUM是检查长度数字字母特殊字符的个数  ,  2或STRONG是比1多检查字典文件 ;
SET GLOBAL validate_password.policy=LOW;
### 最少大小写字母数
SET GLOBAL validate_password.mixed_case_count=0;
### 最少数字字符数
SET GLOBAL validate_password.number_count=0;
### 最少特殊字符数
SET GLOBAL validate_password.special_char_count=0;
### 是否允许密码包含正反用户名 , 取值ON/OFF
SET GLOBAL validate_password.check_user_name=OFF;
### 密码最小长度, 要放到最后设置,  否则可能被其它值影响, 使其没法为0, 可能是4或者2
SET GLOBAL validate_password.length=0;
### 查看 validate_password 的相关MySQL系统变量
SHOW VARIABLES LIKE '%validate_password%';
可选: 卸载 validate_password 组件, 可将密码设为空, 实现无密码登录

INSTALLUNINSTALL 命令

  • 安装 validate_password 组件
    INSTALL COMPONENT 'file://component_validate_password';

    INSTALL COMPONENT 'file://component_validate_password';
    
  • 卸载 validate_password 卸载
    UNINSTALL COMPONENT 'file://component_validate_password';

     UNINSTALL COMPONENT 'file://component_validate_password';
    

自用的话卸载 validate_password 插件

UNINSTALL COMPONENT 'file://component_validate_password';

然后就能设为空密码😄

ALTER USER root@localhost IDENTIFIED BY '';

SET PASSWORD='';

操作系统的root输入mysql就能直接登录




创建远程用户

创建远程用户

MySQL8 创建用户,设置修改密码,授权

创建一个名为remote的远程用户, remote等效remote'@'%

###  创建一个名为remote的远程用户, remote等效'remote'@'%'
CREATE USER remote IDENTIFIED BY '';

创建一个可以用 Navicat11 登录的远程用户

###   创建一个名为remote的远程用户, remote等效'remote'@'%', 使用mysql5.7旧版密码插件,方便使用Navicat11等登录
CREATE USER remote IDENTIFIED WITH mysql_native_password BY '';

赋予remote所有权限和权力传递的权限,并将root角色授予remote

GRANT ALL ON *.* TO 'remote'@'%' WITH GRANT OPTION; GRANT root@'localhost' TO remote; SET DEFAULT ROLE root@'localhost' TO remote; FLUSH PRIVILEGES;
创建远程root的语句模板

纯字母数字的用户名可以不加单引号,
@及右边省略效果与加上@'%'的效果相同,
root 等效 root@'%' 等效 'root'@'%'

创建root@'%' , 并将 root@'localhost' 的权限授予 root@'%' ,

CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY '密码'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;

创建 root@'%', 并让root@'%'扮演root@'localhost' 的角色 , 并设置为默认角色

CREATE USER IF NOT EXISTS root IDENTIFIED BY '密码'; GRANT root@'localhost' TO 'root'@'%'; SET DEFAULT ROLE root@'localhost' TO 'root'@'%'; FLUSH PRIVILEGES;

权限和角色两者都加持

CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY '密码'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; GRANT root@'localhost' TO 'root'@'%'; SET DEFAULT ROLE root@'localhost' TO 'root'@'%'; FLUSH PRIVILEGES;

权限和角色两者都加持, 无密码

CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY ''; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; GRANT root@'localhost' TO 'root'@'%'; SET DEFAULT ROLE root@'localhost' TO 'root'@'%'; FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON 等效 GRANT ALL ON , 效果同上👆

CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; GRANT root@'localhost' TO 'root'@'%'; SET DEFAULT ROLE root@'localhost' TO 'root'@'%'; FLUSH PRIVILEGES;

'root'@'%'可以写成root@'%'可以写成root , 效果同上👆

CREATE USER IF NOT EXISTS root IDENTIFIED BY ''; GRANT ALL ON *.* TO root WITH GRANT OPTION; GRANT root@'localhost' TO root; SET DEFAULT ROLE root@'localhost' TO root; FLUSH PRIVILEGES;

降低密码强度, 创建用户, 无密码 , 赋予最大权限和root角色, 设置root角色为默认角色, 刷新权限,

--------    降低密码强度,  创建用户, 无密码 , 赋予最大权限和root角色, 设置root角色为默认角色, 刷新权限 --------## 降低密码强度
---- 新旧密码不同度百分比要求,取值0-100, MySQL8.0.34才有
SET GLOBAL validate_password.changed_characters_percentage = 0;
#### 密码策略: 0或LOW是只检查长度  ,  1或MEDIUM是检查长度数字字母特殊字符的个数  ,  2或STRONG是比1多检查字典文件 ;
SET GLOBAL validate_password.policy=LOW;
#### 最少大小写字母数
SET GLOBAL validate_password.mixed_case_count=0;
#### 最少数字字符数
SET GLOBAL validate_password.number_count=0;
#### 最少特殊字符数
SET GLOBAL validate_password.special_char_count=0;
#### 是否允许密码包含正反用户名 , 取值ON/OFF
SET GLOBAL validate_password.check_user_name=OFF;
#### 密码最小长度, 要放到最后设置,  否则可能被其它值影响, 使其没法为0, 可能是4或者2
SET GLOBAL validate_password.length=0;##    创建用户, 无密码 , 赋予最大权限和root角色, 设置root角色为默认角色
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; GRANT root@'localhost' TO 'root'@'%'; SET DEFAULT ROLE root@'localhost' TO 'root'@'%'; 
--    刷新权限
FLUSH PRIVILEGES;

卸载 validate_password 组件, 创建用户, 无密码 , 赋予最大权限和root角色, 设置root角色为默认角色, 刷新权限,

--------    降低密码强度,  创建用户, 无密码 , 赋予最大权限和root角色, 设置root角色为默认角色, 刷新权限 --------##    卸载 validate_password 组件
UNINSTALL COMPONENT 'file://component_validate_password';
##    创建用户, 无密码 , 赋予最大权限和root角色, 设置root角色为默认角色
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY ''; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; GRANT root@'localhost' TO 'root'@'%'; SET DEFAULT ROLE root@'localhost' TO 'root'@'%'; 
--    刷新权限
FLUSH PRIVILEGES;




开放 firewalld 防火墙的3306端口

sudo firewall-cmd --zone=$(sudo firewall-cmd --get-default-zone) --add-port=3306/tcp --permanent ; sudo systemctl restart firewalld ;




删除用户 DROP USER 'u'@'h'

DROP USER root;只会删除'root'@'%' , 不会删除 'root'@'localhost'

DROP USER root;
DROP USER root@'%';
DROP USER 'root'@'%';

DROP USER IF EXISTS root;只会删除'root'@'%' , 不会删除 'root'@'localhost'

DROP USER IF EXISTS root;
DROP USER IF EXISTS root@'%';
DROP USER IF EXISTS 'root'@'%';




用脚本安装

Fedora41一步安装MySQL8.4.4并且第一次登录
#!/bin/bash
sudo rpm -ivh https://dev.mysql.com/get/mysql84-community-release-fc41-1.noarch.rpm
sudo yum install -y mysql-community-server.x86_64
sudo systemctl enable mysqld --now
MysqlInitialTemporaryPassword=`awk -F': ' '/A temporary password is generated for/{print $2}' /var/log/mysqld.log`
MysqlFirstLoginCodeCommand="mysql -uroot -p"$MysqlInitialTemporaryPassword
$MysqlFirstLoginCodeCommand
Fedora41一步安装MySQL8.4.4并且将root@localhost免密, 创建免密的remote用户, 开放3306端口
#!/bin/bash
sudo yum remove -y mariadb;
sudo yum install -y https://dev.mysql.com/get/mysql84-community-release-fc41-1.noarch.rpm
sudo yum install -y mysql-community-server.x86_64
sudo systemctl enable mysqld
sudo systemctl start mysqld
MysqlInitialTemporaryPassword=`sudo awk -F': ' '/A temporary password is generated for/{print $2}' /var/log/mysqld.log`
MysqlFirstLoginCodeCommand="mysql -uroot -p"$MysqlInitialTemporaryPassword
$MysqlFirstLoginCodeCommand
ALTER USER root@localhost IDENTIFIED BY 'ABCDEFGhijklmn1234567!!!';
### 密码策略: 0或LOW是只检查长度  ,  1或MEDIUM是检查长度数字字母特殊字符的个数  ,  2或STRONG是比1多检查字典文件 ;
SET GLOBAL validate_password.policy=LOW;
### 最少大小写字符数
SET GLOBAL validate_password.mixed_case_count=0;
### 最少数字字符数
SET GLOBAL validate_password.number_count=0;
### 最少特殊字符数
SET GLOBAL validate_password.special_char_count=0;
### 是否允许密码包含正反用户名 , 取值ON/OFF
SET GLOBAL validate_password.check_user_name=OFF;
### 密码最小长度, 要放到最后设置,  否则可能被其它值影响, 使其没法为0, 可能是4或者2
SET GLOBAL validate_password.length=0;
### 查看 validate_password 的相关MySQL系统变量
SHOW VARIABLES LIKE '%validate_password%';
SET PASSWORD='';
CREATE USER IF NOT EXISTS remote IDENTIFIED WITH mysql_native_password BY ''; 
GRANT ALL ON *.* TO 'remote'@'%' WITH GRANT OPTION; GRANT root@'localhost' TO remote; SET DEFAULT ROLE root@'localhost' TO remote; FLUSH PRIVILEGES;
exit
sudo firewall-cmd --zone=$(sudo firewall-cmd --get-default-zone) --add-port=3306/tcp --permanent ; sudo systemctl restart firewalld ;
mysql -uremote




补充



validate_password插件 和 validate_password组件

MySQL8.4官方参考手册—密码验证组件—8.4.3 The Password Validation Component
8.4.3.2章节 密码验证选项变量 Password Validation Options and Variables

MySQL8.0官方参考手册—密码验证组件—8.4.3 The Password Validation Component
MySQL5.7官方参考手册—密码验证插件—6.4.3 The Password Validation Plugin

组件和插件

  • MySQL5.7, 用的是 validate_password 插件
  • MySQL8.0, 用的是 validate_password 组件

Ubuntu20.04下用apt安装的MySQL8.0默认没有使用validate_password 插件或组件
CentOS7下用MySQL官方yum仓库安装的MySQL8.0默认启用validate_password 组件
MySQL5.7的 validate_password 插件 在MySQL8.0中任然可以使用,但默认不使用,已过时,未来准备移除

MySQL8.0的 validate_password 组件MySQL5.7 validate_password 插件功能取值
validate_password.check_user_namevalidate_password_check_user_name检查密码与用户名是否相同或相反ON/OFF
validate_password.dictionary_filevalidate_password_dictionary_file检查密码与密码字典字典文件路径
validate_password.lengthvalidate_password_length检查密码长度0至正整数
validate_password.mixed_case_countvalidate_password_mixed_case_count检查密密码大小写字母总数0至正整数
validate_password.number_countvalidate_password_number_count检查密密码数字字符总数0至正整数
validate_password.policyvalidate_password_policy密码策略,检查密码复杂度0、1、2 对应 LOW、MEDIUM、STRONG
validate_password.special_char_countvalidate_password_special_char_count检查密码特殊字符的个数0至正整数

可看到插件变量validate_password之后是下划线_ , 组件变量validate_password之后是点.
插件的变量是相对独立的, 组件的变量被统一在validate_password之下

validate_password.policyvalidate_password_policy 的取值

`validate_password.policy` 和 `validate_password_policy` 的取值效果
`validate_password.policy` 和 `validate_password_policy` 的取值效果
取值效果
0 或者 LOW只检查密码长度
1 或者 MEDIUM检查长度; 数字、小写/大写和特殊字符
2 或者 STRONG长度; 数字、小写/大写和特殊字符;字典文件
取值效果
0 或者 LOW只检查密码长度
1 或者 MEDIUM检查长度; 数字、小写/大写和特殊字符
2 或者STRONG长度; 数字、小写/大写和特殊字符;字典文件
查看 validate_password 组件或插件的相关MySQL系统变量
### 查看 validate_password 的相关MySQL系统变量
SHOW VARIABLES LIKE '%validate_password%';
安装卸载 validate_password 组件

安装 validate_password 组件

### 安装 validate_password 组件
INSTALL COMPONENT 'file://component_validate_password';

卸载 validate_password 组件

### 卸载 validate_password 组件
UNINSTALL COMPONENT 'file://component_validate_password';
安装卸载 validate_password 插件

安装 validate_password 插件

### 安装 validate_password  插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

卸载 validate_password 插件

### 卸载 validate_password  插件
UNINSTALL PLUGIN validate_password;
对比 validate_password 插件和组件的系统变量, “_“换成了”.”

在组件和插件都没安装的情况下, 安装组件,查看相关变量, 安装插件,查看相关变量, 卸载组件, 查看相关变量

mysql> ### 查看 validate_password 的相关MySQL系统变量
mysql> SHOW VARIABLES LIKE '%validate_password%';
Empty set (0.03 sec)mysql> ### 安装 validate_password 组件
mysql> INSTALL COMPONENT 'file://component_validate_password';
Query OK, 0 rows affected (0.08 sec)mysql> ### 查看 validate_password 的相关MySQL系统变量
mysql> SHOW VARIABLES LIKE '%validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)mysql> ### 安装 validate_password  插件
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
Query OK, 0 rows affected, 1 warning (0.09 sec)mysql> ### 查看 validate_password 的相关MySQL系统变量
mysql> SHOW VARIABLES LIKE '%validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
| validate_password_check_user_name    | ON     |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
14 rows in set (0.00 sec)mysql> ### 卸载 validate_password 组件
mysql> UNINSTALL COMPONENT 'file://component_validate_password';
Query OK, 0 rows affected (0.08 sec)mysql> ### 查看 validate_password 的相关MySQL系统变量
mysql> SHOW VARIABLES LIKE '%validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | ON     |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

MySQL validate_password 组件详解
validate_password 是 MySQL 内置的密码策略插件(MySQL 8.0+ 中为组件),用于强制用户设置符合安全要求的密码。以下是其核心功能与配置方法:


1. 核心功能

  • 密码复杂度检查:强制密码包含数字、大小写字母、特殊字符。
  • 密码长度限制:定义密码最小长度。
  • 密码修改限制:限制新旧密码的相似性(如 changed_characters_percentage)。
  • 防止弱密码:拒绝常见弱密码(如 123456password)。

2. 安装与启用
MySQL 8.0+(组件形式)

-- 安装组件
INSTALL COMPONENT 'file://component_validate_password';-- 验证是否启用
SELECT * FROM mysql.component WHERE component_urn LIKE '%validate_password%';

MySQL 5.7(插件形式)

-- 安装插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';-- 验证是否启用
SHOW PLUGINS LIKE 'validate_password%';

3. 配置参数详解
通过以下系统变量控制密码策略:

参数名默认值说明
validate_password.policyMEDIUM密码策略等级:LOW/MEDIUM/STRONG
validate_password.length8密码最小长度(可覆盖策略等级的长度要求)。
validate_password.mixed_case_count1密码中至少包含的大写和小写字母总数(MEDIUM及以上策略生效)。
validate_password.number_count1密码中至少包含的数字数量(MEDIUM及以上策略生效)。
validate_password.special_char_count1密码中至少包含的特殊字符数量(MEDIUM及以上策略生效)。
validate_password.changed_characters_percentage0mysql8.0.34新属性,修改密码时新旧密码字符差异的最小百分比(需手动启用)。
validate_password.dictionary_file自定义弱密码字典文件路径(STRONG策略生效)。
validate_password.check_user_nameON禁止密码包含用户名。

4. 密码策略等级(validate_password.policy

等级规则
LOW仅检查密码长度。
MEDIUM检查长度、大小写字母、数字、特殊字符。
STRONGMEDIUM 基础上,额外检查是否包含字典文件中的弱密码。

5. 示例配置
场景:高安全环境

-- 设置密码策略为 STRONG
SET GLOBAL validate_password.policy = STRONG;-- 密码最小长度 12
SET GLOBAL validate_password.length = 12;-- 要求至少 2 个数字、2 个特殊字符
SET GLOBAL validate_password.number_count = 2;
SET GLOBAL validate_password.special_char_count = 2;-- 启用新旧密码差异检查(至少 30% 不同)
SET GLOBAL validate_password.changed_characters_percentage = 30;-- 加载自定义弱密码字典
SET GLOBAL validate_password.dictionary_file = '/path/to/dictionary.txt';

验证密码强度

-- 使用函数检查密码是否符合规则
SELECT VALIDATE_PASSWORD_STRENGTH('MyP@ssw0rd!2024');
-- 返回值:100(最高强度)


MySQL validate_password 组件属性详解

MySQL 的 validate_password 组件用于强制实施密码策略,确保用户设置的密码符合安全要求。以下是其核心属性及其配置说明:


**1. validate_password.policy
**

  • 功能:定义密码策略的强度等级。
  • 可选值
    • LOW:仅检查密码长度。
    • MEDIUM(默认):检查长度、大小写字母、数字和特殊字符。
    • STRONG:在 MEDIUM 基础上,额外检查密码是否包含弱密码字典中的词汇。
  • 示例
    SET GLOBAL validate_password.policy = STRONG;
    

2. validate_password.length

  • 功能:设置密码的最小长度。
  • 默认值8
  • 规则
    • 若显式设置此参数,会覆盖策略等级中的默认长度(如 STRONG 默认要求更长密码)。
  • 示例
    SET GLOBAL validate_password.length = 12;  -- 强制密码至少12位
    

3. validate_password.mixed_case_count

  • 功能:密码中至少包含的大写和小写字母总数。
  • 默认值1(如 AaaB)。
  • 生效条件:策略等级为 MEDIUMSTRONG
  • 示例
    SET GLOBAL validate_password.mixed_case_count = 2;  -- 要求至少2个大小写混合字符
    
    • 有效密码:Abc123!(A 和 b 视为混合)。
    • 无效密码:ABC123!(全大写,无小写)。

4. validate_password.number_count

  • 功能:密码中至少包含的数字数量。
  • 默认值1
  • 生效条件:策略等级为 MEDIUMSTRONG
  • 示例
    SET GLOBAL validate_password.number_count = 2;  -- 要求至少2个数字
    
    • 有效密码:Pass12word!(包含 12)。
    • 无效密码:Passw0rd!(仅1个数字)。

5. validate_password.special_char_count

  • 功能:密码中至少包含的特殊字符数量(如 !@#$%^&*)。
  • 默认值1
  • 生效条件:策略等级为 MEDIUMSTRONG
  • 示例
    SET GLOBAL validate_password.special_char_count = 2;  -- 要求至少2个特殊字符
    
    • 有效密码:P@ssw0rd!@!)。
    • 无效密码:Passw0rd#(仅1个特殊字符)。

6. validate_password.changed_characters_percentage

  • 功能:修改密码时,新旧密码必须不同的字符比例(基于旧密码长度)。
  • 默认值0(未启用)。
  • 配置
    SET GLOBAL validate_password.changed_characters_percentage = 30;  -- 至少30%不同
    
  • 示例
    • 旧密码:Abcd1234(8字符)。
    • 新密码:Xbcd5678(4个不同字符,占比 4/8=50%,通过)。

7. validate_password.dictionary_file

  • 功能:指定自定义弱密码字典文件路径(仅 STRONG 策略生效)。
  • 格式:文本文件,每行一个弱密码。
  • 配置
    SET GLOBAL validate_password.dictionary_file = '/path/to/dictionary.txt';
    
  • 示例
    • 字典文件包含 password,则密码 Password123! 会被拒绝。

8. validate_password.check_user_name

  • 功能:禁止密码与用户名相同(默认 ON)。
  • 示例:用户名为 admin,则密码 Admin123! 会被拒绝。
















MySql8.4介绍

以下是 MySQL 8.4 的详细介绍,重点涵盖其核心特性、改进方向及适用场景:


1. 版本定位与支持周期

  • LTS(长期支持版本)
    MySQL 8.4 是官方指定的 长期支持版本,支持周期至 2026 年,适合生产环境使用。

    • 支持策略:仅 LTS 版本(如 8.4、9.7)提供长期维护,非 LTS 版本(如 8.0)仅短期支持。
  • 兼容性与升级限制

    • 不支持从 MySQL 5.7 直接升级到 8.4,需先迁移至 8.0。
    • 允许通过复制(Replication)跨 LTS 版本同步数据(如 8.4 → 9.7),但禁止降级(如 9.7 → 8.4)。

2. 性能优化与存储引擎改进
InnoDB 增强

  • 参数默认值调整

    • innodb_io_capacity 默认值从 200 提升至 10,000,适配 SSD 高性能存储。
    • innodb_log_buffer_size 从 32MB 翻倍至 64MB,提升大事务处理能力。
    • 禁用 innodb_adaptive_hash_indexinnodb_change_buffering,避免混合读写负载下的性能抖动。
  • 内存管理优化

    • 默认启用 innodb_numa_interleave,优化 NUMA 架构服务器的内存分配。
    • 简化 Doublewrite 文件结构,全局仅保留 2 个文件,降低管理复杂度。

3. 安全与权限管理
认证与插件变更

  • 弃用旧认证方式

    • 默认禁用 mysql_native_password 插件,推荐使用 caching_sha2_password
    • 需手动启用旧插件(配置 --mysql-native-password=ON)。
  • 新增权限

    • FLUSH_PRIVILEGES 需独立权限(不再依赖 RELOAD)。
    • OPTIMIZE_LOCAL_TABLE 权限支持本地表优化操作。

4. 复制与高可用性
GTID 与复制增强

  • GTID 标签化:支持为事务附加自定义标签(如 /*!80017 'audit_tag:payment' */),便于追踪事务来源。
  • 并行复制优化:在 MTS(多线程复制)模式下支持 SQL_AFTER_GTIDS,提升复制效率。

克隆与集群改进

  • 克隆插件灵活性:允许同大版本内克隆(如 8.4.0 → 8.4.14),简化数据迁移。
  • Group Replication (MGR)
    • 默认一致性级别调整为 BEFORE_ON_PRIMARY_FAILOVER,确保故障切换时数据强一致。
    • 支持节点运行不同小版本(如 8.4.0 与 8.4.2 共存)。

5. 运维与监控
内存与临时表管理

  • 临时表默认存储:使用 InnoDB 引擎(temptable_use_mmap=OFF),减少对 tmpdir 的依赖。
  • 动态内存分配temptable_max_ram 根据系统内存动态调整(默认 3% 内存,上限 4GB)。

监控与诊断

  • 自动直方图更新ANALYZE TABLE 自动更新列的统计直方图。
  • 长事务回滚进度:记录 InnoDB 事务回滚进度,避免运维盲区。

6. 安装与配置建议

  • 平台差异
    • Linux:默认 innodb_flush_method=O_DIRECT(绕过文件系统缓存)。
    • Windows/macOS:仍使用 fsync 作为默认刷盘方式。
  • 兼容性配置:使用 mysqldump --output-as-version 导出旧版本兼容数据。

升级注意事项

  1. 性能验证
    • 测试 innodb_adaptive_hash_index 禁用后的负载性能。
    • 验证 SSD 环境下 innodb_io_capacity=10000 的效果。
  2. 安全审计
    • 检查是否依赖 mysql_native_password,及时迁移认证方式。
  3. 版本兼容性
    • 使用 mysql-shell 工具检查升级兼容性(util.checkForServerUpgrade())。

总结
MySQL 8.4 作为 LTS 版本,聚焦 安全性性能调优运维简化,适合需要长期稳定支持的企业级场景。升级前需重点验证旧版本兼容性,并结合监控工具观察新参数对业务负载的影响。
















Mysql8.4 与 Mysql8.0 对比


MySQL 8.4 与 MySQL 8.0 对比分析
MySQL 8.4 是 MySQL 8.0 系列的 长期支持版本(LTS),继承了 8.0 的核心功能并引入多项改进。以下是关键差异的详细对比:


1. 版本支持与生命周期

特性MySQL 8.0MySQL 8.4
支持类型常规版本(非 LTS)长期支持版本(LTS)
支持周期官方支持已逐步结束支持至 2026 年
升级兼容性支持从 5.7 升级不支持直接从 5.7 升级
版本策略每季度发布功能更新仅修复关键漏洞和性能问题

2. 性能优化

特性MySQL 8.0MySQL 8.4
InnoDB 默认参数innodb_io_capacity=200innodb_io_capacity=10000(适配 SSD)
NUMA 支持需手动配置 innodb_numa_interleave默认启用
Doublewrite 文件每个表空间独立文件全局仅保留 2 个文件
临时表管理默认使用内存映射文件(MMAP)默认使用 InnoDB 磁盘存储

3. 安全增强

特性MySQL 8.0MySQL 8.4
默认认证插件caching_sha2_passwordcaching_sha2_password(禁用 mysql_native_password
权限管理RELOAD 权限控制 FLUSH新增独立权限 FLUSH_PRIVILEGES
密码策略支持 validate_password默认优化策略(如 changed_characters_percentage
SSL/TLS支持 TLS 1.2默认禁用 TLS 1.0/1.1

4. 复制与高可用性

特性MySQL 8.0MySQL 8.4
Group Replication默认一致性级别 EVENTUAL默认 BEFORE_ON_PRIMARY_FAILOVER(强一致)
GTID 管理支持基础 GTID支持 GTID 标签化(标记事务来源)
克隆插件允许跨大版本克隆仅允许同大版本克隆(如 8.4.x)

5. 运维与监控

特性MySQL 8.0MySQL 8.4
临时表内存分配固定 temptable_max_ram=1GB动态分配(3% 系统内存,上限 4GB)
直方图统计需手动更新ANALYZE TABLE 自动更新
长事务回滚监控无进度提示记录回滚进度日志

6. 安装与平台适配

特性MySQL 8.0MySQL 8.4
Linux 刷盘模式默认 fsync默认 O_DIRECT(绕过缓存)
Windows/macOS 兼容性支持基础功能优化 NUMA 和内存管理

升级注意事项

  1. 性能影响

    • 8.4 的 innodb_io_capacity=10000 可能对机械硬盘负载过高,需根据存储类型调整。
    • 禁用 innodb_adaptive_hash_index 可能影响高频查询性能,需测试验证。
  2. 安全兼容性

    • 若应用依赖 mysql_native_password,需在 8.4 中手动启用(配置 --mysql-native-password=ON)。
  3. 复制集群升级

    • Group Replication 集群需统一版本(8.4 允许混合小版本,如 8.4.0 和 8.4.2)。
  4. 配置迁移

    • 使用 mysqldump --output-as-version=8.0 导出旧版本兼容数据。

总结

  • 选择 MySQL 8.4
    适合需要 长期稳定支持 的生产环境,尤其是对安全性、复制一致性和现代硬件适配要求高的场景。
  • 保留 MySQL 8.0
    适用于短期项目或已深度定制且不愿立即调整配置的旧系统。

升级前务必进行 性能压测安全审计,并参考官方升级指南(MySQL 8.4 Release Notes)。
















validate_password.changed_characters_percentage

MySQL 8.0.34 版本开始引入的。
validate_password.changed_characters_percentage 是 MySQL 中 validate_password 插件的一个参数,用于控制密码强度策略,不过该参数是从 MySQL 8.0.34 版本开始引入的。
可参考官文 8.4.3.2章节 密码验证选项变量 Password Validation Options and Variables

1. 参数功能

  • 核心目的
    强制要求用户修改密码时,新密码必须与旧密码在字符层面有 最低比例的不同,防止仅做微小改动(如末尾加数字、大小写替换)。
  • 适用场景
    适用于高安全要求的系统(如金融、政务),防止密码重复利用或简单迭代。

2. 规则细节
计算方式

  1. 字符对比范围

    • 仅对比新旧密码的 重叠部分(取旧密码的长度为基准)。
    • 若新密码比旧密码长,超出的字符不参与对比;若更短,仅对比到新密码长度为止。
    • 示例
      • 旧密码:Abcd1234(长度8)
      • 新密码:Xbcd5678(长度8)
      • 对比所有8个字符,差异为第1位(A→X)、第5-8位(1→5, 2→6, 3→7, 4→8),总计 4个不同字符,占比 4/8 = 50%
  2. 公式
    [
    \text{修改比例} = \frac{\text{新旧密码不同字符数}}{\text{旧密码长度}} \times 100%
    ]

  3. 阈值要求

    • 若计算结果 设定阈值(如30%),允许修改;否则拒绝。
    • 默认值:MySQL 8.4 中 默认未启用此参数,需手动配置。

3. 配置方法
启用与设置

  1. 激活插件
    确保 validate_password 组件已启用:

    INSTALL COMPONENT 'file://component_validate_password';
    
  2. 设置阈值

    SET GLOBAL validate_password.changed_characters_percentage = 30; -- 要求至少30%的字符不同
    
  3. 持久化配置(修改配置文件 my.cnf):

    [mysqld]
    validate_password.changed_characters_percentage = 30
    

4. 示例验证

旧密码新密码对比长度不同字符数修改比例是否通过(阈值30%)
P@ssw0rdP@ssw1rd8112.5%
Hello2023H3llo!202493(e→3, !, 433.3%✔️
Qwer1234Qw#r567884(e→#, 1→5, 2→6, 3→7, 4→850%✔️
Short1Sh0rt1!62(o→0, 新增!不计入对比)33.3%✔️

5. 注意事项
边界情况

  • 旧密码为空:若用户首次设置密码(无旧密码),此策略不生效。
  • 密码长度差异:新增字符不参与计算,仅对比旧密码长度内的部分。
    -- 旧密码:'Secur3'(6字符)
    -- 新密码:'S3cur3!X'(7字符,仅对比前6位)
    -- 不同字符数:1('e'→'3'),占比 16.6%
    

兼容性

  • 需与 validate_password 其他策略协同使用(如最小长度、特殊字符要求)。
  • 若启用 changed_characters_percentage,建议同时设置 validate_password.length 防止用户通过缩短密码绕过规则。

6. 安全建议

  1. 合理阈值
    • 推荐值:30%~50%,过低易被绕过,过高可能导致用户频繁忘记密码。
  2. 组合策略
    • 启用复杂度检查(validate_password.policy=STRONG)。
    • 设置密码最短有效期(password_reuse_interval)。
  3. 监控日志
    • 审计失败修改事件(error.log 中记录密码策略违规)。

通过配置 validate_password.changed_characters_percentage,可显著提升密码更新的安全性,减少因简单修改导致的账户风险。
















相关文章:

Fedora41安装MySQL8.4.4

Fedora41安装MySQL8.4.4 Fedora41用yum仓库安装MySQL8.4.4 笔记250310下载安装启动mysqld服务查看生成的初始密码 , 用初始密码登录登录后,必须修改初始密码才能执行其它操作可选设置降低密码强度要求, 使用简单密码降低 validate_password 组件对密码强度的要求 用SET GLOBAL命…...

基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

NLP常见任务专题介绍(2)-多项选择任务(MultipleChoice)训练与推理模板

一、 使用 BigBird 进行多项选择任务训练与推理 本示例展示如何使用 BigBirdForMultipleChoice 训练一个多项选择模型,适用于考试答题、阅读理解、常识推理等任务。 1️⃣ 任务描述 目标:给定一个问题和多个选项,模型预测正确答案。 数据格式:输入包含 (问题, 选项1, 选项…...

java BCC异或校验例子

需求 对一个十六进制的字符串进行BCC校验 方法 private static String XORCheck(String rawMsg) {// 16进制字符串需要转成10进制数组进行校验&#xff0c;然后再返回16进制字符串用于与原来的字符匹配byte[] bytes HexDumpMsgFormat.hexStr2DesBytes(rawMsg);return BytesUt…...

Python第十六课:深度学习入门 | 神经网络解密

🎯 本节目标 理解生物神经元与人工神经网络的映射关系掌握激活函数与损失函数的核心作用使用Keras构建手写数字识别模型可视化神经网络的训练过程掌握防止过拟合的基础策略一、神经网络基础(大脑的数字化仿生) 1. 神经元对比 生物神经元人工神经元树突接收信号输入层接收特…...

若依-导出后端解析

针对若依框架微服务版本学习 若依导入导出功能的具体使用详见&#xff1a;后台手册 | RuoYi 1.导出逻辑&#xff1a; 导出文件的逻辑是先创建一个临时文件&#xff0c;等待前端请求下载结束后马上删除这个临时文件。但是有些下载插件&#xff0c;例如迅雷&#xff08;他们是二…...

华为OD机试九日集训第1期 - 按算法分类,由易到难,循序渐进,提升编程能力和解题技巧,从而提高机试通过率(Python/JS/C/C++)

目录 一、适合人群二、本期训练时间三、如何参加四、数据结构与算法大纲五、华为OD九日集训第1期第1天、逻辑分析第2天、数组第3天、双指针第4天、map与list第5天、队列第6天、栈第7天、滑动窗口第8天、二叉树第9天、矩阵 六、国内直接使用满血ChatGPT4o、o1、o3-mini-high、Cl…...

Python 机器学习小项目:手写数字识别(MNIST 数据集)

本项目将使用 scikit-learn 库&#xff0c;基于 支持向量机&#xff08;SVM&#xff09; 模型来构建一个手写数字识别系统。数据集选用 MNIST&#xff0c;其中包含 0-9 的手写数字图像&#xff0c;每张图片是 88 像素的灰度图。 项目步骤 安装必要的库加载数据集数据预处理划…...

STM32中输入/输出有无默认电平

结论&#xff1a; 输入从严格意义上来讲没有默认高低电平之说 推挽输出模式&#xff1a; 在推挽输出模式下&#xff0c;STM32的GPIO引脚可以输出高电平和低电平。如果没有通过软件明确设置引脚的电平状态&#xff0c;STM32的某些型号&#xff08;或特定情况下&#xff09;可能会…...

webshell一些上传心得

我们以upload-labs为基础 一、前端拦截&#xff1a; 如第一关 工作方式&#xff1a; 直接在前端拦截 绕过方式&#xff1a; 因为没有限制后端&#xff0c;所有可以用bs 绕过前端修改格式即可 将需要上传的php文件改成jpg格式 使用burp suite 拦截上传后&#xff0c;使用re…...

ROS实践(二)构建Gazebo机器人模型文件urdf

目录 一、基础语法 1. urdf文件组成 2. robot根标签 3. link 和 joint标签 4. sensor标签 二、 实验&#xff1a;使用launch文件启动rviz查看机器人模型 1. 编写机器人模型的urdf文件。 2. 编写launch文件。 3. 运行launch&#xff0c;查看效果。 URDF&#xff08;Unifi…...

Linux 入门:常用命令速查手册

目录 一.指令 1.pwd&#xff08;显示所在路径&#xff09; 2.ls&#xff08;列出所有子目录与文件&#xff09; 3.touch&#xff08;创建文件&#xff09; 4.mkdir&#xff08;创建目录&#xff09; 5.cd&#xff08;改变所处位置&#xff09; 6.rm&#xff08;删除&…...

kali linux web扫描工具

Kali Linux是一款专为网络安全领域而打造的操作系统&#xff0c;提供了众多优秀的安全工具&#xff0c;其中就包括了强大的web扫描工具。Web扫描是网络安全检测的一个重要环节&#xff0c;它可以帮助安全专家检测网站的漏洞&#xff0c;提升网站的安全性。 Kali Linux中集成了…...

2路模拟量同步输出卡、任意波形发生器卡—PCIe9100数据采集卡

品牌&#xff1a;阿尔泰科技 型号&#xff1a; PCIe9100、PCIe9101、PXIe9100、PXIe9101 产品系列&#xff1a;任意波形发生器 支持操作系统&#xff1a;XP、Win7、Win8、Win10 简要介绍&#xff1a; 910X 系列是阿尔泰科技公司推出的 PCIe、PXIe 总线的任意波形发生器&…...

Facebook 隐私保护技术的发展与未来趋势

Facebook 隐私保护技术的发展与未来趋势 在这个数字化时代&#xff0c;个人隐私保护已成为全球关注的焦点。Facebook&#xff0c;作为全球最大的社交网络平台之一&#xff0c;其在隐私保护技术的发展上扮演着重要角色。本文将探讨 Facebook 在隐私保护技术方面的进展&#xff…...

Android TCP封装工具类

TCP通信的封装&#xff0c;我们可以从以下几个方面进行改进&#xff1a; 线程池优化&#xff1a;使用更高效的线程池配置&#xff0c;避免频繁创建和销毁线程。 连接重试机制&#xff1a;在网络不稳定时&#xff0c;自动重试连接。 心跳机制&#xff1a;保持长连接&#xff…...

Python基于Django的医用耗材网上申领系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

Java虚拟机之垃圾收集(一)

目录 一、如何判定对象“生死”&#xff1f; 1. 引用计数算法&#xff08;理论参考&#xff09; 2. 可达性分析算法&#xff08;JVM 实际使用&#xff09; 3. 对象的“缓刑”机制 二、引用类型与回收策略 三、何时触发垃圾回收&#xff1f; 1. 分代回收策略 2. 手动触发…...

【mysql】mysql数据库,权限授予,账号设置

创建一个可用的数据库&#xff0c;名字为gitea&#xff0c;支持中文utf8mb4 CREATE DATABASE gitea CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 设置东八区时区 SET GLOBAL time_zone 08:00; FLUSH PRIVILEGES; # 查询当前时间 SELECT NOW();给【普通用户】授予查…...

Html5学习教程,从入门到精通, HTML5超链接应用的详细语法知识点和案例代码(18)

HTML5超链接应用的详细语法知识点和案例代码 超链接&#xff08;Hyperlink&#xff09;&#xff0c;也称为跃点链接&#xff0c;是互联网和文档编辑中的一种重要概念。 超链接的定义 超链接是指从一个网页指向一个目标的连接关系&#xff0c;这个目标可以是另一个网页&#…...

⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐

⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐ 示例 1&#xff1a; 输入&#xff1a;root [5,3,6,2,4,null,8,1,null,null,null,7,9] 输出&#xff1a;[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9] 示例 2&#xff1a; 输入&#xff1…...

深度学习PyTorch之13种模型精度评估公式及调用方法

深度学习pytorch之22种损失函数数学公式和代码定义 深度学习pytorch之19种优化算法&#xff08;optimizer&#xff09;解析 深度学习pytorch之4种归一化方法&#xff08;Normalization&#xff09;原理公式解析和参数使用 深度学习pytorch之简单方法自定义9类卷积即插即用 实时…...

tomcat单机多实例部署

一、部署方法 多实例可以运行多个不同的应用&#xff0c;也可以运行相同的应用&#xff0c;类似于虚拟主机&#xff0c;但是他可以做负载均衡。 方式一&#xff1a; 把tomcat的主目录挨个复制&#xff0c;然后把每台主机的端口给改掉就行了。 优点是最简单最直接&#xff0c;…...

Java开发者如何接入并使用DeepSeek

目录 一、准备工作 二、添加DeepSeek SDK依赖 三、初始化DeepSeek客户端 四、数据上传与查询 五、数据处理与分析 六、实际应用案例 七、总结 【博主推荐】&#xff1a;最近发现了一个超棒的人工智能学习网站&#xff0c;内容通俗易懂&#xff0c;风格风趣幽默&#xff…...

win10电脑鼠标速度突然变的很慢?

电脑鼠标突然变很慢&#xff0c;杀毒检测后没问题&#xff0c;鼠标设置也没变&#xff0c;最后发现可能是误触鼠标的“DPI”调节键。 DPI调节键在鼠标滚轮下方&#xff0c;再次点击即可恢复正常鼠标速度。 如果有和-的按键&#xff0c;速度变快&#xff0c;-速度变慢。 图源&…...

第四次CCF-CSP认证(含C++源码)

第四次CCF-CSP认证 第一道&#xff08;easy&#xff09;思路及AC代码 第二道&#xff08;easy&#xff09;思路及AC代码遇到的问题 第三道&#xff08;mid&#xff09;思路及AC代码 第一道&#xff08;easy&#xff09; 题目链接 思路及AC代码 这题就是将这个矩阵旋转之后输出…...

Netty基础—1.网络编程基础一

大纲 1.什么是OSI开放系统互连 2.OSI七层模型各层的作用 3.TCP/IP协议的简介 4.TCP和UDP的简介 5.TCP连接的三次握手 6.TCP连接的四次挥手 7.TCP/IP中的数据包 8.TCP通过确认应答与序列号提高可靠性 9.HTTP请求的传输过程 10.HTTP协议报文结构 11.Socket、短连接、长…...

【理想解法学习笔记】

目录 理想解法原理简介算法步骤属性值规范化方法代码示例 理想解法 原理简介 TOPSIS(Technique for Order Preference by Simi larity to IdealSolution)法是一种逼近理想解的排序方法。其基本的处理思路是&#xff1a;首先建立初始化决策矩阵&#xff0c;而后基于规范化后的初…...

98.在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图

在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图 前言 在 Web GIS&#xff08;地理信息系统&#xff09;应用开发中&#xff0c;地图的 Resolution&#xff08;分辨率&#xff09;是一个重要的概念。不同的 Resolution 适用于不同的地图层级&#xff0c;有时…...

Docker 部署 Vaultwarden

一、前言 1. 官网 1.1 Vaultwarden https://github.com/dani-garcia/vaultwarden https://github.com/wcjxixi/Vaultwarden-Wiki-Chn https://hub.docker.com/r/vaultwarden/server https://rs.ppgg.in/ # Vaultwarden Wiki 中文版 https://geekdaxue.co/read/Vaultward…...