#mysql #mysqlcommand
#mysql
Вопрос:
В настоящее время я использую новейшую версию ISPConfig 3. Сегодня я хотел добавить базу данных и пользователя. Это не сработало. Затем я попробовал это на phpMyAdmin, и это не сработало.
Когда я попытался добавить пользователя в панель пользователей phpMyAdmin, я получил следующее сообщение об ошибке:
У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘* ДО ‘test’@’localhost» в строке 1
Вывод из /var/log/mysql/error.log:
[ОШИБКА] Неверно указано количество столбцов mysql.user. Ожидалось 42, найдено 44. Вероятно, таблица повреждена
Версия Mysql: 5.5.55-0 deb8u1 Версия phpMyAdmin: 4:4.2.12-2 deb8u2
Debian Linux 8
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос и включите SQL-запрос, который вы пробовали.
2. я перешел на вкладку пользователей phpmyadmin и хотел добавить туда пользователя.
3. 2-я ошибка указывает на то, что версия таблицы user не синхронизирована с версией вашего сервера MySQL. Это то, что вам нужно подтвердить как можно скорее. Хотя MySQL не должен был даже запускаться при таких обстоятельствах.
4. как это исправить?
5. Попробуйте запустить mysql_upgrade .
Ответ №1:
У меня была такая же проблема, когда я обновил сервер mysql с 5.5 до 5.7 в Debian 8 (jessie). В редких случаях это, вероятно, происходит, если вы обновляете напрямую, минуя последовательности версий. (Многие люди делают это, но такие обновления официально не поддерживаются). В моем случае все работало нормально, когда я выполнил приведенную ниже команду:
mysql_upgrade --force -uroot -p
Я надеюсь, что это поможет вам
Комментарии:
1. потрясающая работа! спасибо
2. после того, как Linux автоматически обновил mysql с 5.7 до 8.0, я столкнулся со странными проблемами, это одна из них. Спасибо, эта команда исправила их
3. вам может понадобиться sudo
4. это тоже решило для меня. Но я использую MAMP PRO, поэтому для меня команда:
/Applications/MAMP/Library/bin/mysql_upgrade -u --force root --password=[mypassword] -h 127.0.0.1
>> для читателей: поменяйте ‘[mypassword]’ на ваш.5. Контрольный список: (1) убедитесь, что mysql_upgrade
--version
соответствует вашему серверу, (2)--port NNNN
для альтернативного порта.
Ответ №2:
При переходе с mariadb 10 на mysql 5.6 возникли аналогичные проблемы. Сообщение об ошибке, которое я получил, немного отличалось от других, перечисленных на этой странице… что, конечно, означает, что для этого требовалось другое решение. При попытке изменить запись пользователя я получил следующую ошибку:
Неверно указано количество столбцов mysql.user. Ожидалось 43, найдено 46. Вероятно, таблица повреждена
Некоторые из приведенных выше советов помогли сформулировать проблему. После просмотра аналогичного сервера (с mysql 5.6) я сравнил поля как в «поврежденной» таблице пользователей (из таблицы mariadb 10 mysql.users), так и в «функциональной» таблице пользователей в другой таблице mysql 5.6 mysql.users.
Я удалил три проблемных поля с помощью командной строки mysql и следующих команд:
mysql -u root -p
use mysql;
alter table mysql.user drop column default_role;
alter table mysql.user drop column max_statement_time;
alter table mysql.user drop column password_expired;
quit
Проблема решена!
Комментарии:
1. Когда я запускаю
use mysql;
, это выдает ошибкуERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
2. Спасибо, сработало как шарм! Пропустил почти 1 час, пытаясь это исправить!
3. Будьте осторожны при этом. Убедитесь, что вы делаете это, только если знаете, что у вас есть 3 дополнительных столбца. Это все еще рискованно.
Ответ №3:
Это сработало для меня:
mysql_upgrade -uroot -p
и добавьте свой пароль root
Комментарии:
1. Ее следует запустить
sudo
. В противном случае возникает ошибка:Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13
2.
The mysql_upgrade client is now deprecated. The actions executed by the upgrade client are now done by the server. To upgrade, please start the new MySQL binary with the older data directory. Repairing user tables is done automatically. Restart is not required after upgrade.
Ответ №4:
В моем случае, и следуя рекомендации сообщения об ошибке, я побежал:
root@mysql-190877524-gm3j4:/# mysql_upgrade -uroot -p***
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.user OK
Upgrading the sys schema.
Checking databases.
[...]
Upgrade process completed successfully.
Checking if update is needed.
Это решило все.
Ответ №5:
Сегодня была такая же проблема с debian (jessie) и другим ящиком ami linux. Удаление столбца с истекшим сроком действия пароля из таблицы пользователей mysql устранило проблему для меня.
mysql> alter table mysql.user drop column password_expired;
Комментарии:
1. мой был is_role
Ответ №6:
Я перешел с mariadb
на mysql
, потому что не смог изменить myriadb
data directory
on centos 7 x 64
.
mysql
когда я попытался добавить нового пользователя, отличного от root. я получил
column count of mysql.user is wrong expected 45 found 48
я попытался
mysql_upgrade -uroot -p
и
mysql_upgrade --force -uroot -p
но все равно получил ту же ошибку.
поэтому я пошел дальше и добавил new user manually
в mysql.user
таблицу, скопировав все данные из других строк, имеющих root
имя пользователя.
restart service mysqld
и готово.
Ответ №7:
Сегодня я столкнулся с той же проблемой после того, как выполнил обновление промежуточного блока Debian Jessie 8. После некоторого расследования я обнаружил, что структура таблицы mysql отличается от того, что ожидает найти mysql-5.5.55. Я только что сравнил поврежденную базу данных mysql с недавно установленной и создал небольшой файл исправления, который должен исправить ошибку. Не уверен, работает ли это и при других условиях. Итак, будьте осторожны, используя этот патч и резервное копирование /var/ lib/mysql и /etc/ mysql, прежде чем делать что-то неприятное Я не несу ответственности за какие-либо повреждения, которые могут возникнуть из-за этого исправления. Используйте ее на свой страх и риск.
Прежде всего СДЕЛАЙТЕ РЕЗЕРВНЫЕ КОПИИ!! и даже больше РЕЗЕРВНЫХ КОПИЙ !! например, вы могли бы попробовать mysqlsafebackup (посмотрите на https://github.com/VerboteneZone/MySQLSafeBackup ), решение для шифрования и сжатия резервных копий MySQL, написанное мной.
Загрузите следующий патч в свой ящик:
# wget https://download.rent-an.expert/mysql-patch-5.5.55.sql.gz
Убедитесь, что ни один экземпляр в данный момент не обращается к вашему серверу MySQL (остановите службы, такие как apache2, postfix или что-то еще, что обычно обращается к серверу MySQL). Если вы убедились, что вы одни в темноте, примените исправление и принудительно обновите mysql с помощью следующих команд:
# zcat mysql-patch-5.5.55.sql.gz | mysql -uroot -p mysql
# mysql_upgrade --force -uroot -p
Если что-то сработало без каких-либо ошибок, перезапустите службу MySQL:
# service mysql stop
# service mysql start
После этого попробуйте создать тестового пользователя, чтобы увидеть, правильно ли был применен патч:
# mysql -uroot -p
СОЗДАЙТЕ ПОЛЬЗОВАТЕЛЯ ‘Testuser123’@’localhost’, ИДЕНТИФИЦИРОВАННОГО ‘Pass0worZ’;
Вы должны получить сообщение типа:
Запрос ОК, 0 строк затронуты (0,00 сек)
Теперь вы можете снова безопасно удалить своего тестируемого пользователя с помощью:
УДАЛИТЕ ПОЛЬЗОВАТЕЛЯ ‘Testuser123’@’localhost’;
В любом случае, если что-то пошло не так, восстановите резервную копию и повторите попытку
Надеюсь, это поможет.
Комментарии:
1. Почему вместо того, чтобы просто опубликовать ссылку на патч, который вы написали, вы сначала не ОБЪЯСНИТЕ, что делает патч и в чем различия между версиями MySQL, которые вы нашли? Ваш патч отправляет учетные данные MySQL других людей кому-то еще??
Ответ №8:
В моем случае с Debian 8 и MySQL 5.5 mysql_upgrade --force -uroot -p
проблема не устраняется.
Сначала мне нужно было перейти на MySQL 5.6, а затем выполнить приведенную выше команду.
http://www.debiantutorials.com/install-mysql-server-5-6-debian-7-8/
Ответ №9:
При переходе с mysql 5.5 на 5.7 (с использованием полного mysqldump, а затем исходной команды) У меня была ошибка только тогда, когда я пытался отредактировать или добавить пользователя
ОШИБКА 1805 (HY000): неверно указано количество столбцов mysql.user. Ожидалось 45, найдено 42. Вероятно, таблица повреждена
Аналогично некоторым другим, которые я здесь сделал
sudo mysql_upgrade -u root -p #sudo, чтобы он мог записать журнал sudo
перезапуск службы mysql
И это устранило проблему, я мог снова добавлять и редактировать пользователей. Я бы добавил это небольшое различие в качестве комментария к одному из похожих ответов, но у меня пока нет репутации
Комментарии:
1. У меня это не работает. mysql_upgrade -u root -p выдает ошибку:
mysql_upgrade: Got error: 1862: Your password has expired. To log in you must change it using a client that supports expired passwords. while connecting to the MySQL server
2. вы можете сбросить пароль напрямую в командной строке, например, в этом примере: support.rackspace.com/how-to /…
3. Я решил эту проблему с паролем, но все равно выдает мне
ERROR 1805 (HY000): Column count of MySQL.user is wrong. Expected 45, found 42. The table is probably corrupted
, когда я пытаюсь изменить права пользователя или удалить пользователей.
Ответ №10:
Сегодня я столкнулся с той же проблемой.. Решением для меня было вручную добавить недостающие столбцы в таблицу пользователя.
Осторожно — используйте на свой страх и риск
Недавно добавленные столбцы с mysql.5.5.55:
plugin, authentication_string, Create_tablespace_priv
Их необходимо добавить в определенный одер:
use mysql;
alter Table user ADD Create_tablespace_priv enum('N','Y') DEFAULT 'N' NOT NULL AFTER Trigger_priv;
alter Table user ADD plugin char(64) DEFAULT '';
alter Table user ADD authentication_string text DEFAULT NULL;
После этого я снова смог изменить пользовательскую таблицу.
Ответ №11:
После и обновления у меня было «Количество столбцов mysql.user неверно. Ожидалось 45, найдено 46. Вероятно, таблица повреждена» У меня возникли проблемы с входом в систему, поэтому я запустил db:
mysqld --console --skip-grant-tables
вошел в систему, и там был дополнительный столбец по сравнению с моей таблицей по умолчанию «Is_role», поэтому я его удалил:
ALTER TABLE `user` DROP COLUMN `is_role`;
перезапустил mysqld, и у нас все хорошо.
Комментарии:
1. Это спасло меня. Спасибо! Я сравнил таблицы аналогичного сервера, и это был один дополнительный столбец при обновлении 5.7.
Ответ №12:
Я, наконец, решил свою проблему таким образом:
1) Запустите mysql: mysqld –-console –-skip-grant-tables –-skip-external-locking
(держите терминал открытым)
2) Выполнить: mysqlcheck –-repair mysql user
Источник: https://forums.mysql.com/read.php?10 ,652134,652135#msg-652135
Комментарии:
1. Это не работает. Это дает мне
mysqlcheck: Got error: 1862: Your password has expired. To log in you must change it using a client that supports expired passwords. when trying to connect
2. @SmitPatel ваша проблема не связана.
Ответ №13:
Тихо то же сообщение об ошибке: неверно указано количество столбцов mysql.user. Ожидалось 42, найдено 43. Вероятно, таблица повреждена.
Это не решение, а обход … Я создал резервные копии всех своих баз данных из mysql 5.5.55-0 deb8u1 и восстановил их в mysql 5.7.18-0ubuntu0.16.04.1, пока эта ошибка не будет устранена. Тяжелая работа по обновлению всех подключений, но полезная.
Ответ №14:
Если вы пытаетесь добавить нового пользователя или даже изменить разрешение любых существующих пользователей и получаете сообщение об ошибке, сначала я бы предложил предоставить полное разрешение пользователям root, а затем добавить новых пользователей.
sudo mysql
GRANT ALL PRIVILEGES ON * . * TO 'ccuser'@'localhost';
И затем,
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'new_password';
Ответ №15:
В случае, если вы не хотите обновлять MySQL с помощью mysql_upgrade --force -uroot -p
or, mysql -u root -p
поскольку это может помешать работе базы данных, как если бы база данных могла быть важной, т. Е. Она может быть либо запущена на действующем сервере, либо слишком большой, чтобы делать резервную копию и восстанавливать ее, и вы, возможно, не захотите рисковать получитьона удалена с действующего сервера, тогда вы можете просто исправить ошибку, поняв ее построчно.
В вашем случае это может быть иначе, но в моем случае
Мне пришлось предоставить привилегии удаленному хосту, поскольку: GRANT ALL PRIVILEGES ON some_db_name_abc.* to 'root'@'xxx.xxx.x.xxx' IDENTIFIED BY 'test123';
и ошибка была #1558 - Column count of mysql.user is wrong. Expected 42, found 39. Created with MySQL 50173, now running 50562. Please use mysql_upgrade to fix this error.
Таким образом, в основном названы 3 столбца Create_tablespace_priv
, plugin
и authentication_string
они отсутствовали в таблице с именем user
базы mysql
данных. column names
Их position
в таблице и их datatypes
, я узнал с другого тестового сервера, который я добавил следующим образом:
ALTER TABLE mysql.user
ADD Create_tablespace_priv ENUM('N','Y') NOT NULL
AFTER Trigger_priv;
ALTER TABLE mysql.user
ADD plugin CHAR(64) NOT NULL
AFTER max_user_connections;
ALTER TABLE mysql.user
ADD authentication_string TEXT NOT NULL
AFTER plugin;
И запрос на предоставление привилегий удаленному хосту успешно выполнен после него
В случае, если вы допустили ошибку, вы можете удалить добавленный столбец из таблицы как:
ALTER TABLE mysql.user DROP COLUMN plugin;