# Mysql

# 8.x版本更新记录

更新日志 (opens new window)

# 问题处理

# 1、连接数不够问题

1、查看mysql线程连接情况

--查看线程使用情况
show status like 'Threads%';

--查看线程缓存内的线程的数量。
show status like 'threads_cached';

--查看当前打开的连接的数量。
show status like 'threads_connected';

--查看当前打开的连接的数量。
show status like 'threads_connected';

--查看创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。
show status like 'threads_created';

--查看激活的(非睡眠状态)线程数。
show status like 'threads_running';

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

2、修改连接数

查看最大连接数

show variables like '%max_connections';
1

临时修改,重启后失效

set GLOBAL max_connections=3000
1

固定修改:my.cnf 配置文件,[mysqld] 下增加

max_connections = 3000
1

# 查看数据库磁盘占用

SELECT
TABLE_SCHEMA AS "数据库",
sum( table_rows ) AS "记录数",
concat( TRUNCATE ( sum( data_length ) / 1024 / 1024, 2 ), ' MB' ) / 1024 AS "数据容量(GB)",
concat( TRUNCATE ( sum( index_length ) / 1024 / 1024, 2 ), 'MB' ) / 1024 AS "索引容量(GB)"
FROM
information_schema.TABLES
GROUP BY
table_schema
order by
sum(data_length) desc,
sum(index_length) desc;
1
2
3
4
5
6
7
8
9
10
11
12

# mysql连接慢问题处理

1、DNS解析配置问题

在linux下配置文件是/etc/my.cnf,在windows下配置文件是mysql安装目录下的my.ini文件。 注意该配置是加在 [mysqld]下面,在更改配置并保存后,然后重启mysql并远程连接测试,一切恢复如初。该参数的官方解释信息如下:

根据文档说明,如果你的mysql主机查询DNS很慢或是有很多客户端主机时会导致连接很慢,由于我们的开发机器是不能够连接外网的,所以DNS解析是不可能完成的,从而也就明白了为什么连接那么慢了。同时,请注意在 增加该配置参数后,mysql的授权表中的host字段就不能够使用域名而只能够使用 ip地址了,因为这是禁止了域名解析的结果。

[mysqld]
skip-name-resolve
1
2

# jdbc驱动参数配置

jdbc:mysql://127.0.0.1:3306/hss?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true&rewriteBatchedStatements=true


zeroDateTimeBehavior: 时间类型错误时,mysql处理方式
useUnicode: 数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
characterEncoding: 在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。
serverTimezone: 时区
autoReconnect: 驱动程序是否应该尝试重新建立连接? 如果启用了,驱动程序将会对陈旧或死亡连接上发出的查询抛出异常,这些查询属于当前事务,但是在新事务中对连接发出的下一个查询之前会尝试重新连接。 不推荐这个功能的使用,因为它有副作用与会话状态和数据一致性当应用程序不妥善处理异常,仅设计用于当你无法配置您的应用程序来处理异常造成死亡和陈旧的正确连接。 另外,作为最后一个选项,研究将MySQL服务器变量“wait_timeout”设置为一个较高的值,而不是默认的8小时。
allowMultiQueries: 可以在sql后边添加分号,处理多个sql,如果不配置会报错
rewriteBatchedStatements: 批处理
1
2
3
4
5
6
7
8
9
10

# mongoDb

如果数据库存在,则切换到数据库,如果不存在则创建数据库

use eadb
1

为该数据库新建一个用户,用户只能访问这个数据库

db.createUser({
    user: "<your_username>",
    pwd: "<your_password>",
    roles: [{ role: "readWrite", db: "<your_database>" }]
})
1
2
3
4
5

如果数据库中没有数据,我在navicat工具中显示不出来的,只有库中有数据才显示,插入数据

db.collectionName.insert({ key: "value", anotherKey: "anotherValue" })
1

为现有的用户分配数据库可读科协权限

db.grantRolesToUser("<your_username>", [{ role: "readWrite", db: "eadb" }])

1
2
Last Updated: 5/22/2024, 4:38:11 PM