MySQL 用户数据库没有密码列 - 在 OSX 上安装 MySQL
MySQL user DB does not have password columns - Installing MySQL on OSX
我正在尝试更改 MySql root 密码。
下面是我做的。
- 安装 MySql-5.7.6 ~ .dmg(社区服务器)和 workbench.
- 在 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;
。
所以我对用户 table 做了 select 查询,发现密码列实际上不存在。
很奇怪。难不成原用户table没有密码栏?
如何更改不存在的密码?
感谢您的回答:D
使用 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'
在MySQL5.7中,mysql.usertable字段中的密码字段被移除,现在字段名称为'authentication_string'。
首先选择数据库:
mysql>use mysql;
然后显示 tables:
mysql>show tables;
您将找到用户 table,现在让我们看看它的字段:
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相比,变化相当大:What’s New in MySQL 5.7
只有在我 "flushed" 执行此处提到的命令后,它才对我有用。这是我使用的完整命令列表:
以前的答案可能不适用于以后的 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 'ROOT' 密码并且需要重设?请遵循以下 4 个简单步骤:
- 停止 mysqld 服务器。通常这可以通过 from 'System Prefrences' > MySQL > 'Stop MySQL Server'
来完成
- 以绕过特权的安全模式启动服务器
从终端:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 在新终端中 window:
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 服务器。通常这可以通过 from
'System Prefrences' > MySQL > 'Stop MySQL Server'
来完成
- 以绕过特权的安全模式启动服务器
从终端:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 在新终端中 window:
sudo /usr/local/mysql/bin/mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';
FLUSH PRIVILEGES;
\q
- 再次停止 mysqld 服务器并以正常模式重新启动它。
我陷入的一个陷阱是现在没有密码字段,它已被重命名为:
update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';
现在应该是:
update user set authentication_string=password('YOURPASSWORDHERE') where user='root';
对于这个问题,我用了一个简单粗暴的方法,将字段名重命名为password,原因是我使用macnavicat premium软件在可视化操作报错:Unknown column'password'在'field List '中,软件本身使用密码让我无法轻易操作。
因此,我root进了数据库命令行,运行
Use mysql;
然后修改字段名:
ALTER TABLE user CHANGE authentication_string password text;
一切正常后
如果您没有在安装时设置密码(在本例中为 mysql using unix-socket plugin),就会发生此错误。
但是如果从设置中删除插件link (table mysql.user) 会出现其他问题。这不能解决问题并产生另一个问题。要修复已删除的 link 并设置密码 ("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 没有密码,您的 python 连接语句应该反映出这一点。
要解决错误 1698,请将您的 python 连接密码更改为 ''。
注意:手动更新用户密码并不能解决问题,你会
仍然出现错误 1698
记住即使重启后也需要进一步设置密码mysql如下
SET PASSWORD = PASSWORD('root');
我正在尝试更改 MySql root 密码。
下面是我做的。
- 安装 MySql-5.7.6 ~ .dmg(社区服务器)和 workbench.
- 在 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;
。
所以我对用户 table 做了 select 查询,发现密码列实际上不存在。
很奇怪。难不成原用户table没有密码栏?
如何更改不存在的密码?
感谢您的回答:D
使用 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'
在MySQL5.7中,mysql.usertable字段中的密码字段被移除,现在字段名称为'authentication_string'。
首先选择数据库:
mysql>use mysql;
然后显示 tables:
mysql>show tables;
您将找到用户 table,现在让我们看看它的字段:
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相比,变化相当大:What’s New in MySQL 5.7
只有在我 "flushed" 执行此处提到的命令后,它才对我有用。这是我使用的完整命令列表:
以前的答案可能不适用于以后的 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 'ROOT' 密码并且需要重设?请遵循以下 4 个简单步骤:
- 停止 mysqld 服务器。通常这可以通过 from 'System Prefrences' > MySQL > 'Stop MySQL Server' 来完成
- 以绕过特权的安全模式启动服务器
从终端:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 在新终端中 window:
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 服务器。通常这可以通过 from
'System Prefrences' > MySQL > 'Stop MySQL Server'
来完成
- 以绕过特权的安全模式启动服务器
从终端:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- 在新终端中 window:
sudo /usr/local/mysql/bin/mysql -u root UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES; \q
- 再次停止 mysqld 服务器并以正常模式重新启动它。
我陷入的一个陷阱是现在没有密码字段,它已被重命名为:
update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';
现在应该是:
update user set authentication_string=password('YOURPASSWORDHERE') where user='root';
对于这个问题,我用了一个简单粗暴的方法,将字段名重命名为password,原因是我使用macnavicat premium软件在可视化操作报错:Unknown column'password'在'field List '中,软件本身使用密码让我无法轻易操作。 因此,我root进了数据库命令行,运行
Use mysql;
然后修改字段名:
ALTER TABLE user CHANGE authentication_string password text;
一切正常后
如果您没有在安装时设置密码(在本例中为 mysql using unix-socket plugin),就会发生此错误。
但是如果从设置中删除插件link (table mysql.user) 会出现其他问题。这不能解决问题并产生另一个问题。要修复已删除的 link 并设置密码 ("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 没有密码,您的 python 连接语句应该反映出这一点。
要解决错误 1698,请将您的 python 连接密码更改为 ''。
注意:手动更新用户密码并不能解决问题,你会 仍然出现错误 1698
记住即使重启后也需要进一步设置密码mysql如下
SET PASSWORD = PASSWORD('root');