一、前言
事出必有因,在这个月的某个项目中,我们面临了一项重要任务,即每年一次的等保测评整改。这次测评的重点是Mysql的一些高危漏洞,客户要求我们无论如何必须解决这些漏洞。尽管我们感到无奈,但为了满足客户的要求,我们只能硬着头皮进行升级。而碰巧的是,Mysql5.7
在10月
份停止了更新,借着这次机会,我们决定研究一下Mysql5.7
升级到Mysql8.0
的过程。在本文的最后,我将分享一些在这次升级过程中遇到的问题。
升级需求:将5.7.43升级到8.0.34, 升级方式 in-place
升级【关闭现有版本MySQL,将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式,称为in-place
升级】
原版本
5.7.43
CentOS Linux release 7.9.2009
新版本
8.0.34
CentOS Linux release 7.9.2009
二、Mysql 生命周期
以下Mysql 生命周期-内容来自于互联网
关于数据库版本升级,一直都是热议话题,对于升级的缘由各家也有所不同,有业务驱动的,有DBA自发驱动的,有规划导向也有方向指引的……抛开各种原因,当升级这个决定落下来的时候,对于DBA手头的几百几千套数据库来说,就好比是一场动物大迁徙,满满的画面感。
从Oracle发布的版本生命周期规划可以看到,Mysql5.7
已经走到了生命周期的终点,意味着后续将不再为Mysql5.7
提供官方更新、错误修复或安全补丁。
阿里云和AWS都在官方公布了版本支持计划,Mysql5.7
版本已经开始了倒计时。
三、MySQL8.0的新特性
默认字符集由latin1变为utf8mb4。
MyISAM系统表全部换成InnoDB表。
JSON特性增强。
支持不可见索引,支持直方图。
sql_mode参数默认值变化。
默认密码策略变更。
新增角色管理。
支持窗口函数,支持Hash join。
四、升级建议
支持从MySQL5.7
升级到MySQL8.0
,注意仅支持GA版本之间的升级。
不支持跨大版本的升级,如从5.6
升级到8.0
是不支持的。
建议升级大版本前先升级到当前版本的最近小版本,如5.7
先升级到5.7.43
后再升级到8.0
。
做好充足的备份! 数据无价!!!
五、升级前准备
5.1 Mysql-shell 检查工具兼容性
在执行升级操作前需要做一些检查工作,确认准备工作是否就绪,避免升级过程中出现异常。可以使用MySQL Shell
使用util.checkForServerUpgrade
进行检查,返回内容包括不符合迁移要求的问题,error的问题需要迁移前修改。
Mysql-shell 下载地址: https://dev.mysql.com/downloads/shell/
选择 Archives ,查询更多版本
选择当前最新的版本8.0.34,x84,64-bit
https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.34-linux-glibc2.12-x86-64bit.tar.gz
#下载包
[[email protected] ~]# wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.34-linux-glibc2.12-x86-64bit.tar.gz -C /root
[[email protected] ~]# tar -xf mysql-shell-8.0.34-linux-glibc2.12-x86-64bit.tar.gz
[[email protected] ~]# cd /root/mysql-shell-8.0.34-linux-glibc2.12-x86-64bit/bin
[[email protected] bin]# ./mysqlsh -uroot -p -S /tmp/mysql.sock -e "util.checkForServerUpgrade()" > util.checkForServerUpgrade.log
输出报告
The MySQL server at /tmp%2Fmysql.sock, version 5.7.39-log - MySQL Community
Server (GPL), will now be checked for compatibility issues for upgrade to MySQL
8.0.34...
1) Usage of old temporal type
No issues found
2) MySQL 8.0 syntax check for routine-like objects
No issues found
3) Usage of db objects with names conflicting with new reserved keywords
No issues found
4) Usage of utf8mb3 charset
Warning: The following objects use the utf8mb3 character set. It is
recommended to convert them to use utf8mb4 instead, for improved Unicode
support.
More information:
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html
mysql - schema's default character set: utf8
test - schema's default character set: utf8
5) Table names in the mysql schema conflicting with new tables in 8.0
No issues found
6) Partitioned tables using engines with non native partitioning
No issues found
7) Foreign key constraint names longer than 64 characters
No issues found
8) Usage of obsolete MAXDB sql_mode flag
No issues found
9) Usage of obsolete sql_mode flags
Notice: The following DB objects have obsolete options persisted for
sql_mode, which will be cleared during upgrade to 8.0.
More information:
https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals
global system variable sql_mode - defined using obsolete NO_AUTO_CREATE_USER
option
10) ENUM/SET column definitions containing elements longer than 255 characters
No issues found
11) Usage of partitioned tables in shared tablespaces
No issues found
12) Circular directory references in tablespace data file paths
No issues found
13) Usage of removed functions
No issues found
14) Usage of removed GROUP BY ASC/DESC syntax
No issues found
15) Removed system variables for error logging to the system log configuration
To run this check requires full path to MySQL server configuration file to be specified at 'configPath' key of options dictionary
More information:
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-logging
16) Removed system variables
To run this check requires full path to MySQL server configuration file to be specified at 'configPath' key of options dictionary
More information:
https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html#optvars-removed
17) System variables with new default values
To run this check requires full path to MySQL server configuration file to be specified at 'configPath' key of options dictionary
More information:
https://mysqlserverteam.com/new-defaults-in-mysql-8-0/
18) Zero Date, Datetime, and Timestamp values
No issues found
19) Schema inconsistencies resulting from file removal or corruption
No issues found
20) Tables recognized by InnoDB that belong to a different engine
No issues found
21) Issues reported by 'check table x for upgrade' command
No issues found
22) New default authentication plugin considerations
Warning: The new default authentication plugin 'caching_sha2_password' offers
more secure password hashing than previously used 'mysql_native_password'
(and consequent improved client connection authentication). However, it also
has compatibility implications that may affect existing MySQL installations.
If your MySQL installation must serve pre-8.0 clients and you encounter
compatibility issues after upgrading, the simplest way to address those
issues is to reconfigure the server to revert to the previous default
authentication plugin (mysql_native_password). For example, use these lines
in the server option file:
[mysqld]
default_authentication_plugin=mysql_native_password
However, the setting should be viewed as temporary, not as a long term or
permanent solution, because it causes new accounts created with the setting
in effect to forego the improved authentication security.
If you are using replication please take time to understand how the
authentication plugin changes may impact you.
More information:
https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues
https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication
23) Columns which cannot have default values
No issues found
24) Check for invalid table names and schema names used in 5.7
No issues found
25) Check for orphaned routines in 5.7
No issues found
26) Check for deprecated usage of single dollar signs in object names
No issues found
27) Check for indexes that are too large to work on higher versions of MySQL
Server than 5.7
No issues found
28) Check for deprecated '.
' syntax used in routines.
No issues found
Errors: 0
Warnings: 3
Notices: 1
NOTE: No fatal errors were found that would prevent an upgrade, but some potential issues were detected. Please ensure that the reported issues are not significant before upgrading.
从输出报告可以看出,升级检查器在28
个方面进行了检查,最终得出3
个警告信息和1
个提示。
消除警告:
Usage of utf8mb3 charset 在MySQL 8.0
版本之前,默认字符集为latin1
,utf8
字符集指向的是utf8mb3
。从MySQL8.0
开始,数据库的默认编码将改为utf8mb4 ;为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和比较规则。
New default authentication plugin considerations,密码认证插件变更。为了避免连接问题,可以仍采用5.7的mysql_native_password
认证插件。
消除提示:
Usage of obsolete sql_mode flags: Mysq8.0
版本sql_mode不支持NO_AUTO_CREATE_USER
,要避免配置的sql_mode
中带有NO_AUTO_CREATE_USER
。
通过以上的例子,可以发现,MySQL Shell
提供的升级检查工具能够帮助我们检测版本兼容性,减轻升级工作负担。
5.2 逻辑备份Mysql数据
which mysqldump
/home/application/mysql/app/bin/mysqldump
# --routines 备份存储过程和函数;--set-gtid-purged=OFF: 禁用GTID(全局事务标识);xxx1,XXX2 表示库名,备份多个库 用空格做为间隔
/home/application/mysql/app/bin/mysqldump -uroot -p --routines --set-gtid-purged=OFF --databases XXX1 XXX2 > /root/all-database-20231026.sql
5.3 优雅的停止数据库
# 进入原5.7 mysql命令行 正确关闭数据库
[[email protected] ~]# mysql -uroot -p'srebro'
mysql> select version();
+------------+
| version() |
+------------+
| 5.7.43-log |
+------------+
1 row in set (0.00 sec)
mysql> show variables like 'innodb_fast_shutdown';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| innodb_fast_shutdown | 1 |
+----------------------+-------+
1 row in set (0.00 sec)
# 确保数据都刷到硬盘上,更改成0
InnoDB 关闭模式。
如果值为 0,InnoDB 会在关闭前进行缓慢关闭、完全清除和更改缓冲区合并。
如果值为 1(默认值),InnoDB 会在关闭时跳过这些操作,这个过程称为快速关闭。
如果值为 2,InnoDB 刷新其日志并冷关机,就好像 MySQL 崩溃了;没有提交的事务丢失,但崩溃恢复操作使下一次启动需要更长的时间。 在仍然缓冲大量数据的极端情况下,缓慢关闭可能需要几分钟甚至几小时。
mysql> set global innodb_fast_shutdown=0;
Query OK, 0 rows affected (0.00 sec)
mysql> shutdown;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@cmdb ~]# ps -ef | grep mysql
root 30990 30934 0 16:12 pts/0 00:00:00 grep --color=auto mysql
5.4 备份Mysql 数据目录,安装目录 和配置文件
--确认数据库状态为关闭状态
[[email protected] ~]# systemctl status mysqld
--数据目录备份
[[email protected] ~]# cp -r /home/application/mysql/data /home/application/mysql/data_bak_`date +%F`
--安装目录备份
[[email protected] ~]# cp -r /home/application/mysql/app/ /home/application/mysql/app_bak_`date +%F`
--配置文件备份
[[email protected] ~]# cp /etc/my.cnf /etc/my.cnf_`date +%F`
5.5 下载并解压MySQL8
https://dev.mysql.com/downloads/
选择 Archives ,查询更多版本
下载地址: https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz 选择mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
#执行以下步骤解压tar包:
# 安装包上传至原安装包目录下 我的是/home/application/mysql
[[email protected] ~]# cd /home/application/mysql
[[email protected] mysql]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
[[email protected] mysql]# tar -xf mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
# 文件夹重命名为mysql8
[[email protected] mysql]# mv mysql-8.0.34-linux-glibc2.12-x86_64 mysql8
# 更改文件夹所属
[[email protected] mysql]# chown -Rf mysql:mysql /home/application/mysql/mysql8
# 删除安装包
[[email protected] mysql]# rm -rf mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz
六、升级
6.1 修改my.cnf 配置文件
因5.7版本与8.0版本参数有所不同,为了能顺利升级,我们需要更改部分配置参数。主要注意sql_mode
、basedir
、密码认证插件
及字符集
设置,其他参数最好还是按照原5.7的来,不需要做调整。下面展示5.7
和8.0
的配置文件,注意备份原来配置文件
。
6.1.1 Mysql5.7_my.cnf 配置文件
[mysql]
socket=/tmp/mysql.sock
default-character-set=utf8
[mysqld]
user=mysql
basedir=/home/application/mysql/app
datadir=/home/application/mysql/data
character_set_server=utf8
collation-server=utf8_general_ci
#日志时间
log_timestamps=SYSTEM
port=3306
socket=/tmp/mysql.sock
max_connections=1000
max_allowed_packet=500M
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#慢日志
long_query_time=3
slow_query_log=ON
slow_query_log_file=/home/application/mysql/slow_query.log
#错误日志
log-error=/home/application/mysql/mysql-error.log
#binlog配置
server_id=150
log-bin=mysql-bin
max_binlog_size = 100M
binlog_format=row
log_slave_updates
expire_logs_days=7
#只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve=1
6.1.2 Mysql8.0_my.cnf 配置文件
[mysql]
socket=/tmp/mysql.sock
default-character-set=utf8
[mysqld]
user=mysql
#日志时间
log_timestamps=SYSTEM
port=3306
socket=/tmp/mysql.sock
max_connections=1000
max_allowed_packet=500M
#只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve=1
#binlog配置
server_id=150
log-bin=mysql-bin
max_binlog_size = 100M
binlog_format=row
log_slave_updates
expire_logs_days=7
#慢日志
long_query_time=3
slow_query_log=ON
slow_query_log_file=/home/application/mysql/slow_query.log
#错误日志
log-error=/home/application/mysql/mysql-error.log
#for8.0
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
basedir=/home/application/mysql/mysql8
datadir=/home/application/mysql/data
character_set_server=utf8
collation-server=utf8_general_ci
# 默认使用"mysql_native_password"插件认证
default_authentication_plugin=mysql_native_password
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
6.2 执行升级程序
在mysql5.7升级的时候,MySQL启动后还需执行mysql_upgrade
后重启MySQL。MySQL8.0.16
开始,MySQL 不推荐使用mysql_upgrade
; 直接使用 mysqld_safe
直接启动。关于--upgrade=
的一些参数
--upgrade=AUTO
MySQL升级所有过时的内容
--upgrade=NONE
MySQL跳过升级步骤,可能会导致报错
--upgrade=MINIMAL
MySQL在必要时升级数据字典表,information_schema
和information_schema
。这可能会导致部分功能不能正常使用,例如MGR
--upgrade=FORCE
MySQL会升级所有的内容,这会检查所有schema的所有对象,导致MySQL需要更长的时间启动。此模式下MySQL会重新创建系统表if they are missing
。
[[email protected] ~]# /home/application/mysql/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --upgrade=FORCE
2023-10-30T07:33:23.595626Z mysqld_safe Logging to '/home/application/mysql/mysql-error.log'.
2023-10-30T07:33:23.620303Z mysqld_safe Starting mysqld daemon with databases from /home/application/mysql/data
会一直卡住不用担心
新开一个窗口,可观察下错误日志看是否报错/home/application/mysql/mysql-error.log
然后登录数据库测试
[[email protected] ~]# mysql -uroot -p'srebro'
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.34 MySQL Community Server - GPL
Copyright (c) 2000, 2022, 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 '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.34 |
+-----------+
1 row in set (0.00 sec)
mysql>
6.3 修改Mysql环境变量
由于basedir 从/home/application/mysql/app
变成了 /home/application/mysql/mysql8
,需要修改下环境变量信息:
[[email protected] ~]# vim /etc/profile
export PATH=$PATH:/home/application/mysql/mysql8/bin
.......
#使环境变量生效
[[email protected] ~]# source /etc/profile
#验证下mysql环境变量
#退出当前终端
[[email protected] ~]# exit
[[email protected] ~]# which mysql
/home/application/mysql/mysql8/bin/mysql
[[email protected] ~]# mysql -V
mysql Ver 8.0.34 for Linux on x86_64 (MySQL Community Server - GPL)
6.4 停止mysqld_safe进程,使用systemd管理Mysql8
[root@cmdb ~]# kill -9 `ps -ef | grep mysql | awk '{print $2}'`
#确认没有mysql进程
[root@cmdb ~]# ps -ef | grep mysql
#使用systemd管理mysql8
#修改原先的ExecStart中,basedir的路径,改为mysql8 的路径
[root@cmdb ~]# vim /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/home/application/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 65535
6.5 配置mysql8开机自启&启动mysql8
#reload下systemd
[root@cmdb ~]# systemctl daemon-reload
#加入开机自启动
[root@cmdb ~]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /etc/systemd/system/mysqld.service.
#启动mysql8数据库
[root@cmdb ~]# systemctl start mysqld
[root@cmdb ~]# ps -ef | grep mysql
mysql 9497 1 36 14:59 ? 00:00:01 /home/application/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf
root 9544 8560 0 14:59 pts/0 00:00:00 grep --color=auto mysql
#登录数据库验证
[root@cmdb ~]# mysql -uroot -p'srebro'
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.34 MySQL Community Server - GPL
Copyright (c) 2000, 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 '\h' for help. Type '\c' to clear the current input statement.
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.34 |
+-----------+
1 row in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| srebro |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql>
七、一些问题
7.1 问题一
在升级Mysql8.0
后,关于JDBC中SSL连接的一些报错信息,如下图:
经排查发现,Mysql8.0
数据库默认开启了SSL
认证,且之前Mysql5.7.39
也是默认开启了SSL
认证,代码和JDBC
驱动版本都没有变化,那很有可能就是Mysql8.0
中对于SSL
的一个变化,咨询了DBA 朋友,专业的解释是,在5.7.31
的时候SSL在源码中貌似没有真正的起作用,后面版本完善了这块的内容。倘若,不使用SSL
去连接,就 需要按照如下的方法去处理:
方法一: 从数据库成面,直接在my.cnf 中 添加skip_ssl
参数,从源头上关闭SSL 认证的方式
方法二: 从代码层面,在JDBC
连接中,使用 &useSSL=false
参数,表示不使用SSL 认证
7.2 问题二
Mysql 报错unblock with ‘mysqladmin flush-hosts’,报错如下:
JDBC连接报错,报错内容 ERROR 1129 (HY000): Host ‘192.168.1.34’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’
原因
: 同一个ip在短时间内产生太多,中断的数据库连接而导致的阻塞;而中断的因为有些业务使用SSL
去连接数据库,导致登录失败,登录被锁;
临时解决方法,使用mysqladmin flush-hosts
命令清理一下hosts文件,mysqladmin -u xxx -p flush-hosts
,根本上去解决,就需要排查什么异常的连接导致阻塞,登录被锁,比如上面提到的SSL
认证的问题。
八、参考
https://www.modb.pro/db/1715541568826990592
https://www.modb.pro/db/530848
https://www.modb.pro/db/1716302208709517312
你可能感兴趣的:(centos,mysql,数据库)
Vmware-RabbitMQ安装
菜逼の世界
VMware Vmware RabbitMQ
RabbitMQ操作系统:CentOS7.9更新系统更新你的系统包列表和已安装的包。yumupdate安装EPEL仓库(若需要)RabbitMQ的某些依赖包可能不在默认的CentOS/RHELYUM仓库中,因此你可能需要安装EPEL(ExtraPackagesforEnterpriseLinux)仓库。[root@test-2~]#yuminstallepel-release已加载插件:faste
关于YII2使用mssql/SqlServer的问题
aisicongg
yii SqlServer
场景:配置了多个db连接,包含mysql和mssql等多个。本人在配置使用mssql的的过程中发现表名和字段名自动转义成`分隔符。例如SELECT`id`,`username`FROM`user`该语句在mssql是无法执行的,因为mssql不支持`分隔符,这个时候你需要在yii2调用的时候指定对应的配置db,比如我的申请了SqlServer是db2,那么我的写法如下:$query->create
mysql:破解数据库的密码!!!
qq_41051690
mysql 燕十八 运维
如何破解数据库的密码?步骤如下:(1)通过任务管理器或着服务器管理,关掉mysqld进程;(2)通过命令行+特殊参数开启mysqld;(3)此时,mysqld服务进程已经打开,并且不需要权限检查;(4)mysql-uroot无密码登陆服务器;(5)修改权限表A:usemysql;B:updateusersetPassword=password(‘111111’)whereUser=’root’;C
Yii2 连接SqlServer(windows)
aaa阿阿qiu~~
php环境 windows sqlserver php
最开始的问题:连接mysql没问题,连接sqlserver一直不行,但是在客户端可以连接,说明肯定程序或者是扩展哪里没弄对,就一直报couldnotfinddriver这个错误1、php扩展,可以使用phpinfo()来查看是否成功加载了pdo_sqlsrv模块,没问题扩展下载链接地址:https://docs.microsoft.com/zh-cn/sql/connect/php/release
ubuntu/centos环境下玩android系统(二): linux下的android模拟器运行!
刀客777
linux开发 android linux path swt list java
上一篇完成了Android的编译,想必一定心里痒痒了!这一篇将开始玩转android模拟器!如果不喜欢在linux下运行emulator,可直接看第三篇,第三篇讲述windows下的模拟器,相对linux下,要简单很多!一.下载AndoirdSDK,这次我选择的是android-sdk_r15-linux.tgz安装很简单,直接解压到opt目录下!最好配制一下PATH,以便运行时不用设置PATH环
全平台QQ聊天数据库解密项目常见问题解决方案
管旭韶
全平台QQ聊天数据库解密项目常见问题解决方案qq-win-db-keyQQNT/WindowsQQ聊天数据库解密项目地址:https://gitcode.com/gh_mirrors/qq/qq-win-db-key项目基础介绍本项目是一个开源项目,旨在为用户提供全平台QQ聊天数据库的解密方法。项目主要使用Python、JavaScript和C++等编程语言实现。新手常见问题及解决步骤问题一:如何
RAG技术栈详解:构建智能问答系统的核心组件
认知超载
AI 人工智能
本文深度剖析RAG(Retrieval-AugmentedGeneration)技术栈的核心构成,助你快速搭建企业级知识增强系统一、RAG技术架构全景图二、核心组件技术选型1.检索模块(Retriever)向量数据库主流选择:Pinecone、Milvus、Qdrant、Weaviate新兴势力:ChromaDB(开源轻量级)、腾讯云向量数据库嵌入模型(Embedding)OpenAItext-e
微调 || RAG,项目落地怎么选?LLM应用选型指南,适用场景全解析
认知超载
AI 人工智能
基本定义微调:是指利用更小、更具针对性的数据集对经过预先训练的大语言模型进一步训练的过程。在这个过程中,模型基于新数据集修改权重和参数,学习特定于任务的模式,同时保留来自最初预训练模型的知识。RAG:即检索增强生成,是将检索大量外部知识的过程与文本生成结合在一起的一种方法。它会从大型外部数据库中检索与输入问题相关的信息,将这些信息作为上下文提供给大语言模型,辅助其生成回答。微调适用场景1.特定领域
MySQL(114)如何进行数据库负载均衡?
辞暮尔尔-烟火年年
MySQL 数据库 mysql 负载均衡
为了进行数据库负载均衡,我们可以使用SpringBoot和MySQL,并结合AbstractRoutingDataSource来实现数据源的动态切换。下面的实现包括配置多数据源、定义数据源上下文和实现负载均衡策略(如轮询和随机)。项目依赖首先在pom.xml中添加必要的依赖:org.springframework.bootspring-boot-starter-data-jpamysqlmysql
GoldenDB简述
GoldenDB是国产的分布式数据库。它解决了分布式事务一致性问题。底层存储采用的是SharedNothing不共享数据(分片式存储)的分布式架构,各自节点持有各自的数据。不共享彼此数据,还有其他两种分布式架构,分别是Sharedisk,共享磁盘,例如NFS,网络文件系统,采用的就是这种架构。NFS是一种基于客户端-服务器架构的文件系统。它通过网络,特别是局域网,让多台计算机可以共享文件和目录。还
用鸿蒙打造真正的跨设备数据库:从零实现分布式存储
网罗开发
HarmonyOS 实战源码 实战 harmonyos 数据库 分布式
网罗开发(小红书、快手、视频号同名) 大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、HarmonyOS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。图书作者:《ESP32-C3物联网工程开发实战》图书作者:《SwiftUI入门,进阶与实战》超级个体:CO
MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?
Chen-Edward
数据库 mysql android 数据库
MySQLInnoDB引擎中的聚簇索引和非聚簇索引有什么区别?主要解答详细解答1.**聚簇索引(ClusteredIndex)**2.**非聚簇索引(Non-ClusteredIndex/SecondaryIndex)**3.**对比总结**4.**流程图(查询过程对比)**知识拓展与延伸1.**如何选择主键和索引**2.**Java后端开发中的应用**3.**常见误区**主要解答在MySQL的I
mysql数据一致性
前言美团酒店直连项目自2013年末开始,通过业务上的不断完善和技术上的不断改进,至今已经接入200多家供应商,其中在线酒店3万以上,在线SPU30万以上。经过两年的成长,美团酒店直连平台终于在2015年末发展为国内最大的酒店直连业务平台,其接入的业务类型也从最初的经济连锁,拓展到高星渠道、小连锁集团、非标准住宿等,获得了业界一致好评。随着美团点评的日益壮大,客户的需求和系统体量的不断增加,直连平台
性能分析与调优详解
测试老哥
测试工具 python 软件测试 自动化测试 性能测试 测试用例 职场和发展
点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快常看到性能测试书中说,性能测试不单单是性能测试工程师一个人的事儿。需要DBA、开发人员、运维人员的配合完成。但是在不少情况下性能测试是由性能测试人员独立完成的,退一步就算由其它人员的协助,了解系统架构的的各个模块对于自身的提高也有很大帮助,同进也更能得到别人的尊重。性能分析与调优如何下手先从硬件开始,还是先从代码或数据库。从操作系统(CP
【赵渝强老师】达梦数据库的闪回技术
数据库达梦数据库信创
达梦数据库提供的闪回技术主要是在数据库发生逻辑错误的时候,能提供快速且最小损失的恢复。闪回技术旨在快速恢复数据库的逻辑错误。对于物理介质的损坏或者物理文件丢失,就不能使用闪回进行恢复。闪回特性可应用在以下方面:自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复。用于分析数据变化:可以对同一张表的不同闪回时刻进行链接查询,以此查
知识积累----空转转录因子TF活性的计算框架
追风少年ii
空间 数据分析 hotspot 傅里叶变换 机器学习
作者,EvilGenius关于我们外显子的分析课程,我们来一次预报名吧,课表如下第一节:外显子分析基础知识与框架(包括基础文件的格式等)第二节:fastq数据处理到callSNV+基础认知(简单判断谱系突变和体系突变、以及GT:AD:AF:DP等基础信息)第三节(可能需要拆分成2节课):各大数据库如何注释突变信息(clinvar、cosmic、gnomad、HGMD、hotspot、oncoKB、
大数据项目-Django基于大数据技术实现的农产品销售系统
IT实战课堂-玲琳娜
计算机毕业设计 大数据 java spark 爬虫
《[含文档+PPT+源码等]Django基于大数据技术实现的农产品销售系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、包运行成功以及课程答疑与微信售后交流群、送查重系统不限次数免费查重等福利!数据库管理工具:phpstudy/Navicat或者phpstudy/sqlyog后台管理系统涉及技术:后台使用框架:Django前端使用技术:Vue,HTML5,CSS3、JavaScrip
MongoDB 常见查询语法与命令详解
夜影风
大数据(Big Data) mongodb 数据库
MongoDB作为文档型数据库,其查询语言基于BSON(二进制JSON)格式,与传统关系型数据库的SQL语法有较大差异。一、基本查询命令1.find():查询文档语法:db.collection.find(查询条件,投影)示例://查询users集合中所有文档db.users.find()//查询年龄大于25岁的用户,只返回姓名和年龄db.users.find({age:{$gt:25}},{na
【MongoDB】基础知识全面解析:从入门到核心概念
韩悸桉
数据库 mongodb 数据库
一、MongoDB是什么?MongoDB是一种开源文档型NoSQL数据库,以灵活的JSON格式(BSON)存储数据,无需固定表结构,适合处理半结构化和非结构化数据。与传统关系型数据库(如MySQL)相比,它具有以下特点:灵活的数据模型:文档结构可动态调整,适应业务需求变化。水平扩展性:支持分片集群,轻松应对海量数据存储。高性能读写:通过索引优化和内存缓存提升查询效率。二、核心概念与术语对比Mong
Docker容器升级MySQL
Java王小怪
docker mysql 容器
目录服务升级密码重置1、找到挂载配置文件2、重启服务3、容器交互4、修改密码5、还原配置文件前言:由于项目需要,我们使用docker-compose启动的MySQL服务,原先版本为5.7.3,在服务扫描过程中,发现此版本的MySQL存在漏洞,遂决定对MySQL版本进行升级。服务升级由于库中数据还存在不少,我们并没有把原先MySQL的容器进行删除重新搞个新的,只是升级版本可以做到无痛割接。由于我的M
香港服务器查询缓存禁用-性能优化关键技术解析
cpsvps_net
linux
在香港服务器运维过程中,查询缓存禁用是提升数据库性能的关键操作。本文将深入解析禁用查询缓存的原理、操作步骤、适用场景及注意事项,帮助管理员优化MySQL服务器配置,解决高并发环境下的性能瓶颈问题。香港服务器查询缓存禁用-性能优化关键技术解析查询缓存的工作原理与性能影响香港服务器上的MySQL查询缓存(QueryCache)机制会将SELECT语句及其结果存储在内存中。当完全相同的查询再次执行时,系
塞浦路斯VPS MySQL 8.7量子安全索引测试
cpsvps_net
mysql 安全 数据库
在数字化时代背景下,数据安全已成为全球企业关注的核心议题。本文将深入解析塞浦路斯VPS环境下MySQL8.7量子安全索引的突破性测试成果,揭示其如何通过先进的加密算法重构数据库防护体系,为金融、医疗等敏感行业提供符合后量子密码学标准的解决方案。塞浦路斯VPSMySQL8.7量子安全索引测试-下一代数据库防护技术解析量子计算威胁下的数据库安全新挑战随着量子计算机的快速发展,传统加密算法正面临前所未有
MySQL对CPU的占用率很高怎么处理
半桶水专家
mysql mysql 数据库
一、确认与定位确认整体CPU使用情况top-b-n1|head-n15观察MySQL(mysqld)进程所占的%CPU。如果是多核系统,关注总和以及单核是否满载。查看系统负载uptimeLoadAverage长期高于CPU核数,说明系统压力大。查看其它进程情况psaux--sort=-%cpu|head-n10确认是否仅MySQL占用高,或与其它进程有关。二、操作系统层面排查磁盘I/O瓶颈iost
配置MySQL主从复制(一主一从)
cici15874
mysql
MySQL主从复制简介MySQL主从复制的目的是实现数据库冗余备份,将master数据库的数据定时同步到slave库中,一旦master数据库宕机,可以将Web应用数据库配置快速切换到slave数据库,确保Web应用有较高的可用性。MySQL主从同步是一个异步复制的过程,要实现复制,首先需要在master上开启bin-log日志功能,bin-log日志用于记录在master库执行的增删改更新操作的
Redis 功能扩展:Lua 脚本对 Redis 的扩展
cici15874
redis lua 数据库
Redis是一个高性能的内存数据库,支持多种数据结构,如字符串、哈希、列表、集合和有序集合。为了增强其功能,Redis引入了Lua脚本支持,使开发者可以编写自定义的脚本,确保操作的原子性并提高复杂操作的性能。本文将详细介绍如何使用Lua脚本对Redis进行扩展,重点讲解eval命令、redis.call和redis.pcall的用法。一、Lua脚本在Redis中的作用Lua脚本在Redis中的主要
数据库迁移同步 | 两地三中心到异地双活演变及关键技术探讨
沃趣数据库管理平台
技术专栏 服务器 数据库 网络 mysql 数据库迁移
两地三中心和异地多活都是分布式系统的关键技术,用于保证系统的高可用性和容错性。其中最关键的技术无疑是数据同步、同步防环和数据冲突解决。异地容灾&两地三中心两地三中心架构是一种分布式系统的架构模式,用于保证系统的高可用性和容错性。它将整个系统划分为三个数据中心:两个位于同城,一个位于异地。其中,同城的两个数据中心分别承担主备的角色,异地数据中心则作为备份。在两地三中心架构中,同城的两个数据中心之间通
Java SQLException: 解决“Got error 28 from storage engine”的5个步骤
墨瑾轩
一起学学Java【一】 java adb 开发语言
关注墨瑾轩,带你探索编程的奥秘!超萌技术攻略,轻松晋级编程高手技术宝库已备好,就等你来挖掘订阅墨瑾轩,智趣学习不孤单即刻启航,编程之旅更有趣引言在使用Java进行数据库操作时,有时会遇到java.sql.SQLException:Goterror28fromstorageengine错误。这个错误通常发生在尝试插入数据到MySQL数据库时,表示存储引擎返回了一个错误码28,这通常意味着磁盘空间不足
数据库必知必会系列:数据库连接池与连接管理
AI天才研究院
AI大模型企业级应用开发实战 大数据 人工智能 语言模型 Java Python 架构设计
作者:禅与计算机程序设计艺术1.简介随着互联网技术的飞速发展,网站流量呈爆炸性增长。对于后端服务器而言,处理大量请求通常需要依赖于高性能、高并发、海量数据等优秀的服务器硬件资源。这种情况下,如何有效地分配和管理服务器资源显得尤为重要。一个有效的方式就是采用数据库连接池技术。数据库连接池,是一种用于提升数据库访问性能的技术。它主要解决了如下两个方面的问题:由于不同线程或用户对同一个数据库的频繁访问,
多服务器文件本地上传及读取
一朵梨花压海棠go
服务器 运维
多服务器文件管理系统的实现方案在没有对象存储服务(OSS)的情况下,本文实现了一个基于多台服务器的文件管理系统。系统通过数据库表维护文件存储位置信息,主要功能包括:文件上传:检查文件大小限制,计算MD5值,按日期目录存储文件文件下载:根据ID获取文件实体,返回文件资源流文件去重:通过MD5校验避免重复存储IP管理:记录文件所在服务器IP,便于跨服务器访问系统使用SpringBoot框架实现,数据库
解决Mybatis-Plus分页插件无效,total返回0的问题
问题描述:分页失效,mapper.selectPage返回记录,total还是0,往上大多数问题都是老版本的解决方式,mybatis-plus3.4.x版本无法解决原因:mybatis-plus3.4.x貌似通过拦截器进行分页的,这里没有启用,主要原因是数据库配置没有引入,以下为代码情况:1:xml依赖情况com.baomidoumybatis-plus-boot-starter3.4.32:增加
关于旗正规则引擎下载页面需要弹窗保存到本地目录的问题
何必如此
jsp 超链接 文件下载 窗口
生成下载页面是需要选择“录入提交页面”,生成之后默认的下载页面<a>标签超链接为:<a href="<%=root_stimage%>stimage/image.jsp?filename=<%=strfile234%>&attachname=<%=java.net.URLEncoder.encode(file234filesourc
【Spark九十八】Standalone Cluster Mode下的资源调度源代码分析
bit1129
cluster
在分析源代码之前,首先对Standalone Cluster Mode的资源调度有一个基本的认识:
首先,运行一个Application需要Driver进程和一组Executor进程。在Standalone Cluster Mode下,Driver和Executor都是在Master的监护下给Worker发消息创建(Driver进程和Executor进程都需要分配内存和CPU,这就需要Maste
linux上独立安装部署spark
daizj
linux 安装 spark 1.4 部署
下面讲一下linux上安装spark,以 Standalone Mode 安装
1)首先安装JDK
下载JDK:jdk-7u79-linux-x64.tar.gz ,版本是1.7以上都行,解压 tar -zxvf jdk-7u79-linux-x64.tar.gz
然后配置 ~/.bashrc&nb
Java 字节码之解析一
周凡杨
java 字节码 javap
一: Java 字节代码的组织形式
类文件 {
OxCAFEBABE ,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组
}
&nbs
java各种小工具代码
g21121
java
1.数组转换成List
import java.util.Arrays;
Arrays.asList(Object[] obj); 2.判断一个String型是否有值
import org.springframework.util.StringUtils;
if (StringUtils.hasText(str)) 3.判断一个List是否有值
import org.spring
加快FineReport报表设计的几个心得体会
老A不折腾
finereport
一、从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度。否则每次设计时模板均要从远程读取数据,速度相当慢!!
二、找一个富文本编辑软件(如NOTEPAD+)编辑SQL语句,这样会很好地检查语法。有时候带参数较多检查语法复杂时,结合FineReport中生成的日志,再找一个第三方数据库访问软件(如PL/SQL)进行数据检索,可以很快定位语法错误。
mysql linux启动与停止
墙头上一根草
如何启动/停止/重启MySQL一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start3、使用 safe_mysqld 启动:safe_mysqld&二、停止1、使用 service 启动:service mysqld stop2、使用 mysqld 脚本启动:/etc/inin
Spring中事务管理浅谈
aijuans
spring 事务管理
Spring中事务管理浅谈
By Tony Jiang@2012-1-20 Spring中对事务的声明式管理
拿一个XML举例
[html]
view plain
copy
print
?
<?xml version="1.0" encoding="UTF-8"?>&nb
php中隐形字符65279(utf-8的BOM头)问题
alxw4616
php中隐形字符65279(utf-8的BOM头)问题
今天遇到一个问题. php输出JSON 前端在解析时发生问题:parsererror.
调试:
1.仔细对比字符串发现字符串拼写正确.怀疑是 非打印字符的问题.
2.逐一将字符串还原为unicode编码. 发现在字符串头的位置出现了一个 65279的非打印字符.
 
调用对象是否需要传递对象(初学者一定要注意这个问题)
百合不是茶
对象的传递与调用技巧
类和对象的简单的复习,在做项目的过程中有时候不知道怎样来调用类创建的对象,简单的几个类可以看清楚,一般在项目中创建十几个类往往就不知道怎么来看
为了以后能够看清楚,现在来回顾一下类和对象的创建,对象的调用和传递(前面写过一篇)
类和对象的基础概念:
JAVA中万事万物都是类 类有字段(属性),方法,嵌套类和嵌套接
JDK1.5 AtomicLong实例
bijian1013
java thread java多线程 AtomicLong
JDK1.5 AtomicLong实例
类 AtomicLong
可以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicLong 可用在应用程序中(如以原子方式增加的序列号),并且不能用于替换 Long。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
 
自定义的RPC的Java实现
bijian1013
java rpc
网上看到纯java实现的RPC,很不错。
RPC的全名Remote Process Call,即远程过程调用。使用RPC,可以像使用本地的程序一样使用远程服务器上的程序。下面是一个简单的RPC 调用实例,从中可以看到RPC如何
【RPC框架Hessian一】Hessian RPC Hello World
bit1129
Hello world
什么是Hessian
The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary p
【Spark九十五】Spark Shell操作Spark SQL
bit1129
shell
在Spark Shell上,通过创建HiveContext可以直接进行Hive操作
1. 操作Hive中已存在的表
[hadoop@hadoop bin]$ ./spark-shell
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Welcom
F5 往header加入客户端的ip
ronin47
when HTTP_RESPONSE {if {[HTTP::is_redirect]}{ HTTP::header replace Location [string map {:port/ /} [HTTP::header value Location]]HTTP::header replace Lo
java-61-在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差. 求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5,
bylijinnan
java
思路来自:
http://zhedahht.blog.163.com/blog/static/2541117420116135376632/
写了个java版的
public class GreatestLeftRightDiff {
/**
* Q61.在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差。
* 求所有数对之差的最大值。例如在数组
mongoDB 索引
开窍的石头
mongoDB索引
在这一节中我们讲讲在mongo中如何创建索引
得到当前查询的索引信息
db.user.find(_id:12).explain();
cursor: basicCoursor 指的是没有索引
&
[硬件和系统]迎峰度夏
comsci
系统
从这几天的气温来看,今年夏天的高温天气可能会维持在一个比较长的时间内
所以,从现在开始准备渡过炎热的夏天。。。。
每间房屋要有一个落地电风扇,一个空调(空调的功率和房间的面积有密切的关系)
坐的,躺的地方要有凉垫,床上要有凉席
电脑的机箱
基于ThinkPHP开发的公司官网
cuiyadll
行业系统
后端基于ThinkPHP,前端基于jQuery和BootstrapCo.MZ 企业系统
轻量级企业网站管理系统
运行环境:PHP5.3+, MySQL5.0
系统预览
系统下载:http://www.tecmz.com
预览地址:http://co.tecmz.com
各种设备自适应
响应式的网站设计能够对用户产生友好度,并且对于
Transaction and redelivery in JMS (JMS的事务和失败消息重发机制)
darrenzhu
jms 事务 承认 MQ acknowledge
JMS Message Delivery Reliability and Acknowledgement Patterns
http://wso2.com/library/articles/2013/01/jms-message-delivery-reliability-acknowledgement-patterns/
Transaction and redelivery in
Centos添加硬盘完全教程
dcj3sjt126com
linux centos hardware
Linux的硬盘识别:
sda 表示第1块SCSI硬盘
hda 表示第1块IDE硬盘
scd0 表示第1个USB光驱
一般使用“fdisk -l”命
yii2 restful web服务路由
dcj3sjt126com
PHP yii2
路由
随着资源和控制器类准备,您可以使用URL如 http://localhost/index.php?r=user/create访问资源,类似于你可以用正常的Web应用程序做法。
在实践中,你通常要用美观的URL并采取有优势的HTTP动词。 例如,请求POST /users意味着访问user/create动作。 这可以很容易地通过配置urlManager应用程序组件来完成 如下所示
MongoDB查询(4)——游标和分页[八]
eksliang
mongodb MongoDB游标 MongoDB深分页
转载请出自出处:http://eksliang.iteye.com/blog/2177567 一、游标
数据库使用游标返回find的执行结果。客户端对游标的实现通常能够对最终结果进行有效控制,从shell中定义一个游标非常简单,就是将查询结果分配给一个变量(用var声明的变量就是局部变量),便创建了一个游标,如下所示:
> var
Activity的四种启动模式和onNewIntent()
gundumw100
android
Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Android总Activity的启动模式分为四种:
Activity启动模式设置:
<acti
攻城狮送女友的CSS3生日蛋糕
ini
html Web html5 css css3
在线预览:http://keleyi.com/keleyi/phtml/html5/29.htm
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>攻城狮送女友的CSS3生日蛋糕-柯乐义<
读源码学Servlet(1)GenericServlet 源码分析
jzinfo
tomcat Web servlet 网络应用 网络协议
Servlet API的核心就是javax.servlet.Servlet接口,所有的Servlet 类(抽象的或者自己写的)都必须实现这个接口。在Servlet接口中定义了5个方法,其中有3个方法是由Servlet 容器在Servlet的生命周期的不同阶段来调用的特定方法。
先看javax.servlet.servlet接口源码:
package
JAVA进阶:VO(DTO)与PO(DAO)之间的转换
snoopy7713
java VO Hibernate po
PO即 Persistence Object VO即 Value Object
VO和PO的主要区别在于: VO是独立的Java Object。 PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中。
实际上,这个VO被用作Data Transfer
mongodb group by date 聚合查询日期 统计每天数据(信息量)
qiaolevip
每天进步一点点 学习永无止境 mongodb 纵观千象
/* 1 */
{
"_id" : ObjectId("557ac1e2153c43c320393d9d"),
"msgType" : "text",
"sendTime" : ISODate("2015-06-12T11:26:26.000Z")
java之18天 常用的类(一)
Luob.
Math Date System Runtime Rundom
System类
import java.util.Properties;
/**
* System:
* out:标准输出,默认是控制台
* in:标准输入,默认是键盘
*
* 描述系统的一些信息
* 获取系统的属性信息:Properties getProperties();
*
*
*
*/
public class Sy
maven
wuai
maven
1、安装maven:解压缩、添加M2_HOME、添加环境变量path
2、创建maven_home文件夹,创建项目mvn_ch01,在其下面建立src、pom.xml,在src下面简历main、test、main下面建立java文件夹
3、编写类,在java文件夹下面依照类的包逐层创建文件夹,将此类放入最后一级文件夹
4、进入mvn_ch01
4.1、mvn compile ,执行后会在