MySQL用户数据库没有密码栏 – 在OSX上安装MySQL
我正在尝试更改MySql root密码。
我所做的是以下。
- 安装MySql-5.7.6〜.dmg(社区服务器)和工作台。
- closuresOSX系统首选项上的服务器。
- 通过控制台访问MySql。 命令是
mysqld_safe --skip-grant
- 执行
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个简单的步骤:
- 停止mysqld服务器。 通常,这可以通过从“系统预置”> MySQL>“停止MySQL服务器”
- 以安全模式启动服务器,使用权限绕过terminal:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 在新的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
- 再次停止mysqld服务器并以正常模式重新启动它。
对于MySQL版本5.7及更高版本
- 停止mysqld服务器。 通常,这可以通过从
'System Prefrences' > MySQL > 'Stop MySQL Server'
- 以安全模式启动服务器,使用权限绕过terminal:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 在新的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
- 再次停止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;
毕竟正常。