MySQL8.0新特性的总结(附代码)

本篇文章给大家带来的内容是关于MySQL8.0新特性的总结(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1、 默认字符集由latin1变为utf8mb4

在8.0版本之前,默认字符集为latin1,utf8指向的是utf8mb3,8.0版本默认字符集为utf8mb4,utf8默认指向的也是utf8mb4。

(推荐:MySQL教程)

2. MyISAM系统表全部换成InnoDB表

系统表全部换成事务型的innodb表,默认的MySQL实例将不包含任何MyISAM表,除非手动创建MyISAM表。

# MySQL 5.7mysql> select distinct(ENGINE) from information_schema.tables;+--------------------+| ENGINE             |+--------------------+| MEMORY             || InnoDB             || MyISAM             || CSV                || PERFORMANCE_SCHEMA || NULL               |+--------------------+6 rows in set (0.00 sec) # MySQL 8.0mysql> select distinct(ENGINE) from information_schema.tables;+--------------------+| ENGINE             |+--------------------+| NULL               || InnoDB             || CSV                || PERFORMANCE_SCHEMA |+--------------------+4 rows in set (0.00 sec)

3. 自增变量持久化

在8.0之前的版本,自增主键AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重启后,会重置AUTO_INCREMENT=max(primary key)+1,这种现象在某些情况下会导致业务主键冲突或者其他难以发现的问题。自增主键重启重置的问题很早就被发现(https://bugs.mysql.com/bug.ph…),一直到8.0才被解决,8.0版本将会对AUTO_INCREMENT值进行持久化,MySQL重启后,该值将不会改变。

4. DDL原子化

InnoDB表的DDL支持事务完整性,要么成功要么回滚,将DDL操作回滚日志写入到data dictionary 数据字典表 mysql.innodb_ddl_log 中用于回滚操作,该表是隐藏的表,通过show tables无法看到。通过设置参数,可将ddl操作日志打印输出到mysql错误日志中。

mysql> set global log_error_verbosity=3;mysql> set global innodb_print_ddl_logs=1;mysql> create table t1(c int) engine=innodb; # MySQL错误日志:2018-06-26T11:25:25.817245+08:00 44 [Note] [MY-012473] [InnoDB] InnoDB: DDL log insert : [DDL record: DELETE SPACE, id=41, thread_id=44, space_id=6, old_file_path=./db/t1.ibd]2018-06-26T11:25:25.817369+08:00 44 [Note] [MY-012478] [InnoDB] InnoDB: DDL log delete : by id 412018-06-26T11:25:25.819753+08:00 44 [Note] [MY-012477] [InnoDB] InnoDB: DDL log insert : [DDL record: REMOVE CACHE, id=42, thread_id=44, table_id=1063, new_file_path=db/t1]2018-06-26T11:25:25.819796+08:00 44 [Note] [MY-012478] [InnoDB] InnoDB: DDL log delete : by id 422018-06-26T11:25:25.820556+08:00 44 [Note] [MY-012472] [InnoDB] InnoDB: DDL log insert : [DDL record: FREE, id=43, thread_id=44, space_id=6, index_id=140, page_no=4]2018-06-26T11:25:25.820594+08:00 44 [Note] [MY-012478] [InnoDB] InnoDB: DDL log delete : by id 432018-06-26T11:25:25.825743+08:00 44 [Note] [MY-012485] [InnoDB] InnoDB: DDL log post ddl : begin for thread id : 442018-06-26T11:25:25.825784+08:00 44 [Note] [MY-012486] [InnoDB] InnoDB: DDL log post ddl : end for thread id : 44

来看另外一个例子,库里只有一个t1表,drop table t1,t2; 试图删除t1,t2两张表,在5.7中,执行报错,但是t1表被删除,在8.0中执行报错,但是t1表没有被删除,证明了8.0 DDL操作的原子性,要么全部成功,要么回滚。

# MySQL 5.7mysql> show tables;+---------------+| Tables_in_db |+---------------+| t1            |+---------------+1 row in set (0.00 sec)mysql> drop table t1, t2;ERROR 1051 (42S02): Unknown table 'db.t2'mysql> show tables;Empty set (0.00 sec) # MySQL 8.0mysql> show tables;+---------------+| Tables_in_db |+---------------+| t1            |+---------------+1 row in set (0.00 sec)mysql> drop table t1, t2;ERROR 1051 (42S02): Unknown table 'db.t2'mysql> show tables;+---------------+| Tables_in_db |+---------------+| t1            |+---------------+1 row in set (0.00 sec)

5. 参数修改持久化

MySQL 8.0版本支持在线修改全局参数并持久化,通过加上PERSIST关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中,重启MySQL时,可以从该配置文件获取到最新的配置参数。
例如执行:
set PERSIST expire_logs_days=10 ;
系统会在数据目录下生成一个包含json格式的 mysqld-auto.cnf 的文件,格式化后如下所示,当 my.cnf 和 mysqld-auto.cnf 同时存在时,后者具有更高优先级。

{    "Version": 1,    "mysql_server": {        "expire_logs_days": {            "Value": "10",            "Metadata": {                "Timestamp": 1529657078851627,                "User": "root",                "Host": "localhost"            }        }    }}

6. 新增降序索引

MySQL在语法上很早就已经支持降序索引,但实际上创建的仍然是升序索引,如下MySQL 5.7 所示,c2字段降序,但是从show create table看c2仍然是升序。8.0可以看到,c2字段降序。

# MySQL 5.7mysql> create table t1(c1 int,c2 int,index idx_c1_c2(c1,c2 desc));Query OK, 0 rows affected (0.03 sec)mysql> show create table t1G*************************** 1. row ***************************       Table: t1Create Table: CREATE TABLE `t1` (  `c1` int(11) DEFAULT NULL,  `c2` int(11) DEFAULT NULL,  KEY `idx_c1_c2` (`c1`,`c2`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb41 row in set (0.00 sec) # MySQL 8.0mysql> create table t1(c1 int,c2 int,index idx_c1_c2(c1,c2 desc));Query OK, 0 rows affected (0.06 sec)mysql> show create table t1G*************************** 1. row ***************************       Table: t1Create Table: CREATE TABLE `t1` (  `c1` int(11) DEFAULT NULL,  `c2` int(11) DEFAULT NULL,  KEY `idx_c1_c2` (`c1`,`c2` DESC)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC1 row in set (0.00 sec)

再来看看降序索引在执行计划中的表现,在t1表插入10万条随机数据,查看select * from t1 order by c1 , c2 desc;的执行计划。从执行计划上可以看出,5.7的扫描数100113远远大于8.0的5行,并且使用了filesort。

DELIMITER ;;CREATE PROCEDURE test_insert ()BEGINDECLARE i INT DEFAULT 1;WHILE i explain select * from t1 order by c1 , c2 desc limit 5;+----+-------------+-------+------------+-------+---------------+-----------+---------+------+--------+----------+-----------------------------+| id | select_type | table | partitions | type  | possible_keys | key       | key_len | ref  | rows   | filtered | Extra                       |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+--------+----------+-----------------------------+|  1 | SIMPLE      | t1    | NULL       | index | NULL          | idx_c1_c2 | 10      | NULL | 100113 |   100.00 | Using index; Using filesort |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+--------+----------+-----------------------------+1 row in set, 1 warning (0.00 sec) # MySQL 8.0mysql> explain select * from t1 order by c1 , c2 desc limit 5;+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key       | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+|  1 | SIMPLE      | t1    | NULL       | index | NULL          | idx_c1_c2 | 10      | NULL |    5 |   100.00 | Using index |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)

降序索引只是对查询中特定的排序顺序有效,如果使用不当,反而查询效率更低,比如上述查询排序条件改为 order by c1 desc, c2 desc,这种情况下,5.7的执行计划要明显好于8.0的,如下:

# MySQL 5.7mysql> explain select * from t1  order by c1 desc , c2 desc limit 5;+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key       | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+|  1 | SIMPLE      | t1    | NULL       | index | NULL          | idx_c1_c2 | 10      | NULL |    5 |   100.00 | Using index |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.01 sec) # MySQL 8.0mysql> explain select * from t1 order by c1 desc , c2 desc limit 5;+----+-------------+-------+------------+-------+---------------+-----------+---------+------+--------+----------+-----------------------------+| id | select_type | table | partitions | type  | possible_keys | key       | key_len | ref  | rows   | filtered | Extra                       |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+--------+----------+-----------------------------+|  1 | SIMPLE      | t1    | NULL       | index | NULL          | idx_c1_c2 | 10      | NULL | 100429 |   100.00 | Using index; Using filesort |+----+-------------+-------+------------+-------+---------------+-----------+---------+------+--------+----------+-----------------------------+1 row in set, 1 warning (0.01 sec)

7. group by 不再隐式排序

mysql 8.0 对于group by 字段不再隐式排序,如需要排序,必须显式加上order by 子句。

# 表结构mysql> show create table tb1G*************************** 1. row ***************************       Table: tb1Create Table: CREATE TABLE `tb1` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(50) DEFAULT NULL,  `group_own` int(11) DEFAULT '0',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC1 row in set (0.00 sec) # 表数据mysql> select * from tb1;+----+------+-----------+| id | name | group_own |+----+------+-----------+|  1 | 1    |         0 ||  2 | 2    |         0 ||  3 | 3    |         0 ||  4 | 4    |         0 ||  5 | 5    |         5 ||  8 | 8    |         1 || 10 | 10   |         5 |+----+------+-----------+7 rows in set (0.00 sec) # MySQL 5.7mysql> select count(id), group_own from tb1 group by group_own;+-----------+-----------+| count(id) | group_own |+-----------+-----------+|         4 |         0 ||         1 |         1 ||         2 |         5 |+-----------+-----------+3 rows in set (0.00 sec) # MySQL 8.0.11mysql> select count(id), group_own from tb1 group by group_own;+-----------+-----------+| count(id) | group_own |+-----------+-----------+|         4 |         0 ||         2 |         5 ||         1 |         1 |+-----------+-----------+3 rows in set (0.00 sec) # MySQL 8.0.11显式地加上order by进行排序mysql> select count(id), group_own from tb1 group by group_own order by group_own;+-----------+-----------+| count(id) | group_own |+-----------+-----------+|         4 |         0 ||         1 |         1 ||         2 |         5 |+-----------+-----------+3 rows in set (0.00 sec)

8. JSON特性增强

MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。

在主从复制中,新增参数 binlog_row_value_options,控制JSON数据的传输方式,允许对于Json类型部分修改,在binlog中只记录修改的部分,减少json大数据在只有少量修改的情况下,对资源的占用。

9. redo & undo 日志加密

增加以下两个参数,用于控制redo、undo日志的加密。
innodb_undo_log_encrypt
innodb_undo_log_encrypt

10. innodb select for update跳过锁等待

select … for update,select … for share(8.0新增语法) 添加 NOWAIT、SKIP LOCKED语法,跳过锁等待,或者跳过锁定。
在5.7及之前的版本,select…for update,如果获取不到锁,会一直等待,直到innodb_lock_wait_timeout超时。

BibiGPT-哔哔终结者 BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

BibiGPT-哔哔终结者 28 查看详情 BibiGPT-哔哔终结者

在8.0版本,通过添加nowait,skip locked语法,能够立即返回。如果查询的行已经加锁,那么nowait会立即报错返回,而skip locked也会立即返回,只是返回的结果中不包含被锁定的行。

# session1:mysql> begin;mysql> select * from t1 where c1 = 2 for update;+------+-------+| c1   | c2    |+------+-------+|    2 | 60530 ||    2 | 24678 |+------+-------+2 rows in set (0.00 sec) # session2:mysql> select * from t1 where c1 = 2 for update nowait;ERROR 3572 (HY000): Statement aborted because lock(s) could not be acquired  immediately and NOWAIT is set.mysql> select * from t1 where c1 = 2 for update skip locked;Empty set (0.00 sec)

11. 增加SET_VAR语法

在sql语法中增加SET_VAR语法,动态调整部分参数,有利于提升语句性能。

select /+ SET_VAR(sort_buffer_size = 16M) / id  from test order id ;insert  /+ SET_VAR(foreign_key_checks=OFF) / into test(name) values(1);

12. 支持不可见索引

使用INVISIBLE关键字在创建表或者进行表变更中设置索引是否可见。索引不可见只是在查询时优化器不使用该索引,即使使用force index,优化器也不会使用该索引,同时优化器也不会报索引不存在的错误,因为索引仍然真实存在,在必要时,也可以快速的恢复成可见。

# 创建不可见索引create table t2(c1 int,c2 int,index idx_c1_c2(c1,c2 desc) invisible );# 索引可见alter table t2 alter index idx_c1_c2 visible;# 索引不可见alter table t2 alter index idx_c1_c2 invisible;

13. 支持直方图

优化器会利用column_statistics的数据,判断字段的值的分布,得到更准确的执行计划。

可以使用 ANALYZE TABLE table_name [UPDATE HISTOGRAM on col_name with N BUCKETS |DROP HISTOGRAM ON  clo_name] 来收集或者删除直方图信息。

直方图统计了表中某些字段的数据分布情况,为优化选择高效的执行计划提供参考,直方图与索引有着本质的区别,维护一个索引有代价。每一次的insert、update、delete都会需要更新索引,会对性能有一定的影响。而直方图一次创建永不更新,除非明确去更新它。所以不会影响insert、update、delete的性能。

# 添加/更新直方图mysql> analyze table t1 update histogram on c1, c2 with 32 buckets;+--------+-----------+----------+-----------------------------------------------+| Table  | Op        | Msg_type | Msg_text                                      |+--------+-----------+----------+-----------------------------------------------+| db.t1 | histogram | status   | Histogram statistics created for column 'c1'. || db.t1 | histogram | status   | Histogram statistics created for column 'c2'. |+--------+-----------+----------+-----------------------------------------------+2 rows in set (2.57 sec) # 删除直方图mysql> analyze table t1 drop histogram on c1, c2;+--------+-----------+----------+-----------------------------------------------+| Table  | Op        | Msg_type | Msg_text                                      |+--------+-----------+----------+-----------------------------------------------+| db.t1 | histogram | status   | Histogram statistics removed for column 'c1'. || db.t1 | histogram | status   | Histogram statistics removed for column 'c2'. |+--------+-----------+----------+-----------------------------------------------+2 rows in set (0.13 sec)

14. 新增innodb_dedicated_server参数

能够让InnoDB根据服务器上检测到的内存大小自动配置innodb_buffer_pool_size,innodb_log_file_size,innodb_flush_method三个参数。

15. 日志分类更详细

在错误信息中添加了错误信息编号[MY-010311]和错误所属子系统[Server]

# MySQL 5.72018-06-08T09:07:20.114585+08:00 0 [Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.2018-06-08T09:07:20.117848+08:00 0 [Warning] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.2018-06-08T09:07:20.117868+08:00 0 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.  # MySQL 8.02018-06-21T17:53:13.040295+08:00 28 [Warning] [MY-010311] [Server] 'proxies_priv'  entry '@ root@localhost' ignored in --skip-name-resolve mode.2018-06-21T17:53:13.040520+08:00 28 [Warning] [MY-010330] [Server] 'tables_priv'  entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.2018-06-21T17:53:13.040542+08:00 28 [Warning] [MY-010330] [Server] 'tables_priv'  entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.

16. undo空间自动回收

innodb_undo_log_truncate参数在8.0.2版本默认值由OFF变为ON,默认开启undo日志表空间自动回收。innodb_undo_tablespaces参数在8.0.2版本默认为2,当一个undo表空间被回收时,还有另外一个提供正常服务。innodb_max_undo_log_size参数定义了undo表空间回收的最大值,当undo表空间超过这个值,该表空间被标记为可回收。

17. 增加资源组

MySQL 8.0新增了一个资源组功能,用于调控线程优先级以及绑定CPU核。
MySQL用户需要有 RESOURCE_GROUP_ADMIN权限才能创建、修改、删除资源组。
在Linux环境下,MySQL进程需要有 CAP_SYS_NICE 权限才能使用资源组完整功能。

[root@localhost~]# sudo setcap cap_sys_nice+ep /usr/local/mysql8.0/bin/mysqld[root@localhost~]# getcap /usr/local/mysql8.0/bin/mysqld/usr/local/mysql8.0/bin/mysqld = cap_sys_nice+ep

默认提供两个资源组,分别是USR_default,SYS_default

创建资源组:
create resource group test_resouce_group type=USER vcpu=0,1 thread_priority=5;
将当前线程加入资源组:
SET RESOURCE GROUP test_resouce_group;
将某个线程加入资源组:
SET RESOURCE GROUP test_resouce_group FOR thread_id;
查看资源组里有哪些线程:
select * from Performance_Schema.threads where RESOURCE_GROUP=’test_resouce_group’;
修改资源组:
alter resource group test_resouce_group vcpu = 2,3 THREAD_PRIORITY = 8;
删除资源组 :
drop resource group test_resouce_group;

# 创建资源组mysql>create resource group test_resouce_group type=USER vcpu=0,1 thread_priority=5;Query OK, 0 rows affected (0.03 sec)mysql> select * from RESOURCE_GROUPS;+---------------------+---------------------+------------------------+----------+-----------------+| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS |  THREAD_PRIORITY |+---------------------+---------------------+------------------------+----------+-----------------+| USR_default         | USER                |                      1 | 0-3      |                0 || SYS_default         | SYSTEM              |                      1 | 0-3      |                0 || test_resouce_group  | USER                |                      1 | 0-1      |                5 |+---------------------+---------------------+------------------------+----------+-----------------+3 rows in set (0.00 sec)# 把线程id为60的线程加入到资源组test_resouce_group中,线程id可通过Performance_Schema.threads获取mysql> SET RESOURCE GROUP test_resouce_group FOR 60;Query OK, 0 rows affected (0.00 sec)# 资源组里有线程时,删除资源组报错mysql> drop resource group test_resouce_group;ERROR 3656 (HY000): Resource group test_resouce_group is busy.# 修改资源组mysql> alter resource group test_resouce_group vcpu = 2,3 THREAD_PRIORITY = 8;Query OK, 0 rows affected (0.10 sec)mysql> select * from RESOURCE_GROUPS;+---------------------+---------------------+------------------------+----------+-----------------+| RESOURCE_GROUP_NAME | RESOURCE_GROUP_TYPE | RESOURCE_GROUP_ENABLED | VCPU_IDS | THREAD_PRIORITY |+---------------------+---------------------+------------------------+----------+-----------------+| USR_default         | USER                |                      1 | 0-3      |               0 || SYS_default         | SYSTEM              |                      1 | 0-3      |               0 || test_resouce_group  | USER                |                      1 | 2-3      |               8 |+---------------------+---------------------+------------------------+----------+-----------------+3 rows in set (0.00 sec)# 把资源组里的线程移出到默认资源组USR_defaultmysql> SET RESOURCE GROUP USR_default FOR 60;Query OK, 0 rows affected (0.00 sec)# 删除资源组mysql> drop resource group test_resouce_group;Query OK, 0 rows affected (0.04 sec)

18. 增加角色管理

角色可以认为是一些权限的集合,为用户赋予统一的角色,权限的修改直接通过角色来进行,无需为每个用户单独授权。

# 创建角色mysql> create role role_test;Query OK, 0 rows affected (0.03 sec) # 给角色授予权限mysql> grant select on db.* to 'role_test';Query OK, 0 rows affected (0.10 sec) # 创建用户mysql> create user 'read_user'@'%' identified by '123456';Query OK, 0 rows affected (0.09 sec) # 给用户赋予角色mysql> grant 'role_test' to 'read_user'@'%';Query OK, 0 rows affected (0.02 sec) # 给角色role_test增加insert权限mysql> grant insert on db.* to 'role_test';Query OK, 0 rows affected (0.08 sec) # 给角色role_test删除insert权限mysql> revoke insert on db.* from 'role_test';Query OK, 0 rows affected (0.10 sec) # 查看默认角色信息mysql> select * from mysql.default_roles;+------+-----------+-------------------+-------------------+| HOST | USER      | DEFAULT_ROLE_HOST | DEFAULT_ROLE_USER |+------+-----------+-------------------+-------------------+| %    | read_user | %                 | role_test         |+------+-----------+-------------------+-------------------+1 row in set (0.00 sec) # 查看角色与用户关系mysql> select * from mysql.role_edges;+-----------+-----------+---------+-----------+-------------------+| FROM_HOST | FROM_USER | TO_HOST | TO_USER   | WITH_ADMIN_OPTION |+-----------+-----------+---------+-----------+-------------------+| %         | role_test | %       | read_user | N                 |+-----------+-----------+---------+-----------+-------------------+1 row in set (0.00 sec) # 删除角色mysql> drop role role_test;Query OK, 0 rows affected (0.06 sec)

以上就是MySQL8.0新特性的总结(附代码)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/374462.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
RedisTemplate.opsForList().leftPop() 如何一次弹出多个元素?
上一篇 2025年11月6日 09:10:55
上海大模型与具身智能基金齐发,首期规模均为10亿元
下一篇 2025年11月6日 09:10:56

相关推荐

  • MySQL中SQL注入防范 SQL注入攻击的预防与应对措施

    sql注入的防范核心在于参数化查询。具体措施包括:1.始终使用参数化查询,将用户输入视为数据而非可执行代码;2.对输入进行过滤与校验,如验证格式、转义特殊字符;3.遵循最小权限原则,限制数据库账号权限;4.控制错误信息输出,避免暴露敏感细节;5.定期更新框架与插件,及时修补漏洞。这些方法结合使用能有…

    2026年9月24日
    000
  • 如何在mysql中升级高可用集群

    先确认版本兼容性、应用依赖及备份完整性,再按架构选择升级路径。对Group Replication或InnoDB Cluster采用滚动升级,先升从节点最后升主节点;MHA/Orchestrator架构先升备库再切换主库;PXC需停集群全量升级。替换二进制后启动实例并运行mysql_upgrade,…

    2026年9月24日
    000
  • MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案

    MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案

    参数化查询和特殊字符过滤是防止sql注入的有效方法。1. 参数化查询通过预处理语句将sql结构与数据分离,用户输入被视为参数,不会被解释为sql命令;2. 特殊字符过滤通过转义或拒绝单引号、双引号等危险字符来阻止攻击;3. 定期审查mysql安全配置,包括更新版本、限制权限、启用日志、使用防火墙和扫…

    2026年9月24日 用户投稿
    000
  • 减少PHP与MySQL数据库通信的延迟

    减少php与mysql数据库通信的延迟可以通过以下策略:1. 优化数据库查询,使用索引提升查询速度;2. 减少数据库连接次数,使用连接池管理连接;3. 查询优化,使用explain分析查询计划;4. 使用缓存,如redis,减少数据库查询次数。这些方法能显著提升应用性能,但需权衡利弊,确保系统稳定性…

    2026年9月24日
    000
  • 解决MySQL事件event定义中文乱码的方法

    mysql的event事件处理中文乱码问题主要由字符集设置不当引起,解决方法包括以下步骤:1. 统一数据库、表和字段的字符集为utf8mb4,创建或修改时显式指定字符集;2. 设置连接层字符集,在连接后执行set names ‘utf8mb4’或在程序连接参数中指定chars…

    2026年9月24日
    300
  • Java中接口常量和类常量的使用区别

    接口常量默认public static final,用于行为契约但易导致职责模糊;类常量可用不同访问修饰符,更适合封装和维护。现代Java推荐使用专用常量类、枚举、私有静态常量或配置文件管理常量,以提升代码清晰度与可维护性。 Java中接口常量和类常量,核心区别在于它们的定义位置和隐式属性。接口常量…

    2026年9月24日
    000
  • mysql中in的用法详解 mysql in查询全面解析

    in操作符在mysql中用于检查值是否在指定列表内。1) 基本用法:select from users where name in (‘john’, ‘jane’, ‘jack’)。2) 子查询用法:select from or…

    2026年9月24日
    000
  • PHP 中如何将 JSON 数组值声明为变量

    本文介绍了如何在 PHP 中从数据库获取数据并将其编码为 JSON 格式,然后通过 AJAX 请求传递到另一个页面。重点讲解了如何在接收页面解析 JSON 数据,并将 JSON 数组中的特定值提取并赋值给变量,以便在后续的 PHP 函数中使用。 从数据库获取数据并编码为 JSON 首先,我们需要从数…

    2026年9月24日
    000
  • mysql中是什么意思 mysql语法符号含义解析

    mysql 中的符号和关键字是与数据库交互的基本工具,正确使用它们可以提高工作效率和查询准确性。1. 逗号(,)用于分隔列表中的元素,如列名和值。2. 点号(.)用于访问表中的列或调用函数。3. 星号(*)用于选择所有列,但应避免使用以提高查询性能。4. 百分号(%)用于 like 操作中的模式匹配…

    2026年9月24日
    100
  • PHP+MySQL培训课程的费用性价比分析

    php+mysql培训课程的性价比高,具体体现在:1.课程内容深度和广度,涵盖框架使用和项目经验;2.实用性和就业前景,提供实战项目和就业指导;3.师资力量和教学方式,名师能激发学习热情;4.学习资源和社区支持,提供丰富资料和交流平台。 在考虑报名PHP+MySQL培训课程之前,很多人都会问:这些课…

    2026年9月24日
    200
  • 使用MySQL命令行客户端进行交互式管理

    使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理

    mysql命令行客户端的常用命令包括:1. 使用mysql -u 用户名 -p命令连接数据库;2. 执行show databases;查看所有数据库;3. 使用use 数据库名;选择数据库;4. 使用select * from 表名;查询数据;5. 使用insert into 表名 (列1, 列2)…

    2026年9月24日 用户投稿
    600
  • 数据实时迁移同步工具 CloudCanal v5.2.0.0 发布,支持 SaaS 全托管

    cloudcanal 免费社区版 是 clougence 公司推出的一款全自研、可视化、自动化数据迁移同步工具,具备 结构迁移、数据迁移、数据同步、数据校验、数据订正 等功能,支持 60+ 款流行关系型数据库、实时数仓、消息中间件、缓存数据库和搜索引擎之间数据互通,其中包含国产数据库 oceanba…

    2026年9月24日
    100
  • 怎么在mysql中创建数据库表 mysql建表完整流程解析

    在 mysql 中创建数据库表的步骤包括:1) 选择合适的数据类型,如 int、varchar、timestamp;2) 设置索引,如主键和唯一索引;3) 应用约束条件,如 not null 和 unique;4) 设计表结构以满足业务需求,如使用 foreign key 和 enum;5) 优化性…

    2026年9月24日
    100
  • hive安装配置实验

    一、安装前的准备工作 1. 配置并安装hadoop,请参考链接http://blog.csdn.net/wzy0623/article/details/50681554。 2. 下载以下安装包:mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz、apache-hive…

    2026年9月24日
    700
  • 命令行下MySQL中文乱码如何设置utf8编码

    mysql命令行中文乱码解决方法是统一各环节字符集为utf8mb4。具体步骤如下:1.查看当前编码设置,确认character_set相关变量是否为utf8或utf8mb4;2.修改配置文件,在[client]和[mysqld]下设置默认字符集为utf8mb4并重启服务;3.修改已有数据库和表的字符…

    2026年9月24日
    200
  • 如何解决MySQL安装时配置不生效的处理方法?

    如何解决MySQL安装时配置不生效的处理方法?如何解决MySQL安装时配置不生效的处理方法?如何解决MySQL安装时配置不生效的处理方法?如何解决MySQL安装时配置不生效的处理方法?

    配置mysql时遇到配置不生效的问题,常见原因包括配置文件路径错误、语法问题、命令行参数覆盖及数据目录权限或初始化问题。1. 配置文件路径是否正确?mysql只会读取特定路径的配置文件,建议使用命令mysql –help | grep “default options&#82…

    2026年9月24日 用户投稿
    100
  • mysql如何优化表结构?表结构设计方法

    设计和优化 mysql 表结构应从字段类型选择、主键与索引设计、冗余与范式处理、分表分区策略四个方面入手。1. 合理选择字段类型,如整数用 int/bigint,枚举值用 enum 或 tinyint,日期用 datetime,避免过度使用 text/blob;2. 主键建议使用自增整型,避免长字段…

    2026年9月24日
    1000
  • MySQL查询结果的排序和分页实现方法

    在mysql中,可以通过order by和limit关键字高效实现排序和分页。1.使用order by进行排序,支持升序和降序。2.使用limit和offset进行分页,控制返回结果的起始位置和数量。3.通过在排序列上创建索引,可以优化大数据集的查询性能。4.避免使用大offset值,改用主键或唯一…

    2026年9月24日
    100
  • mysql中如何排查磁盘空间不足问题

    先检查磁盘使用情况,使用df -h和du -sh定位大文件;再通过SQL查询分析数据库和表的空间占用;接着检查binlog、慢查询日志及临时文件;最后采取删除无用数据、归档、压缩、分区等措施释放空间并优化配置。 当MySQL出现磁盘空间不足时,可能会导致写入失败、服务中断甚至实例崩溃。排查这类问题需…

    2026年9月23日
    100
  • 如何在mysql中使用数值函数计算

    答案:MySQL数值函数用于执行数学运算,如ABS、ROUND、FLOOR、CEIL、MOD、POWER、SQRT等,可对数据直接计算。例如用ROUND四舍五入价格,TRUNCATE截断小数,FLOOR取整,MOD求余判断奇偶,SQRT开方,还可结合AVG、MAX等聚合函数使用,提升查询效率并减少应…

    2026年9月23日
    200

发表回复

登录后才能评论
关注微信