我是靠谱客的博主 悲凉黄豆,最近开发中收集的这篇文章主要介绍MySQL5.6.4升级到5.6.40遇到的一些坑,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

      维护的一个老项目,数据库版本过低,出现了一系列的MySQL高危漏洞,总之一大堆高危漏洞,解决此问题有两种解决办法,一个是升级MySQL,一个是改数据库版本,从安全性角度考虑,还是需要升级MySQL为上策,升级过程的一些小经验和大家分享一下。

      首先说明的是升级的是windows版本的MySQL,当时没有注意是64位还是32位,直接上的64位,出现了一些小插曲,在32位操作系统上无法启动,尴尬了。。。。。。建议提前了解清楚背景。废话不多说,直接上过程。

       第一步自然是下载同一版本不同小版本号的MySQL,官网最新的是5.6.40,地址直接贴上https://dev.mysql.com/downloads/mysql/,windows下载zip免安装的即可,navicat for mysql l第一次连接数据库可能会出错如下


本地IP(xxx.xxx.xxx.xxx)没有访问远程数据库的权限。于是下面开启本地IP(xxx.xxx.xxx.xxx)对远程mysql数据库的访问权限。需要加上相应权限,解决办法度娘一下,步骤如下:

解决办法:

1.首先远程连接进入服务器,在cmd中输入mysql -u root -p,然后回车,输入密码后回车进入mysql命令行。 
这里写图片描述

2.输入use mysql;

这里写图片描述

3.输入select user,password,host from user; 
可以看到host中只有localhost主机。我们需要将xxx.xxx.xxx.xxx也添加到这里才对。

这里写图片描述

4.添加方法如下:

输入 ​GRANT ALL PRIVILEGES ON *.* TO ‘root’@’xxx.xxx.xxx.xxx’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

这相当于是给IP-xxx.xxx.xxx.xxx赋予了所有的权限,包括远程访问权限。

然后再输入 
flush privileges; 
这相当于是重新加载一下mysql权限,这一步必须有。

这里写图片描述

5.再次输入select user,password,host from user; 
可以看到host中已经有了新加的IP。

这里写图片描述

6.现在再次用Navicat for MySQl访问远程mysql数据库,已经能正常打开了。 
问题解决。

7.如果还是连接不到,那是不是 MySQL Server 绑定了本地地址,打开 my.ini,

找到:bind-address = 127.0.0.1

连接上了数据库后,需要创建相应原有数据库,加上访问权限、角色控制吧啦吧啦一堆东西,然后就是导入数据库表、数据等等

最后就是启动程序验证一下,第一次启动果然出现了问题,数据库启动脚本没有生效,配置文件不生效,原来是自己的问题,MySQL5.6.X版本默认配置文件是my-default.ini,为了原有脚本起作用,就改成了XXX.ini,直接点击mysqld.jar,自然不生效,服了自己的想象力了。

按正确的启动方式,程序起来了,但是报一堆错,如

1、Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci

2、org.quartz.JobPersistenceException: Database error recovering from misfires. [See nested exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1]

3、Load file D:/data/loadCache/20180530/Cache1527670713802-edcache_1527671350479 fail, error: 
java.sql.SQLException: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

一个一个的解决

第一个问题,错误本质原因:出现了两种字符集。

1)

SHOW VARIABLES LIKE 'character_set_%'; 查看一下 显示
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8|
| character_set_connection | utf8|
| character_set_database | latin1 |
| character_set_results | utf8|
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /home/jh/mysql/share/mysql/charsets


2)
再用 SHOW VARIABLES LIKE 'collation_%'; 查看一下 显示
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |




3.解决办法:
SET character_set_database =utf8;
SET character_set_results =utf8;
SET character_set_server =utf8;
SET character_set_system =utf8; /*此处utf-8也可以*/
SET collation_server = utf8_general_ci;
SET collation_database = utf8_general_ci;


执行完之后,请检查mysql下每个数据库,表,字段是否都是utf8,不是则改过来,这样子就不会出现

第二个问题是mysql-connector-java.jar版本过低,改成mysql-connector-java-5.1.46-bin.jar即可解决

第三个问题可以很清楚地从提示看到是因为mysql服务启用了–secure-file-priv,所以才无法执行。 
那么–secure-file-priv又是什么东东,应该如何解决才能是它可以备份呢? 
--secure-file-priv=name : 
Limit LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE() to files within specified directory


可以看到secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。


当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出


当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下


当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制


查看数据库当前该参数的值 
show global variables like '%secure%'; 
+------------------+-------+ 
| Variable_name | Value | 
+------------------+-------+ 
| secure_auth | ON | 
| secure_file_priv | NULL | 
+------------------+-------+ 
2 rows in set (0.00 sec)


清楚地看到secure_file_priv 的值是NULL,说明此时限制导入导出的 
所以应该改变该参数 
可是查看了mysql.cnf中居然没有对这个参数进行设定,就说明这个参数默认便是null 
所以再mysql.cnf中的[mysqld]加入secure_file_priv = 
再重启mysql服务 
然后再查一下此时参数的值


show global variables like '%secure%'; 
+------------------+-------+ 
| Variable_name | Value | 
+------------------+-------+ 
| secure_auth | ON | 
| secure_file_priv | | 
+------------------+-------+ 
2 rows in set (0.00 sec)

大概就是这么些坑,如有不清楚的地方,还请批评指导!


最后

以上就是悲凉黄豆为你收集整理的MySQL5.6.4升级到5.6.40遇到的一些坑的全部内容,希望文章能够帮你解决MySQL5.6.4升级到5.6.40遇到的一些坑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部