在 5.6 和 5.7 中,Mysql 加强了密码的使用。Mysql第一次启动的时候,会初始化一个随机的复杂密码,保存在 /var/log/mysqld.log
不再接受简单密码。即复杂密码为: 大小写、数字、符号 的组合。
在命令行中,不能直接使用 mysql -u$USER -p$PASSWORD 的方式了
在 bash script 中使用 mysql
使用 client 配置
在 /etc/my.cnf 中配置 [client] 区块
或者,使用 --default-extra-file=/path/to/config.cnf
mysql --defaults-extra-file=/path/to/config.cnf -e "statement;"
mysqldump --defaults-extra-file=/path/to/config.cnf -e "statement;"
# config.cnf 格式如下
[client]
user = whatever
password = whatever
host = whatever
不过 --default-extra-file=/path/to/config.cnf 必须为命令行的第一个参数,否则会报错。例如,mysqldump: unknown variable 'defaults-extra-file
使用 mysql_config_editor 和 login-path
在 5.6.x 中,避免 WARNING 消息的方式是使用 mysql_confg_editor 工具。
# 首先在使用 mysql_config_editor 设置一个帐号别名,
# 这样密码会被加密保存在 home/myshellusername/.mylogin.cnf
mysql_config_editor set --login-path=local --host=localhost --user=username --password
# 使用如下命令
mysql --login-path=local -e "statement"
mysqldump --login-path=localmy_database | gzip > db_backup.tar.gz
# 而不再使用
# mysql -u username -p pass -e "statement"
mysqldump -u db_user -pInsecurePassword my_database | gzip > db_backup.tar.gz
前置 MYSQL_PWD
设置 MYSQL_PWD 为环境变量,则命令行的时候,不用在指定密码
exportMYSQL_PWD=xxxxxxxx
mysql -u root -e "statement;"
另外,在不 export MYSQL_PWD 的情况下,可以将 MYSQL_PWD 放在命令行最前面,也是可行的。
MYSQL_PWD=xxxxx mysql -uroot -e"statement;"
修改初始密码
之前提到了, Mysql 在初次启动的时候会生成一个随机密码,保存在 /var/log/mysqld.log 中。
首次进入后,不修改 root 密码的话,所有操作都会被阻挡。
修改密码
进入 Mysql 后,可以使用 UPDATE 命令修改用户的密码
-- 注意:5.7 中 password 列已经修改为 authentication_string 了
update mysql.user set authentication_string=PASSWORD();
官方更建议使用 ALERT USER
ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PWD}' ;
命令行修改注意事项使用随机密码时,ALERT 授权主机必须为 localhost,即使 127.0.0.1 也不行。
使用随机密码时,在命令行中必须使用 --connect-expired-password 参数
如下:
MYSQL57_ROOT_TMP_PWD=$(grep "A temporary password" /var/log/mysqld.log |awk '{print $NF}')
MYSQL_PWD=${MYSQL57_ROOT_TMP_PWD} mysql -u root --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PWD}' ;"
Mysql 5.7 密码插件 validate_password
这个 validate_password 密码强度审计插件决定了你设置的密码是否“过于简单”。
mysql> SHOW VARIABLES LIKE 'vali%';
+--------------------------------------+--------+
| 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 |
+--------------------------------------+--------+
6 rows in set (0.00 sec)
MYSQL 5.7初始化后,默认会安装这个插件,若没有安装,则SHOW VARIABLES LIKE ‘vali%’则会返回空。
对应参数的value值也为默认值,以下是这些值的解释validate_password_length 8 # 密码的最小长度,此处为8。
validate_password_mixed_case_count 1 # 至少要包含小写或大写字母的个数,此处为 1。
validate_password_number_count 1 # 至少要包含的数字的个数,此处为 1。
validate_password_policy MEDIUM # 强度等级,其中其值可设置为 0、1、2。分别对应:【0/LOW】:只检查长度。
【1/MEDIUM】:在0等级的基础上多检查数字、大小写、特殊字符。
【2/STRONG】:在1等级的基础上多检查特殊字符字典文件,此处为1。
validate_password_special_char_count 1 # 至少要包含的个数字符的个数,此处为 1。