MySQL初始化配置

刚安装完成MySQL后,在进入MySQL时,总是有错误提示:

$ mysql -u root -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 

或者

$ mysql -u root -p password 'newpassword' 
Enter password: 
mysqladmin: connect to server at 'localhost' failed 
error: 'Access denied for user 'root'@'localhost' (using password: YES)' 

解决方案1(推荐):

为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log 

可以通过命令获取MySQL的临时密码:

$ grep "temporary password" /var/log/mysqld.log
2018-09-05T03:35:49.714848Z 1 [Note] A temporary password is generated for root@localhost: sdr>HGs<x0>t

用该密码登录到服务端后,必须马上修改密码,不然会报如下错误: 

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. 

如果只是修改为一个简单的密码,会报以下错误:

mysql> set password = password('123456');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这个其实与validate_password_policy和validate_password_length的值有关。详细介绍见这里。 

修改validate_password_policy和validate_password_length参数的值:

mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)

然后设置密码:

mysql> SET PASSWORD = PASSWORD('your new password');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

至此重置密码也就算是完了,你可以使用新设置的密码去登录试试。

 

解决方案2:

安装完成MySQL后,需要进行下面的配置: 

启动mysql:

# /etc/init.d/mysql start
# /etc/init.d/mysql stop

启动成功后查看mysql进程信息,获取mysqld_safe的安装目录(非常关键):

# ps -ef | grep -i mysql

 

可以看到mysqld_safe的安装位置:/usr/bin/ 

接着执行一下命令停止mysql:

# /etc/init.d/mysql stop

以安全方式启动mysql:

# /usr/bin/mysqld_safe --skip-grant-tables >/dev/null 2>&1 &

稍等5秒钟,然后执行以下语句:

# /usr/bin/mysql -u root mysql

注意:mysql与mysql_safe目录一样,都是:/usr/bin/下,这个是通过“ps -ef | grep -i mysql”命令得到的。 

出现“mysql>”提示符后输入:

 

MySQL 5.7.5以前的版本

mysql> update user set authentication_string = Password('123456') where User = 'root';

回车后执行(刷新MySQL系统权限相关的表):

mysql> flush privileges;
Query OK, 1 row affected, 1 warning (0.15 sec)
Rows matched: 1 Changed: 1 Warnings: 1

再执行exit退出:

mysql> exit;

退出后,使用以下命令登陆mysql,试试是否成功:

# mysql -u root -p

按提示输入密码:123456

进入后重新设置一次密码:

mysql> SET PASSWORD = PASSWORD('123456');
Query OK, 0 rows affected (0.03 sec) 

然后就能正常操作了。

 

MySQL 5.7.6以后的版本 

MySQL 5.7.6 以后废弃了 user 表中的 password 字段和 password() 方法,所以使用旧的方法去重置密码对 mysql 8.0 是不行的!

先将默认的密码置空:

mysql> use mysql;  
mysql> update user set authentication_string='' where user='root';

再执行exit退出:

mysql> exit;

执行ps -ef | grep 'mysql'查看正在运行的mysql相关进程pid,kill -9结束掉。

接着执行一下命令启动mysql:

# /etc/init.d/mysql start

重新登录到 MySQL 上:

# mysql -u root -p

提示输入密码时直接敲回车,因为我们刚才已经将密码置为空了。 

然后使用 ALTER 修改 root 用户密码:

mysql> ALTER user 'root'@'localhost' IDENTIFIED BY 'Abc123@';

其中 Abc123@为你设置的新密码,执行完之后会提示你 OK 的话,就代表修改成功了,至此重置密码也就算是完了,你可以使用新设置的密码去登录试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值