更新至MySQL 5.7.9,聊一聊最近

56e60f67bdafcc180d4caa243af50a


MySQL 5.7.9 GA版本已经出来,目前VPS已更新完成,虽说不像修正版本号更新一样,直接把数据库目录移过去就好那么容易,但也不难。

这次更新了子版本号,过程顺利,没坑,启动有告警。(我是从MySQL 5.6.27更新而来)

说说第一个:

[Warning] Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path.

secure-file-priv这个参数主要是限制LOAD_FILE和LOAD DATA和SELECT … ,INTO OUTFILE报表到指定的目录。

一般来说很少用,默认值有empty、dirname、NULL,正确的意思就是:留空、指定路径、NULL值。千万不要以为是empty、指定路径、NULL。。。empty会报错的哦,empty其实就是留空,会转成默认值,也就是platform-specific,我也不知道是什么东东。反正会如上提示。设置路径会要求你该路径其他系统用户不能读,而且不能获取到你的MySQL数据库目录。NULL就是空,也是禁用的意思。

所以我在my.cnf中把secure-file-priv设置成NULL:

secure-file-priv = NULL

如此操作可以看到,现在提示:

[Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled

直译就是:[提示]–secure-file-priv被设置成NULL,有关数据导入导出操作被禁止。

这个不会影响mysqldump使用,放心好了。

第二项警告是:

[Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key

在5.7中,通过ssl方式连接mysql被作为默认和推荐。如果你并不需要(比如web端和db端同一台服务器,db服务器处于web端内网等),就可以不用使用ssl方式。

干掉警告很简单,只要在my.cnf声明跳过ssl就行了。

skip-ssl

如此便OK了。

还有个警告。。。是:

[Warning] 'user' entry 'root@localhost' ignored in --skip-name-resolve mode.
[Warning] 'user' entry 'mysql.sys@localhost' ignored in --skip-name-resolve mode.
[Warning] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode.
[Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
[Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.

如果一定要使用skip-name-resolve参数,这个真心无解,在5.6中压根不会报localhost的错。

如果你不喜欢这个提示,只能说,不要使用skip-name-resolve参数。

还要即便你有心去把localhost修改为127.0.0.1,很多应用,比如wordpress这些默认访问localhost的应用,都会不可用,需要更改host为127.0.0.1才行。

如果你只有单一的数据库或应用。那就可以通过修改localhost为127.0.0.1来解决。我线上数据库和应用太多就懒得改了。

要是你没有远程访问数据库的话,只是在本地使用数据库,推荐你用skip-networking而不是skip-name-resolve。skip-name-resolve参数它的功能主要是禁用DNS解析的,而skip-networking参数是设置MySQL不要监听网络,也就只能本机访问。

还有一个大家看不出来,SQL Mode目前默认值为:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

我的建议是把NO_ZERO_IN_DATE和NO_ZERO_DATE去掉,因为毕竟很多产品(比如Wordpress)的默认值就是0000-00-00 00:00:00,如果不去掉是不被允许的。当然这个,无伤大雅。

不去掉,如果出错,MySQL会在查询出现警告:

#1067 - Invalid default value for 'comment_date'

最后,说说大家最关心的,性能。我做了一些测试,感觉5.7.9比5.6.27还要慢。。。对的,你没看错,不如5.6.27快。。。好失望,我还是期待PHP7吧。

或许我该选择MariaDB或是Percona Server。。。偏向后者,虽说前者可能性能更优,但后者更稳定。前者我曾经在其早期使用过,怎么说呢,很看人品的暴击率。

转载请注明转自:kn007的个人博客的《更新至MySQL 5.7.9,聊一聊最近