MySQL用户数据库没有密码列 - 在OSX上安装MySQL
MySQL用户数据库没有密码列 - 在OSX上安装MySQL
我正在尝试更改MySql的root密码。
我所做的如下:
- 安装MySql-5.7.6 ~ .dmg(Community Server)和工作台。
- 在OSX系统首选项中关闭服务器。
- 使用控制台访问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;
。
所以我在用户表上进行了选择查询,发现密码列实际上不存在。
这很奇怪。原始用户表可能没有密码列吗?
我怎么能更改不存在的密码呢?
谢谢你的答案:D
MySQL在OSX上安装时出现了问题,具体问题是MySQL用户数据库没有密码字段。解决问题的方法是将原来的更新密码的SQL语句中的"password"改为"authentication_string"。
具体解决方法如下:
首先,打开终端,进入MySQL:
mysql -u root
然后,执行下面的SQL语句:
update user set authentication_string=password('YOURPASSWORDHERE') where user='root';
将"YOURPASSWORDHERE"替换为你想设置的密码。
这样就成功地解决了MySQL在OSX上安装时缺少密码字段的问题。
MySQL用户数据库没有密码列 - 在OSX上安装MySQL
在安装过程中如果没有设置密码,就会出现这个错误,这种情况下使用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
进行检查。
在重新启动之前,从mysqld.cnf文件中删除该字符串(如果在其中设置了该字符串)。
这个解决方法对我非常有效,特别感谢bl79!其他的方法都无法正常工作,但这个方法却起到了作用。
我遇到了ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '("MYNEWPASSWORD"), plugin="mysql_native_password"
错误。你的答案非常棒!这个答案帮助了我6个小时。
plugin="mysql_native_password"
对我非常有效。
完美解决我的问题。
在MySQL 5.7中,mysql.user表中的密码字段被移除,现在字段名为'authentication_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'的字段,密码字段被命名为'authentication_string'。所以,只需要这样做:
update user set authentication_string=password('1111') where user='root';
现在一切都会正常了。
与MySQL 5.6相比,这些更改相当广泛:MySQL 5.7的新功能
即使在启动mysqld时使用了--skip-grant-tables限制,此方法也有效。由于您是匿名用户,您无法使用以下命令更改密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password' ALTER USER 'root'@'*' IDENTIFIED BY 'new-password' 它会给您一个匿名用户权限错误。
如果根本没有表怎么办?
改变密码字段名称...一个决定导致了这么多人的麻烦...
即使执行了这个命令,我仍然无法使用密码登录update user set authentication_string=password('1111') where user='root';我得到ERROR 1698 (28000): Access denied for user 'root'@'localhost'
首先,macOS上的MySQL默认使用一个错误的密码(包含无效字符,因此我甚至无法在初始设置中连接到root)。然后他们不允许127.0.0.1,所以我必须手动授予它。但在此之前,我必须更改用户。现在他们改变了字段名。绝对的疯狂。
当在第2步重置root密码时,还要将auth插件更改为mysql_native_password:use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root'; # THIS LINE
flush privileges;
quit;