MySql修改Root密码

标签: Mysql 分类: 数据库 创建时间:2018-12-28 04:11:13 更新时间:2025-01-17 10:39:22

前言

mysql5.7
记一次心酸的在Deepin(Ubuntu、linux)上安装mysql5.7的办法。弄了一天,最后终于成功了,期间还使用apt-get remove卸载了一次mysql-server mysql-client(卸载的时候可能会要求你使用apt-get autoremove)

总结如下:(注意应使用管理员权限,必要时使用sudo执行相关命令)

一、Linux修改用户密码

1.先停止MySQL服务

1
2
3
4
## 启动mysql
service mysqld stop
## or
systemctl stop mysqld

2.跳过安全检查(这步容易出错,见下面说明)

1
2
3
4
5
6
7
8
9
10
11
## 第一种方法
/usr/bin/mysqld_safe --skip-grant-tables &

## or
/usr/bin/mysqld_safe --defaults-file=my.cnf --skip-grant-tables --skip-networking &

## 第二种方法
## 如果没有mysql_safe文件,就执行下面的操作
vim /etc/my.cnf
## 在文件的最后添加(如果是这种方式,记得在修改完密码之后,关闭mysql,将这个参数删除,然后重启)
skip-grant-tables

(解释:设置了该参数,则实例在启动过程中会跳过权限表的加载,这就意味着任何用户都能登录进来,并进行任何操作,相当不安全。建议同时添加–skip-networking参数。其会让实例关闭监听端口,自然也就无法建立TCP连接,而只能通过本地socket进行连接。MySQL8.0就是这么做的,在设置了–skip-grant-tables参数的同时会自动开启–skip-networking)

3.重开一个shell,进入mysql

输入mysql命令,进入mysql客户端

1
2
3
4
## 启动mysql
systemctl start mysqld
## 进入mysql
mysql

4.更改密码

1
2
3
4
5
6
## 先执行刷新权限的命令
flush privileges;
## 然后执行修改密码的命令,如果报错,可能是密码不符合要求
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123qwe';
## 最后再次执行刷新权限的命令
flush privileges;

解释
免密码登录进来后,直接执行alter user操作是不行的,因为此时的权限表还没加载。可先通过flush privileges操作触发权限表的加载,再执行alter user操作。需要注意的是,通过alter user修改密码只适用于MySQL5.7和8.0,如果是MySQL 5.6,此处可写成:update mysql.user set password=password(‘123456’) where host=’localhost’ and user=’root’;

5.重启mysql

1
2
3
4
5
6
7
8
9
## 退出mysql
mysql:quit;
## 重启mysql服务
service msyql restart
## or
systemctl restart mysqld

## 用户名密码登录
mysql -h 168.192.1.40 -P 3329 -u user -p

完成密码修改

下一步是安装MySQL-workbench,一条命令,安装卸载都很方便。
sudo apt-get install mysql-workbench

要安装Navicat,其实挺麻烦的,界面也是丑的不行,主要是Navicat是运行在wine下的,安装后电脑里会多了很多莫名奇妙的wine程序,比如notepad,webbrower等,还没想到方法删掉它们。

问题

其实上面多个网站基本思路都是正确的,都是要进入忽略安全模式,但是有时候在使用–skip-grant-tables参数时,会报些错误,比如:
(1) ”plugin auth_socket is not loaded“
解决方式是:

1
2
3
4
5
6
use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';

flush privileges;
quit;

(2) “mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists”
解决方式是:

1
2
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

(3) “ERROR 1290 (HY000): The MySQL server is running with the –skip-grant-tables option so it cannot execute this statement”
解决方式是:参考资料(1)中的内容,先执行一遍flush privileges;

1
2
3
4
5
6
7
8
mysql> alter user 'root'@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

(4) “Unknown column ‘password’ in ‘field list’”
解决方式是:新安装的MySQL5.7,登录时提示密码错误,安装的时候并没有更改密码,后来通过免密码登录的方式更改密码,输入update mysql.user  set password=password(‘root’) where user=’root’时提示ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’,原来是mysql数据库下已经没有password这个字段了,password字段改成了:authentication_string,所以更改语句替换为
update mysql.user set authentication_string=password(‘root’) where user=’root’ ;
即可,然后执行:

1
2
mysql> flush privileges;
mysql> quit ;

(5) /usr/bin/mysqld_safe: No such file or directory
执行mysqld_safe,出现了没有这个文件或者目录。这个时候可以通过修改my.conf配置文件的形式进行mysql的启动。

二、Win10下修改密码

1、在服务里面打开MySQL80服务的属性,查看启动参数–defaults-file=”C:\ProgramData\MySQL\MySQL Server 8.0\my.ini”,复制这句my.ini的路径,以及mysql安装路径。

2、停止mysql服务

3、打开PowerShell,进入mysql的安装目录,输入以下命令,打开mysql服务

1
PS C:\Program Files\MySQL\MySQL Server 8.0\bin> .\mysqld.exe --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" --skip-grant-tables --shared-memory

4、另开一个PowerShell,进入mysql安装目录,执行:

1
PS C:\Program Files\MySQL\MySQL Server 8.0\bin> .\mysql.exe

5、刷新数据库权限:

1
mysql> FLUSH PRIVILEGES;

6、修改root密码:

1
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

7、退出PowerShell中的mysql,重启服务里面的mysql。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。