一、前言
事出必有因,在这个月的某个项目中,我们面临了一项重要任务,即每年一次的等保测评整改。这次测评的重点是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,数据库)
为什么wal会 提升数据库性能
浩澜大大
数据库
由于对于一个数据库内会存在很多张表,那么当数据库更新表数据时(1)直接写入磁盘实际写入的位置,会根据表的不同对应到不同的磁盘位置,在写入数据的时候,就会不停的寻找磁盘地址,找到地址后再去写入,对于机械硬盘来说,无规律的寻址是非常耗时的,对应SSD来说虽然性能提升很多,但是也会消耗时间;(2)先写入日志,在写入磁盘(WAL)WAL的过程,由于总是按照在文件末尾追加,只要找到文件写入位置,写入修改后,
unblock with ‘mysqladmin flush-hosts‘ 解决方法
祈祷平安,加油
数据库常见问题 oracle 数据库
MySqlHostisblockedbecauseofmanyconnectionerrors;unblockwith'mysqladminflush-hosts'解决方法环境:linux,mysql5.5.21错误:Hostisblockedbecauseofmanyconnectionerrors;unblockwith'mysqladminflush-hosts'原因:同一个ip在短时间内产
通俗易懂:MySQL中如何设置只读实例并确保数据一致性?
大龄下岗程序员
mysql java mysql spring
在MySQL中设置只读实例主要应用于构建高可用性和扩展性的数据库环境,通常是为了分担读取负载或者用于备份和灾难恢复。以下是创建MySQL只读实例并确保数据一致性的基本步骤:1.创建并配置只读实例-主从复制设置-首先,你需要有一个主数据库实例(Master)负责接收所有的写操作。-创建一个或多个从数据库实例(Slave),并将它们配置为主数据库的复制品。这通常通过设置主从复制(Replication
C#中的PLINQ和LINQ的效率对比
搬砖的诗人Z
C# c# linq 开发语言
PLINQ(ParallelLINQ)和LINQ(LanguageIntegratedQuery)都是.NET框架中的功能,用于对集合进行查询和操作。它们之间的主要区别在于并行处理能力。LINQ:LINQ是一种用于在.NET应用程序中进行数据查询和操作的语言集成功能。它提供了一种统一的方式来查询各种数据源,如集合、数组、XML、数据库等。LINQ是在单线程环境中执行查询操作的,因此对于大型数据集或
Redis和MySQL的数据一致性问题思考
爱放火的安小妮
Redis MySQL 思考总结 redis mysql 数据库
Redis和MySQL的数据一致性问题思考最近有在反思自己工作。因为自己这边是面向业务的,而且是和商品数据相关的。所以我平时工作中涉及到的最多的就是MySQL和Redis的数据存储。像我们配置商品是把商品配置到MySQL,但是对外toC接口都是直接读取Redis的。所以自然而然就涉及到MySQL和Redis的数据一致性问题。下面就是聊聊我自己对于这个问题的一个思考吧。有问题或者有更好方案的朋友也希
docker怎么端口映射
Lance_mu
docker 容器 运维
1、默认固定的端口#Web服务器:WebApache或Nginx通常使用80端口HTTP:80HTTPS:443#数据库服务器MySQL:3306PostgreSQL:5432MongoDB:27017Redis:6379#邮件服务器SMTP:25POP3:110IMAP:143#其他服务SSH:22FTP:21DNS(域名解析):53代理服务器Squid:3128版本控制系统Git:9418(S
新注册的阿里云账号有哪些优惠?阿里云新用户必看优惠大合集
阿里云最新优惠和活动汇总
很多用户看到阿里云各种活动中的云服务器、云数据库、企业邮箱等云产品都仅限新用户购买之后,都纷纷直接注册了阿里云新账号之后购买,其实,阿里云新用户不仅可以优惠购买活动中的各种云产品,还有很多优惠,下面是“阿里云最新优惠和活动汇总”整理汇总的阿里云新用户必看优惠大合集。新注册的阿里云账号在购买活动中的云产品之前,还有免费领云产品通用代金券、抽取无门槛代金券、免费试用云服务器和正式购买云服务器等阿里云产
MyBatis高级面试题-2024
my_styles
mybatis java 开发语言 面试题
MyBatis的核心组件有哪些?首先第一个是,SqlSessionFactory,它就像是一个会话工厂。它的任务是创建SqlSession对象,这个对象是我们与数据库交互的主要途径。SqlSessionFactory的作用很重要,因为它可以帮我们配置数据库连接信息和事务管理等。一旦这个工厂被建立起来,它就会加载一些必要的配置和映射文件,为后续的数据库操作提供一个可靠的基础。第二个是SqlSessi
SQLite版本3中的文件锁定和并发(七)
代码工匠云
数据库 SQLite C与c++ sqlite c++ 数据库
返回:SQLite—系列文章目录上一篇:自己编译SQLite或将SQLite移植到新的操作系统(六)下一篇:SQLite—系列文章目录正文:1.0SQLite版本3中的文件锁定和并发SQLite版本3.0.0引入了新的锁定和日志功能旨在提高SQLite版本2的并发性的机制并减少作家的饥饿问题。新机制还允许交易的原子提交涉及多个数据库文件。本文档介绍新的锁定机制。目标受众是想要理解和/或修改的程序员
python转码
Desamond
python 开发语言
转码在许多场景中都有应用,以下是一些常见的场景:网页开发:当用户在网页上输入文本时,可能需要将特殊字符(如空格、引号、特殊符号等)进行转码,以防止这些字符对URL或HTML代码产生干扰。文件名处理:在处理文件名时,可能需要将特殊字符进行转码,以避免文件名被错误地解析或显示。数据传输:在数据传输过程中,为了确保数据的完整性和正确性,可能需要将数据中的特殊字符进行转码。数据存储:在数据库或数据存储中,
linux安装docker及docker-compose 部署spring boot项目
时而有事儿
docker linux docker linux spring boot
linux系统环境:centos5.14本篇描述的是在centos系统版本下安装docker,如果是ubuntu版本,请看这篇文章:linuxubuntu20安装docker和docker-compose-CSDN博客正文:安装docker和docker-compose安装docker---------运行命名等待安装完成遇到选择直接输入yyuminstall-yyum-utilsdevice-m
Python | Redis工具类
-拟墨画扇-
Python redis 数据库 缓存 python
一、需求自动连接Redis数据库,通过连接池处理数据对输出结果进行Log打印并保存到文件二、代码Utils.redisUtils.py#!/usr/bin/envpython#-*-coding:utf-8-*-importredisfromUtils.loggerimportlog"""Redis数据格式(1)字符串|存储形式:key-value:str-存储二进制数据:可以存储任意类型的数据,
数据管理知识体系指南(第二版)-第五章——数据建模和设计-学习笔记
键盘上的五花肉
数据治理 数据库 数据仓库 数据治理
目录5.1引言5.1.1业务驱动因素5.1.2目标和原则5.1.3基本概念5.2活动5.2.1规划数据建模5.2.2建立数据模型5.2.3审核数据模型5.2.4维护数据模型5.3工具5.3.1数据建模工具5.3.2数据血缘工具5.3.3数据分析工具5.3.4元数据资料库5.3.5数据模型模式5.3.6行业数据模型5.4方法5.4.1命名约定的最佳实践5.4.2数据库设计中的最佳实践5.5数据建模和
项目管理工具最佳实践
水岩
各个公司的最佳实践去哪儿jira自定义使用1.jira编号对应git分支命名,后台增加监控程序,新增一个分支,自动解析分支中的jira编号,自动落地到数据库,完成映射2.各个发布系统间信息同步,消息中心(IC)+数据中心(DC),广播消息加一站式查询,持续集成,推进代码检查质量,分钟级反馈质量检查反思:1.项目管好:针对一线研发人员,简单易用,而不是满足管理层的“统计度量”(...)简化分类字段,
高阶SQL语句(二)
www.mcb.com
数据库 mysql
一子查询也被称作内查询或者嵌套查询,是指在一个查询语句里面还嵌套着另一个查询语句。子查询语句是先于主查询语句被执行的,其结果作为外层的条件返回给主查询进行下一步的查询过滤。①子语句可以与主语句所查询的表相同,也可以是不同表②子语句中的sql语句是为了,最后过滤出一个结果集,用于主语句的判断条件③in:将主表和子表关联/连接的语法环境准备:mysql>usekgc_ky35;Readingtable
Python Flask 使用数据库
安果移不动
python flask 开发语言
pipinstallflask_sqlalchemy官方文档:Flask-SQLAlchemy—Flask-SQLAlchemyDocumentation(3.1.x)为了不报错也需要导入另外两个库#pipinstallflask_sqlalchemy#pipinstallmysqlclient完整代码importosfromflaskimportFlaskfromflask_sqlalchemy
.NET Core 将实体类转换为 SQL(ORM 映射)
你小子在看什么……
.NET .netcore sqlsugar postgresql
一、环境说明PostgreSQL数据库Npgsql数据库连接库SqlSugarORM框架二、映射流程1、创建数据库:检查指定数据库是否存在,如果不存在则创建数据库。2、初始化SqlSugar实例:使用SqlSugarClient初始化数据库连接配置。3、筛选实体类:根据指定的命名空间和排除条件筛选需要创建表的实体类。4、创建表:使用CodeFirst.InitTables方法创建数据库表。////
第七章 索引及执行计划,存储引擎
执笔为剑
# MySQL运维篇 编辑器 mysql
第七章索引及执行计划,存储引擎1,索引及执行计划1,作用:提供类似书目录的作用,目的是优化查询2,所用的种类(根据算法)B树索引Hash索引R树FulltextGIS3,B树基于不同的查找算法分类介绍B-tree:在范围查询方面提供了更好的性能(>showengines;#存储引擎作用在表上,不同的表可能有不同的存储引擎mysql>select@@default_storage_engine;#查
数据库的魅力:深入探索与应用
小黄编程快乐屋
数据库
数据库的魅力:深入探索与应用在数字化时代,数据库已经成为信息处理和存储的基石。无论是大型企业还是个人开发者,数据库都是不可或缺的工具。本文将带您深入探索数据库的魅力,了解其基本概念、类型以及应用,并分享一些实用的数据库管理技巧。一、数据库的基本概念数据库,简而言之,就是按照一定规则存储、组织和管理数据的仓库。它可以看作是一个电子化的文件柜,用于存储电子化的文件。这些文件按照特定的数据模型组织起来,
Thinkphp - 详细实现网站系统登录功能,附带 Mysql 数据库设置、Web 前端展示界面、信息校验等(详细代码,即设计过程)
王佳斌
+ Thinkphp mysql 前端 数据库
前言登录功能,是我们几乎开发每个系统都必须的模块。登录功能设计思路,主要包括几个方面。用户输入网址展示登录页面用户输入用户名,密码等点击登录进行信息校验校验通过之后,记录用户登录信息,跳转指定页面用户校验失败,提示失败信息页面目录具体功能实现为了快速搭建可用、美观的页面,我们采用一个比较成熟的前端框架Bootstrap。下面我们到Bootstrap的官网Bootsrap官网下载bootstrap。
设置mysql 数据库和表 的编码方式UTF-8
盖盖衍上
中间件 数据库 mysql oracle
要设置MySQL数据库表和字段的编码方式为UTF-8,可以使用下面的SQL语句:1.设置数据库默认编码为UTF-8:ALTERDATABASEyour_database_nameCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;2.创建表时指定编码为UTF-8:CREATETABLEyour_table_name(column1VARCHAR(100)CHA
【二】【设计模式】建造者模式
妖精七七_
设计模式 设计模式 建造者模式
建造者模式的引入//C10_1.cpp#include#include"SystemConfig.h"intmain(){SystemConfigconfig("mysql://127.0.0.1/","xiaomu","xiaomumemeda","redis://127.0.0.1/","xiaomuredis","xiaomuredispw","kafka://127.0.0.1","xia
Linux(centos7)部署hive
灯下夜无眠
Linux linux hive 运维 dbeaver hive客户端
前提环境:已部署完hadoop(HDFS、MapReduce、YARN)1、安装元数据服务MySQL切换root用户#更新密钥rpm--importhttps://repo.mysql.com/RPM-GPG-KEY-mysqL-2022#安装Mysqlyum库rpm-Uvhhttp://repo.mysql.com//mysql57-community-release-el7-7.noarch.
kafka-eagle 配置文件修改使用自带的数据库
bright future cheer
kafka 数据库 分布式
######################################multizookeeper&kafkaclusterlistSettingsprefixedwith‘kafka.eagle.’willbedeprecated,use‘efak.’instead######################################efak.zk.cluster.alias=clu
mysql 常见数据表操作
天狼1222
mysql系列 mysql 数据库
前面介绍了数据库表的基本操作。把常用的做一个汇总。时间久了,记不得完整的语法了,再打开一看,就清楚了。1,表操作1,建表+注释CREATETABLEstudent(idINTPRIMARYKEYAUTO_INCREMENTCOMMENT'学号',nameVARCHAR(200)COMMENT'姓名',ageINTCOMMENT'年龄')COMMENT='学生表'2,修改注释--修改表注释-ALTE
通俗易懂:描述MySQL中SET和ENUM数据类型的异同。
大龄下岗程序员
mysql java mysql spring
MySQL中的SET和ENUM数据类型均用于限制字段可接受的值范围,但它们的设计用途和功能特性有所不同:SET类型-SET是一种集合类型,它可以存储一组预定义的离散值,并且在一个SET字段中可以同时存储多个值。-SET字段内的值是互斥的,即同一时间不会存在相同的元素两次,但可以有多个不同的元素组合。-值之间的分隔通常用逗号(,)或其他指定字符。-SET类型的字段最大可以容纳64个不同的成员值。-在
GROM学习
码小白l
golang
什么是GROMGo语言ORM(对象关系映射)库,它提供了一种高效、简洁的方式来操作数据库。通过将数据库表映射为Go语言的结构体,GORM让数据库操作变得更加直观和类型安全。GORM支持主流的数据库系统,包括MySQL、PostgreSQL、SQLite和SQLServer等GORM提供了一系列的API来操作MySQL数据库。以下是一些常用的GORMAPI操作,以及它们在操作MySQL时的用法:安装
centos7 安装influxdb+telegraf+grafana 监控服务器
吕吕-lvlv
grafana 服务器 运维
influxdbinfluxdb是一个时间序列数据库,所有数据记录都会打上时间戳,适合存储数字类型的内容telegraftelegraf可以用于收集系统和服务的统计数据并发送到influxdbgrafanagrafana是一个界面非常漂亮,可直接读取influxdb数据展示成各种图表的开源可视化web软件安装并启动influxdb数据库vim/etc/yum.repos.d/influxdb.re
CentOS7使用firewalld打开关闭防火墙与端口
gurlan
1、firewalld的基本使用启动:systemctlstartfirewalld关闭:systemctlstopfirewalld查看状态:systemctlstatusfirewalld开机禁用:systemctldisablefirewalld开机启用:systemctlenablefirewalld2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service
Mysql数据库MariaDB数据库MHA高可用程序
yichen_china
声明:本次实验使用的是MariaDB数据库,所以本文中所出现的MariaDB与MySQL都是指的是MariaDB!!!MHA(MasterHA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automatingmasterfailover功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过于其它从节
关于旗正规则引擎下载页面需要弹窗保存到本地目录的问题
何必如此
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 ,执行后会在