环境介绍:
操作系统:Red Hat linux6
数据库版本:Mysql5.7
注:MySQL5.7在初始安装后,会生成随机初始密码,并在/var/log/mysqld.log中有记录,可以通过head命令查看,找password关键字即可找到随机初始密码。
设置密码方法如下:
方法1:用update直接编辑user表
mysql -u root /*进入mysql*/
mysql>use mysql /*进入mysql用户*/
mysql>update user set authentication_string=password('newpass'),password_expired='N where user='root';
/本sql适用于mysql5.7之后的版本(包括5.7),5.7之前的版本不是authentication_string,而是Password,所以把authentication_string改为password即可设置密码。
mysql>FLUSH PRIVILEGES; /*告诉服务器重载授权表*/
退出mysql,编辑/etc/my.cnf文件,注释skip-grant-tables的内容,在重启服务使用账户密码登录即可。
方法2:mysqladmin命令(当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,这种方法就是无效的)mysqladmin -u root password "newpass" /*设置的密码为newpass*/
如果要修改用户名密码
方法3:为账户赋予密码用 set password命令mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
方法4:如果你没有以匿名用户连接,省略FOR子句便可以更改自己的密码:mysql> SET PASSWORD = PASSWORD('newpass');
方法5:你还可以在全局级别使用GRANT USAGE语句(在.)来指定某个账户的密码而不影响账户当前的权限:mysql> GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY 'newpass';
补充:创建新账户时建立密码
mysql> INSERT INTO user (Host,User,Password) VALUES('%','oldboy',PASSWORD('newpass'));
mysql> FLUSH PRIVILEGES;
当你使用SET PASSWORD、INSERT或UPDATE指定账户的密码时,必须用PASSWORD()函数对它进行加密。(唯一的特例是如果密码为空,你不需要使用PASSWORD())。需要使用PASSWORD()是因为user表以加密方式保存密码,而不是明文。
mysql> INSERT INTO user (Host,User,Password) VALUES('%','oldboy','newpass');
mysql> FLUSH PRIVILEGES;
结果是密码'newpass'保存到user表后没有加密。当oldboy使用该密码连接服务器时,值被加密并同保存在user表中的进行比较。但是,保存的值为字符串'newpass',因此比较将失败,服务器拒绝连接:
Access denied
修改密码方法如下:
方法1: 如果忘记root密码,可以通过上面的设置密码第一种方法进行修改。
1.先修改配置文件/etc/my.cnf ,在[mysql]下面添加 skip-grant-tables 参数,重启服务。这时不用输入密码就能登录mysql
2.进入 mysql库,输入use mysql,用update 修改mysql的user表
3.FLUSH PRIVILEGES; /刷新权限/,然后退出mysql
4.将my.cnf配置文件中的 skip-grant-tables 参数注销或删除,在重启mysql服务即可
方法2: 使用mysqladminmysqladmin -u root -p password "newpass2" /*这时候回车提示输入的密码是旧密码*/
mysqladmin -u root -pnewpass password "newpass2" /*如果记得旧密码,用这种方式*/
当你使用navicat mysql工具连接mysql服务时报err1130错误,原因及解决方法如下:
1.检查下防火墙是否关闭 service iptables stop
2.改表法:检查是否是因为账号不支持远程,只能localhost。
登录本地数据库,进入mysql用户use mysql;
将user数据表里面的对应用户的host列中的localhost改为%即可。
SQL:mysql> select host,user from user order by host desc,user desc; ---检查用户的host
mysql>update user set host='%' where user='root'; --- 把localhost改为%
在MySQL中’%’表示可以在任何主机上登录MySQL数据库,那为什么还需要明确创建登录主机为localhost的用户呢?
这涉及到MySQL安装时的初始化用户,匿名用户以及连接验证策略等,下面进行深入的分析。
转载出处:
1.深入分析MySQL ERROR 1045 (28000)