更新至MySQL 5.7.9,聊一聊最近
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,聊一聊最近》