一、初始化
1、5.7.6之前的版本初始化,一般用:mysql_install_db –basedir=/* –datadir=/var/lib/mysql –user=mysql
2、5.7.6之后的版本:不用mysql_install_db,而是用mysqld –initialize来初始化。
mysqld --user=mysql --basedir=/opt/17173_install/mysql-5.7.7-rc-linux-glibc2.5-x86_64/ --datadir=/data/mysql --initial 在初始化时如果加上 –initialize-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error 日志文件中(在5.6版本中是放在 ~/.mysql_secret 文件里,更加隐 如果指定了 --initialize-insecure,那么也不会安装validate_password插件,也就是 show variables like 'vali%';会是空的。 二、密码更改及产生的密码位置 1、root密码可能会在~/.mysql_secret里面,像我现在yum 安装的5.7.16,启动的时候会初始化数据库,密码是产生在日志里 可以用grep "password" /var/log/mysqld.log进行查看到。 而且登录之后,必须更改密码,密码长度至少8位,如果要设置成简单密码,可以这样设置: set global validate_password_policy = 0; 2、更改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
3、5.7.6之后,mysql.user表中没有password字段了,是authenticatio_string代替了,所以修改密码可以这样:
update mysql.user
set
authentication_string=password(
'new_password'
) where user=
'root'
and Host =
'localhost'
;
当做也可以alter user ‘root’@’localhost’ identified by ‘new secret’;这样来改。
4、5.7.6以后,对密码设置要求增加了,至少8位,如果没有符合要求去更改密码,会报以下错误:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
当然也可以设置成不按它的要求:
set global validate_password_policy = 0;这样设置之后,但密码长度必须是8位, 如果想设置少于8位,需要修改长度:set global validate_password_length=4; 5、忘记密码,重置密码 1、5.7.6以后没有mysqld_safe命令了,所以之前是这样启动:
mysqld_safe –defaults-file=/data/3306/my.cnf –skip-grant-table –user=mysql &(单实例配置文件可以忽略,table可以加s ,也可以不加,5.7.16是需要加s的,如果不加会退出来。)
2、5.7.6之后没有mysqld_safe命令,可以使用:mysqld –skip-grant-tables –user=mysql &就可以了。
重置密码不能使用alter user,需要使用这个update,
update mysql.user set authentication_string=password(‘new secret’) where user=’root’ and host=’localhost’;(5.7.6以后是这样,之前把authentication_string改成password就可以了,只是字段名字更改了而已。)
三、密码安全等级说明
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的或更长时间不能匹配 单词在字典文件中,如果一个人被指定。
其中可以看到validate有很多参数:
- validate_password_dictionary_file:插件用于验证密码强度的字典文件路径。
- validate_password_length:密码最小长度。
- validate_password_mixed_case_count:密码至少要包含的小写字母个数和大写字母个数。
- validate_password_number_count:密码至少要包含的数字个数。
- validate_password_policy:密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。
- validate_password_special_char_count:密码至少要包含的特殊字符数。
其中,关于validate_password_policy-密码强度检查等级:
- 0/LOW:只检查长度。
- 1/MEDIUM:检查长度、数字、大小写、特殊字符。
- 2/STRONG:检查长度、数字、大小写、特殊字符字典文件。
可以直接在mysql中进行参数的修改
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_special_char_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_number_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%password%';
+---------------------------------------+-------+
| Variable_name | Value |
+---------------------------------------+-------+
| default_password_lifetime | 0 |
| disconnect_on_expired_password | ON |
| log_builtin_as_identified_by_password | OFF |
| mysql_native_password_proxy_users | OFF |
| old_passwords | 0 |
| report_password | |
| sha256_password_proxy_users | OFF |
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 0 |
| validate_password_mixed_case_count | 0 |
| validate_password_number_count | 0 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 0 |
+---------------------------------------+-------+
14 rows in set (0.00 sec)
当然,此种变更,只能在当前环境下生效,重启mysql后会失效
想要长期生效,需要将更改写入配置文件中才可永久生效
也可以直接在配置文件中进行修改禁用validate-password功能
编辑my.cnf配置文件,在mysqld下面加入“validate-password=0”,然后重启mysql即可。
[root@bogon ~]# grep -v ^# /etc/my.cnf | grep -v ^$
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
validate-password=0
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
将mysql的密码安全等级降低之后,可以将root密码修改回来
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set authentication_string = password("") where user="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
以上密码root即清除为空了。使用mysql即可直接进入mysql。当然生产环境中不推荐此种做法。
原文链接:mysql5.7的一些新特性,转载请注明来源!