MySQL用户数据库没有密码栏 – 在OSX上安装MySQL

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

我所做的是以下。

  1. 安装MySql-5.7.6〜.dmg(社区服务器)和工作台。
  2. closuresOSX系统首选项上的服务器。
  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; 。 所以我没有select查询用户表,发现密码列实际上不存在。

这很奇怪。 原始用户表可能没有密码列吗?

我怎样才能更改密码,这不存在?

感谢您的回答:D

在MySQL 5.7中,mysql.user表字段中的密码字段被删除了,现在字段名是'authentication_string'。

首先select数据库:

 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) 

惊喜!没有字段名为“密码”,密码字段名为“authentication_string”。 所以,只要做到这一点:

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

现在,一切都会好的。

与MySQL 5.6相比,这些变化相当广泛: MySQL 5.7中的新function

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

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

现在应该是:

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

使用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.6及以下版本

你忘了你的Mac OS X的ROOT密码,需要重置吗? 遵循以下4个简单的步骤:

  1. 停止mysqld服务器。 通常,这可以通过从“系统预置”> MySQL>“停止MySQL服务器”
  2. 以安全模式启动服务器,使用权限绕过terminal: sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3. 在新的terminal窗口中: sudo /usr/local/mysql/bin/mysql -u root UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES; \q sudo /usr/local/mysql/bin/mysql -u root UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES; \q
  4. 再次停止mysqld服务器并以正常模式重新启动它。

对于MySQL版本5.7及更高版本

  1. 停止mysqld服务器。 通常,这可以通过从'System Prefrences' > MySQL > 'Stop MySQL Server'
  2. 以安全模式启动服务器,使用权限绕过terminal: sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
  3. 在新的terminal窗口中: sudo /usr/local/mysql/bin/mysql -u root UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES; \q sudo /usr/local/mysql/bin/mysql -u root UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES; \q
  4. 再次停止mysqld服务器并以正常模式重新启动它。

当我在这里提到的命令之后“刷新”时,它只与我一起工作。 这里是我使用的命令的完整列表:

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

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

2-逐个写下面的命令

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

如果您没有在安装时设置密码,在这种情况下使用unix-socket插件的mysql ,则会发生此错误。

但是,如果从设置(表mysql.user)删除插件链接将有其他问题。 这不能解决问题,并造成另一个问题。 要修复已删除的链接并设置密码(“PWD”),请执行以下操作:

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

如果它不起作用,则在/etc/mysql/mysql.conf.d/mysqld.cnf [mysqld]部分添加stringskip-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中删除该string,如果您在那里设置。

对于这个问题,我使用了一个简单而粗鲁的方法,将字段名重命名为password,其原因是我使用了mac navicat premium软件中的可视化操作错误:未知列'password'in'field List',软件本身使用密码,所以我不能轻易操作。 所以我把根目录放入数据库命令行,运行

 Use mysql; 

然后修改字段名称:

 ALTER TABLE user CHANGE authentication_string password text; 

毕竟正常。