Пользовательская БД MySQL не имеет столбцов паролей - Установка MySQL на OSX
Я пытаюсь изменить пароль root MySql.
То, что я сделал, ниже.
- Установите MySql-5.7.6 ~ .dmg(Сервер совместной работы) и верстак.
- Выключите сервер в настройках системы 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
9 ответов
В 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)
Сюрприз! Нет поля с именем "пароль", поле пароля называется "строка_ аутентификации". Итак, просто сделайте это:
update user set authentication_string=password('1111') where user='root';
Теперь все будет хорошо.
По сравнению с MySQL 5.6 изменения довольно обширны: что нового в MySQL 5.7
Эта ошибка происходит, если вы не установили пароль при установке, в этом случае mysql использует плагин unix-socket.
Но если удалить ссылку на плагин из настроек (таблица mysql.user) будет другая проблема. Это не решает проблему и создает другую проблему. Чтобы исправить удаленную ссылку и установить пароль ("PWD"), выполните:
1) Бег с --skip-grant-tables
как сказано выше.
Если это не работает, то добавьте строку skip-grant-tables
в разделе [mysqld]
из /etc/mysql/mysql.conf.d/mysqld.cnf
, Тогда делай 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, если вы ее там установили.
Одна ловушка, в которую я попал, это то, что сейчас нет поля пароля, оно было переименовано так:
update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';
Теперь должно быть:
update user set authentication_string=password('YOURPASSWORDHERE') where user='root';
Использовать ALTER USER
команда, а не пытаться обновить USER
строка. Имейте в виду, что может быть более одного "корневого" пользователя, потому что сущности пользователя квалифицируются также на машине, с которой они подключаются
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. Попробуйте эти шаги, если предыдущие ответы не сработали для вас:
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. Как правило, это можно сделать с помощью "Системные настройки"> MySQL > "Остановить MySQL Server".
- Запустите сервер в безопасном режиме с обходом привилегий с терминала:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- В новом окне терминала:
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'
- Запустите сервер в безопасном режиме с обходом привилегий с терминала:
sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
- В новом окне терминала:
sudo /usr/local/mysql/bin/mysql -u root UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root'; FLUSH PRIVILEGES; \q
- Остановите сервер mysqld снова и перезапустите его в обычном режиме.
Для этой проблемы я использовал простой и грубый метод, переименуйте имя поля в пароль, причина в том, что я использую премиум-программное обеспечение mac navicat в визуальной ошибке операции: Неизвестный столбец "пароль" в "поле Список", Само программное обеспечение использует пароль, поэтому я не могу легко работать. Поэтому я рутаю в командную строку базы данных, запускаю
Use mysql;
А затем измените имя поля:
ALTER TABLE user CHANGE authentication_string password text;
Ведь нормально.
Помните, что пароль должен быть установлен даже после перезапуска MySQL, как показано ниже
SET PASSWORD = PASSWORD('root');
Причина root: root не имеет пароля, и ваш оператор Python Connect должен это отражать.
Чтобы устранить ошибку 1698, измените свой пароль для подключения к Python на ''.
примечание: ручное обновление пароля пользователя не решит проблему, вы все равно получите ошибку 1698