MySQL 用户 DB 没有密码列-在 OSX 上安装 MySQL

我正在尝试更改 MySql root 用户的密码。

我所做的如下。

  1. 安装 MySql-5.7.6 ~ . dmg (Community Server)和工作台。
  2. 关闭 OSX 系统首选项上的服务器。
  3. 通过控制台访问 MySql。命令是 mysqld_safe --skip-grant
  4. 执行 update user set password=password('1111') where user='root';并得到一条错误消息—— > ERROR 1054 (42S22): Unknown column 'password' in 'field list'

顺便说一句,我做了 use mysql;。 所以我选择查询用户表和发现密码列实际上不存在。

这是非常奇怪的。有没有可能原来的用户表没有密码列?

如何更改不存在的密码?

谢谢你的回答: D

255645 次浏览

使用 ALTER USER命令,而不是尝试更新 USER行。请记住,可能有多个“ root”用户,因为用户实体也由其连接的机器限定

Https://dev.mysql.com/doc/refman/5.7/en/alter-user.html

比如说。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password'
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password'

在 MySQL 5.7中,MySQL.user 表字段中的 password 字段被删除,现在字段名称为“ entication _ string”。

首先选择数据库:

mysql>use mysql;

然后展示表格:

mysql>show tables;

您将找到用户表,现在让我们看看它的字段:

mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field                  | Type                              | Null | Key | Default               | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host                   | char(60)                          | NO   | PRI |                       |       |
| User                   | char(16)                          | NO   | PRI |                       |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N                     |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N                     |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| File_priv              | enum('N','Y')                     | NO   |     | N                     |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| References_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N                     |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N                     |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N                     |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N                     |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N                     |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N                     |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N                     |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N                     |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N                     |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       |
| ssl_cipher             | blob                              | NO   |     | NULL                  |       |
| x509_issuer            | blob                              | NO   |     | NULL                  |       |
| x509_subject           | blob                              | NO   |     | NULL                  |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0                     |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0                     |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0                     |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0                     |       |
| plugin                 | char(64)                          | NO   |     | mysql_native_password |       |
| authentication_string  | text                              | YES  |     | NULL                  |       |
| password_expired       | enum('N','Y')                     | NO   |     | N                     |       |
| password_last_changed  | timestamp                         | YES  |     | NULL                  |       |
| password_lifetime      | smallint(5) unsigned              | YES  |     | NULL                  |       |
| account_locked         | enum('N','Y')                     | NO   |     | N                     |       |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)

惊讶吧! 没有名为“ password”的字段,而是名为“ entication _ string”的密码字段。所以,只要这样做:

update user set authentication_string=password('1111') where user='root';

现在,一切都会好起来的。

与 MySQL 5.6相比,这些变化非常广泛: MySQL 5.7的新特性

只有当我在这里提到的命令之后“刷新”时,它才能工作。下面是我使用的完整命令列表:

以前的答案可能对以后的 mysql 版本不起作用。如果以前的答案对你不起作用,请尝试以下步骤:

1-单击 wamp 图标 > mysql > mysql 控制台

2-写下面的命令,一个接一个

use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit

谢谢你的帮助。以防万一,如果人们仍然有问题,试试这个。

适用于 MySQL 5.6及以下版本

您是否忘记了您的 Mac OS X“根”密码,需要重新设置它?遵循以下4个简单的步骤:

  1. 停止 mysqld 服务器。通常这可以通过“系统预置”> MySQL > “停止 MySQL 服务器”来完成
  2. 使用权限旁路以安全模式启动服务器 从一个终端机: sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3. 在一个新的终端窗口中: Sudo/usr/local/mysql/bin/mysql-u 根 更新 mysql.User SET PASSWORD = PASSWORD (‘ NewPassword’) WHERE User = ‘ root’; 同花特权; 问
  4. 再次停止 mysqld 服务器,并在正常模式下重新启动它。

适用于 MySQL 5.7及以上版本

  1. 停止 mysqld 服务器。这通常可以通过 'System Prefrences' > MySQL > 'Stop MySQL Server'来完成
  2. 使用权限旁路以安全模式启动服务器 从一个终端机: sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3. 在一个新的终端窗口中: Sudo/usr/local/mysql/bin/mysql-u 根 更新 mysql.User SET 认证 _ string = PASSWORD (‘ NewPassword’) WHERE User = ‘ root’; 同花特权; 问
  4. 再次停止 mysqld 服务器,并在正常模式下重新启动它。

我陷入的一个陷阱是,现在有了 没有密码,它被重新命名为:

update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';

现在应该是:

update user set authentication_string=password('YOURPASSWORDHERE') where user='root';

对于这个问题,我使用了一个简单粗暴的方法,将字段名重命名为 password,原因是我使用了 mac navicat 高级软件中的可视化操作错误: ‘字段列表’中未知列‘ password’,软件本身使用密码,使我不能轻松操作。 因此,我根目录到数据库命令行,运行

Use mysql;

然后修改字段名:

ALTER TABLE user CHANGE authentication_string password text;

毕竟一切正常。

如果在安装时没有设置密码,则会发生此错误,在本例中为 使用 unix-socket 插件的 mysql

但是如果从设置中删除插件链接(表 mysql.user)就会出现其他问题。这并没有解决问题,而是创造了另一个问题。要修复已删除的链接并设置密码(“ PWD”) ,请执行:

1)如上所述,使用 --skip-grant-tables运行。

如果不起作用,那么在 /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]部分中添加字符串 skip-grant-tables,然后执行 sudo service mysql restart.

2)运行 mysql -u root -p,然后(更改“ PWD”) :

update mysql.user
set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password"
where User='root' and Host='localhost';
flush privileges;


quit

然后是 sudo service mysql restart检查: mysql -u root -p

restart之前,从 mysqld.cnf 文件中删除该字符串,如果您在那里设置该字符串的话。

Root 原因: Root 没有密码,Python connect 语句应该反映这一点。

要解决错误1698,请将 Python 连接密码更改为“。

注意: 手动更新用户的密码不会解决问题,您将 仍然得到错误1698

记住密码需要进一步设置,甚至在重新启动 mysql 之后,如下所示

SET PASSWORD = PASSWORD('root');