概述
维护的一个老项目,数据库版本过低,出现了一系列的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遇到的一些坑所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复