刚安装的MySQL使用Navicat操作数据库遇到的问题

一、编辑连接保存报错

连接上了数据库,编辑连接保存报错,如下图:

在这里插入图片描述

解决办法:

重启Navicat。

二、打开数据表很慢

第一次打开数据表时速度还能接受,过几分钟再次打开就变得很慢很慢,且查询很少的数据都很耗时。比如我只想查询用户表中的十条数据,竟然查了8秒。

在这里插入图片描述

解决办法:

打开关闭数据库,编辑数据库连接,默认是240秒,我这里改为了30秒,还觉得慢可以改为0秒。

在这里插入图片描述

这样就会让数据库连接保持随时待命的状态,不会出现因为间隔几分钟没有打开数据表,再次打开时变得很慢很慢了的情况了。

再次查询用户表的10条数据

在这里插入图片描述

三、MySQL的进程出现大量“sleep”状态的进程

在这里插入图片描述

这可能是刚安装的MySQL还没有优化,查询MySQL的连接超时时间

show variables like 'wait_timeout';
show variables like 'interactive_timeout';

解释:

wait_timeout:用于指定服务器等待客户端发送命令的时间的上限。
interactive_timeout:用于指定MySQL服务器在等待客户端发送命令的时间后关闭非交互式连接的超时时间。

在这里插入图片描述

MySQL默认的连接超时时间是8小时,太长了,没有进行数据操作的时候应该释放资源,可以将超时时间调小一些,注意需要上面两个参数同时设置才能生效。

打开MySQL的配置文件

vim /etc/my.cnf

在“[mysqld]”中加入如下配置

#减少超时时间,避免使用“SHOW PROCESSLIST”命令出现很多“sleep”状态的进程,这里设置为120秒
wait_timeout=120
interactive_timeout=120

这是我的
在这里插入图片描述

然后重启MySQL

service mysql restart

在这里插入图片描述

再次查询MySQL的进程

SHOW PROCESSLIST

在这里插入图片描述

可以看到前面的很多“sleep”状态的进程已经不见了。

四、执行sql脚本报错,部分表导不进去

我的问题是这样的,新安装的MySQL从Navicat执行sql脚本,结束时出现失败的错误,看一下执行结束后的数据库,大部分表都导入了,只是部分数据表没能导入。

这是导入时的报错

在这里插入图片描述

一开始也没看出那里的问题,于是将就着用,等项目连接上的时候报缺少某个数据表,看了一下数据库中还真没有,就把没导入的数据表从原数据库中单独导出sql文件,再单独导入,结果也是报类似的错

在这里插入图片描述

看来导入数据库的时候就是这些表出的问题了。

然后就想着既然sql脚本有问题,那我通过执行sql的形式导入,这些应该总行了吧,但是报如下错:

Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

在这里插入图片描述

看报错提示似乎字段的长度不够,需要改为“TEXT“或者”BLOB”类型,我直接把我内容比较多的字段类型改为“LONGTEXT”,这样应该承得下了把,但执行sql时还是报这个错。

后面发现这是InnoDB 存储引擎的一个配置参数“innodb_strict_mode”,是否采取严格模式的问题,只要把它关了就可以导入了。

解释:

innodb_strict_mode 是 MySQL 中 InnoDB 存储引擎的一个配置参数,它用于控制 InnoDB 存储引擎在处理某些可能的不规范或错误的数据时是否采取严格模式,默认是开启。

关闭采取严格模式的办法如下:

在“[mysqld]”下加入如下配置

#处理 MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB
innodb_strict_mode=0

保存退出,再重启MySQL

service mysql restart

在这里插入图片描述

删除原来的数据库,再次导入

在这里插入图片描述

成功。

五、查询数据很慢

导入数据库之后,我尝试着查询某张表中的数据,第一次查询

在这里插入图片描述

查询100条数据都用了13秒多,感觉有点久。

进入MySQL配置文件

vim /etc/my.cnf

加上如下配置:

skip-name-resolve

skip-name-resolve 用于禁止MySQL解析主机名。当MySQL服务器收到一个连接请求时,它通常会尝试解析客户端的主机名以获取IP地址。然而,在某些情况下,解析主机名可能会导致性能问题或延迟。在这种情况下,可以设置skip-name-resolve参数,以告诉MySQL跳过主机名的解析过程,从而提高连接效率。

然后重启MySQL

service mysql restart

在这里插入图片描述

再次查询

在这里插入图片描述

额,好像比之前更久了。不过短时间内再次查询时间就短了很多,应该是缓存生效了。

在这里插入图片描述

然后试着加入如下配置:

max_connections=500
max_connect_errors=100
open_files_limit=65535

max_connections 指的是允许的最大并发连接数。这意味着MySQL服务器同时能够处理的客户端连接数上限。
max_connect_errors 用于控制MySQL服务器允许用户最大的连接错误次数。当一个客户端尝试连接到MySQL服务器时,如果出现了错误,例如用户名或密码不正确,那么这个错误的次数会被计数。max_connect_errors参数就是用来设置这个计数器的最大值。
open_files_limit 用于控制MySQL进程可以打开的文件数量上限。它可以确保MySQL能够正确地打开所需数量的文件。在MySQL中,每个打开的文件都需要消耗操作系统资源,因此合理地设置open_files_limit可以提高MySQL的性能和稳定性。

保存退出,重启MySQL,再次查询

在这里插入图片描述

隔一段时间再次查询

在这里插入图片描述

虽然查询还是有点长,不过比起最初的13秒多已经好一些了。

然后再加入如下配置:

innodb_buffer_pool_size=512M
innodb_log_file_size=256M

innodb_buffer_pool_size:设置InnoDB存储引擎的缓冲池大小。增加这个值可以缓存更多的数据页,减少磁盘I/O操作,从而提高查询性能。
innodb_log_file_size:设置InnoDB存储引擎的日志文件大小。适当增加这个值可以提高写入性能,但需要注意监控和调整以确保日志同步和恢复。

保存退出,重启MySQL,再次查询

在这里插入图片描述

好家伙,好像又快了一点,先别急着高兴,说不定是缓存的问题,前面设置的查询连接时间为两分钟,等两分钟后再查查看。

在这里插入图片描述

好像也是大差不差。

六、当前MySQL配置文件

[mysqld]
port=3306
basedir=/usr/local/mysql/mysql-8.0.35  # MySQL根目录
datadir=/usr/local/mysql/mysql-8.0.35/data/  # MySQL的data目录
socket=/tmp/mysql.sock
character-set-server=UTF8MB4
symbolic-links=0

# 配置大小写不敏感,配合MySQL初始化时使用
lower-case-table-names=1

# 减少超时时间,避免使用“SHOW PROCESSLIST”命令出现很多“sleep”状态的进程,这里设置为120秒
wait_timeout=120
interactive_timeout=120

# 解决“java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list,references column”
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

# 处理 MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB
innodb_strict_mode=0

# 解决本地连接MySQL数据库非常慢的问题
#skip-name-resolve

# 允许的最大并发连接数
max_connections=500

# 控制MySQL服务器允许用户最大的连接错误次数,默认值是100
max_connect_errors=100

# 用于控制MySQL进程可以打开的文件数量上限
open_files_limit=65535

# 线程池中的线程缓存数量
# thread_cache_size=64

# 设置InnoDB存储引擎的缓冲池大小。增加这个值可以缓存更多的数据页,减少磁盘I/O操作,从而提高查询性能。
innodb_buffer_pool_size=512M

# 设置InnoDB存储引擎的日志文件大小。适当增加这个值可以提高写入性能,但需要注意监控和调整以确保日志同步和恢复。
innodb_log_file_size=256M
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值