更新至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。。。偏向后者,虽说前者可能性能更优,但后者更稳定。前者我曾经在其早期使用过,怎么说呢,很看人品的暴击率。
聊聊最近发生在身边的事情吧。
最近网易的事,很火。我用了网易邮箱10多年了,看了下帐号没问题(带安全码)。
想了下,还是把帐号申诉下把密保改了,然后安全码就没了。。。
是不是以前带安全码的数据库就没有问题呢。。。后悔改密保了。。。
不过改了也就改了,安全点。
想人生第一个邮箱是雅虎中国,然后同年马上进入了126的怀抱。如今雅虎中国邮箱已经88,就剩126了。
当年选择126的原因,只是因为126短、是数字、好记,特别是比起yahoo.com.cn好写不少。。。
补充:管理员 修改mysql 5.7.9 新版本的root密码方法以及一些新变化整理
管理员 修改mysql 5.7.9 新版本的root密码方法以及一些新变化整理
mysql 5.7版本开始,增强密码验证机制,网上说安装的时候会在/root/.mysql_secret 文件中生成默认密码,这一点自 5.7.6版本以后也去掉了。
针对如果生成默认密码,网上有一个版本,内容如下:
1、修改配置文件,一般在 /etc/my.cnf, 在[mysqld]字段下增加skip-grant-tables 字段,用以忽略权限验证;
2、重启mysql服务器,centos 7.0操作命令是:
systemctl restart mysqld.service
3、使用mysql -u root -p 登录数据, 密码直接回车;
4、修改mysql数据库(名称),user表的authentication_string字段,修改命令如下:
mysql> update mysql.user set authentication_string=password('new_password') where user='root' and host ='localhost'; mysql> flush privileges; mysql> quit;
5、修改配置文件,去掉skip-grant-tables,恢复成原来的样子, 然后重新mysql服务器。
6、使用第4步设置的密码,登录mysql服务器。
7、通过 set password=password('new_password'); 命令重新设置密码;
以上的方法,在mysql 5.7早期版本时,还是很好用的,但在mysql 5.7.6以后的版本,最后一点重置密码总是无法生效,会出来下面的错误。
error 1819 (hy000): your password does not satisfy the current policy requirements
同时,无法进行其它的操作。
这是因为,自mysql 5.7开始,密码存在有效期的概念, 同时因为安全等级的问题,需要使用使用其它的方式进行设置。另一个需要注意的点是, 自5.7.6开始废弃了password()函数,同时无法设置old_password=1, 这真的是一件比较曲折的探索过程。
那么,先把mysql 5.7.9版本以上的密码设置方法整理一下。
大部分和上面整理的内容相同,关键在第4步后,把authentication_string 里写入的值记一下(这是因为password()函数已废弃)
通过使用以下命令,代替第7步的, set password=password('new_password') 方法。
mysql> alter user 'jeffrey'@'localhost' -> identified with mysql_native_password -> as 'authentication_string字段内容'; query ok, 0 rows affected (0.01 sec)
其实上面的命令有一个简化版本,命令如下
mysql> alter user user() identified by 'news_password'; error 1819 (hy000): your password does not satisfy the current policy requirements
之所以会出现上面的错误信息,这和密码的安全等级相关,查看安全等级命令如下
mysql> show variables like 'validate_password%'; +--------------------------------------+--------+ | variable_name | value | +--------------------------------------+--------+ | validate_password_dictionary_file | | | validate_password_length | 8 | | validate_password_mixed_case_count | 1 | | validate_password_number_count | 1 | | validate_password_policy | medium | | validate_password_special_char_count | 1 | +--------------------------------------+--------+
通过 set global validate_password_policy='low'; 命令,降低安全等级后,就可以直接使用,限制是必须8个字符以上;
关于安全等级更详细的介绍如下
low
政策只测试密码长度。 密码必须至少有8个字符长。medium
政策的条件 密码必须包含至少1数字字符,1 大写和小写字符,和1特别 (nonalphanumeric)字符。strong
政策的情况 密码子字符串长度为4的或更长时间不能匹配 单词在字典文件中,如果一个人被指定。
最后,为了解决密码失效的问题, 最后在配置文件的[mysqld]字段下,增加以下字段
[mysqld] default_password_lifetime=0
也可以通过命令行进行设置
alter user 'script'@'localhost' password expire never
关于密码有效期相关的更多信息,可以参考 http://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html
到此这篇关于更新至mysql 5.7.9的详细教程的文章就介绍到这了,更多相关更新到mysql 5.7.9内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论