刚安装的MySQL使用Navicat操作数据库遇到的问题
一、编辑连接保存报错
连接上了数据库,编辑连接保存报错,如下图:
解决办法:
重启Navicat。
二、打开数据表很慢
第一次打开数据表时速度还能接受,过几分钟再次打开就变得很慢很慢,且查询很少的数据都很耗时。比如我只想查询用户表中的十条数据,竟然查了8秒。
解决办法:
打开关闭数据库,编辑数据库连接,默认是240秒,我这里改为了30秒,还觉得慢可以改为0秒。
这样就会让数据库连接保持随时待命的状态,不会出现因为间隔几分钟没有打开数据表,再次打开时变得很慢很慢了的情况了。
再次查询用户表的10条数据
三、MySQL的进程出现大量"sleep"状态的进程
这可能是刚安装的MySQL还没有优化,查询MySQL的连接超时时间
sql
show variables like 'wait_timeout';
sql
show variables like 'interactive_timeout';
解释:
wait_timeout:用于指定服务器等待客户端发送命令的时间的上限。
interactive_timeout:用于指定MySQL服务器在等待客户端发送命令的时间后关闭非交互式连接的超时时间。
MySQL默认的连接超时时间是8小时,太长了,没有进行数据操作的时候应该释放资源,可以将超时时间调小一些,注意需要上面两个参数同时设置才能生效。
打开MySQL的配置文件
powershell
vim /etc/my.cnf
在"[mysqld]"中加入如下配置
powershell
#减少超时时间,避免使用"SHOW PROCESSLIST"命令出现很多"sleep"状态的进程,这里设置为120秒
wait_timeout=120
interactive_timeout=120
这是我的
然后重启MySQL
powershell
service mysql restart
再次查询MySQL的进程
sql
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]"下加入如下配置
powershell
#处理 MySQL导入数据库1118错误解决方案[ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB
innodb_strict_mode=0
保存退出,再重启MySQL
powershell
service mysql restart
删除原来的数据库,再次导入
成功。
五、当前MySQL配置文件
powershell
[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