MySQL user DB не имеет столбцов паролей-установка MySQL на OSX
Я пытаюсь изменить пароль корня MySql.
что я сделал ниже.
- Установить 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
9 ответов:
в MySQL 5.7, поле пароля в mysql.поле таблицы пользователей было удалено, теперь имя поля - '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)сюрприз!Там нет поля с именем "пароль", поле пароля называется "authentication_string". Итак, просто сделайте это:
update user set authentication_string=password('1111') where user='root';теперь все все будет хорошо.
по сравнению с MySQL 5.6, изменения весьма обширны: что нового в MySQL 5.7
одна ловушка я попал в том есть без пароля теперь он был переименован так:
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 с помощью unix-socket plugin.
но если удалить ссылку плагина из настроек (таблица mysql.пользователь) будет другая проблема. Это не устраняет проблему и создает другую проблему. Чтобы исправить удаленную ссылку и установить пароль ("PWD") сделайте:
1) запустить с
--skip-grant-tablesкак сказано выше.если это не работает, то добавьте строку
skip-grant-tablesв разделе[mysqld]из/etc/mysql/mysql.conf.d/mysqld.cnf. Тогда делатьsudo service mysql restart.2) Run
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.КНФ, если вы установите его там.
Спасибо за вашу помощь. На всякий случай, если у людей все еще есть проблемы, попробуйте это.
для MySQL версии 5.6 и ниже
вы забыли свой Mac OS X 'ROOT' пароль и нужно сбросить его? Выполните следующие 4 простых шага:
- остановите сервер mysqld. Обычно это может быть сделано из 'настройки системы' > в MySQL > 'остановить сервер MySQL'
- запуск сервера в безопасном режиме с правами обход Из терминала:
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 сервер снова и перезапустить его в обычном режиме.
Он работал только со мной, когда я "смыл" после команд, упомянутых здесь. Вот полный список команд, которые я использую:
предыдущие ответы могут не работать для более поздних версий mysql. Попробуйте выполнить следующие действия, если предыдущие ответы не работали для вас:
1-Нажмите на значок wamp > mysql > mysql console
2-Напишите следующие команды, одну за другой
use mysql; update user set authentication_string=password('your_password') where user='root'; FLUSH PRIVILEGES; quit
для этой проблемы я использовал простой и грубый метод, переименуйте имя поля в пароль, причина этого в том, что я использую программное обеспечение mac navicat premium в ошибке визуальной операции: неизвестный столбец "пароль" в "списке полей", само программное обеспечение использует пароль, так что я не могу легко работать. Поэтому я вхожу в командную строку базы данных, запускаю
Use mysql;а затем измените имя поля:
ALTER TABLE user CHANGE authentication_string password text;ведь нормально.
первопричина: root не имеет пароля, и ваш оператор python connect должен отражать это.
чтобы решить ошибку 1698, измените пароль подключения python на ".
Примечание: ручное обновление пароля пользователя не решит проблему, вы будете все равно получаю ошибку 1698
запомнить пароль должен быть установлен дополнительно даже после перезагрузки mysql, как показано ниже
SET PASSWORD = PASSWORD('root');
Comments