2017-05-08 14 views
9

Aktualnie używam najnowszej wersji ISPConfig 3. Dzisiaj chciałem dodać db i użytkownika. To nie zadziałało. Potem próbowałem go na PHPmyadmin i nie działało.Liczba kolumn mysql.user jest niepoprawna. Oczekiwano 42, znaleziono 44. Tabela jest prawdopodobnie uszkodzona

Kiedy próbowałem dodać użytkownika w Panelu phpMyAdmin Użytkownicy otrzymałem następujący komunikat o błędzie:

masz błąd w składni SQL; sprawdzić podręcznika, który odpowiada twojej wersji serwera MySQL dla prawego składnię używaną blisko '* TO 'test' @' localhost '' at line 1

Wyjście z/var/log/mysql/błędu .log:

[ERROR] Liczba kolumn mysql.user jest nieprawidłowa. Oczekiwany 42, znalezionych 44. Stół jest prawdopodobnie uszkodzona

Mysql Wersja: 5.5.55-0 + deb8u1 phpMyAdmin Wersja 4: 4.2.12-2 + deb8u2

Debian Linux 8

+1

Edytuj pytanie i dołącz zapytanie SQL. –

+0

Poszedłem do zakładki użytkowników phpmyadmin i chciałem dodać tam użytkownika. – Ser1ous1

+0

Drugi błąd oznacza, że ​​wersja tabeli użytkownika nie jest zsynchronizowana z wersją serwera MySQL. To jest coś, co musisz potwierdzić JAK NAJSZYBCIEJ. Mimo że MySQL nie powinien nawet zaczynać się w takich okolicznościach. – Shadow

Odpowiedz

0

Cichy ten sam komunikat o błędzie: Liczba kolumn mysql.user jest niepoprawna. Oczekiwano 42, znaleziono 43. Tabela jest prawdopodobnie uszkodzona.
To nie jest rozwiązanie, ale obejście ... Zarchiwizowałem wszystkie moje bazy danych z mysql 5.5.55-0 + deb8u1 i przywróciłem je do mysql 5.7.18-0ubuntu0.16.04.1, dopóki ten błąd nie zostanie rozwiązany. Ciężka praca, aby zaktualizować wszystkie połączenia, ale użyteczne.

2

Dzisiaj wpadłem na ten sam problem, po tym, jak zrobiłem dist-upgrade pakietu próbnego Debian Jessie 8. Po pewnym dochodzeniu dowiedziałem się, że struktura tabel mysql różni się od tego, co mysql-5.5.55 spodziewa się znaleźć. Właśnie porównałem uszkodzoną bazę danych mysql ze świeżo zainstalowaną bazą i utworzyłem mały plik poprawki, który powinien poprawić błąd. Nie jestem pewien, czy to działa w innych warunkach. Uważaj więc, używając łaty i kopii zapasowej/var/lib/mysql i/etc/mysql, zanim zrobisz coś nieprzyjemnego;) Nie ponoszę żadnej odpowiedzialności za jakiekolwiek szkody, które mogą pojawić się w tej łatce. Używaj go na własne ryzyko.

Przede wszystkim MAKE BACKUPS !! i jeszcze więcej BACKUPS !! na przykład możesz dać mysqlsafebackup próbę (Look at https://github.com/VerboteneZone/MySQLSafeBackup), szyfrowanie i kompresowanie rozwiązania kopii zapasowej MySQL, napisanego przeze mnie.

Pobierz następującą poprawkę do swojej skrzynki:

# wget https://download.rent-an.expert/mysql-patch-5.5.55.sql.gz 

Upewnij się, że żadna instancja ma aktualnie dostępu do serwera MySQL (Stop usługi takie jak apache2, postfix czy jak zwykle uzyskuje dostęp do serwera MySQL).Jeśli wprowadzono bardziej pewny, że jesteś sam w ciemności, łaty i wymusić uaktualnienie mysql z następującymi poleceniami:

# zcat mysql-patch-5.5.55.sql.gz | mysql -uroot -p mysql 
# mysql_upgrade --force -uroot -p 

Jeśli coś działało bez żadnego błędu, należy ponownie uruchomić usługę MySQL:

# service mysql stop 
# service mysql start 

Po tym, spróbuj utworzyć TestUser, aby zobaczyć, czy poprawka została zastosowana poprawnie:

# mysql -uroot -p 

CREATE USER „T estuser123 '@' localhost 'IDENTYFIKOWANY PRZEZ' Pass0worZ ';

Powinieneś otrzymać komunikat:

Query OK, 0 rows affected (0.00 sec)

Teraz można bezpiecznie usunąć TestUser znowu z:

DROP USER 'Testuser123' @ 'localhost';

W każdym razie, gdyby coś poszło nie tak, przywracanie kopii zapasowej i spróbuj jeszcze raz;)

nadzieję, że pomoże.

+0

Dlaczego zamiast po prostu umieścić link do łatki, którą napisałeś, nie "najpierw WYJAŚNIJ, co robi łata i jakie są różnice między wersjami MySQL, które znalazłeś? Czy Twoja łatka przesyła innym dane logowania MySQL innej osobie? – Heitor

1

Wpadłem dzisiaj na ten sam problem. Rozwiązaniem było dla mnie ręczne dodanie brakujących kolumn do tabeli użytkowników.

Uważaj - Używaj na własne ryzyko

Nowo dodane kolumn mysql.5.5.55 są:

plugin, authentication_string, Create_tablespace_priv 

Muszą być dodany w konkretnym Odra:

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; 

Potem mogłem ponownie zmodyfikować tabelę użytkowników.

4

Miał ten sam problem dzisiaj na debian (jessie) i inne ami Linux-a. Usunięcie kolumny z wygasłymi hasłami z tabeli użytkowników mysql naprawiło dla mnie problem.

mysql> alter table mysql.user drop column password_expired; 
+0

mój był is_role – h0mayun

4

W moim przypadku i zgodnie z zaleceniami komunikatu o błędzie, wpadłem:

[email protected]:/# 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. 

To rozwiązuje wszystko.

+0

Pracował dla mnie! dzięki – mahatmanich

24

Miałem ten sam problem, gdy zaktualizowałem serwer mysql z 5.5 do 5.7 w Debianie 8 (jessie). W rzadkich przypadkach może się zdarzyć, jeśli zaktualizujesz bezpośrednio omijając sekwencje wersji. (Wiele osób to robi, ale takie aktualizacje nie są oficjalnie obsługiwane). W moim przypadku to działało poprawnie, gdy wykonywane polecenia następujące:

mysql_upgrade --force -uroot -p 

Mam nadzieję, że to pomoże Ci

1

przeprowadziłem z mariadb do mysql bo nie był w stanie zmienić myriadbdata directory na centos 7 x 64.

na mysql Kiedy próbowałem dodać nowego użytkownika innego niż root. Mam

column count of mysql.user is wrong expected 45 found 48 

próbowałem

mysql_upgrade -uroot -p 

i

mysql_upgrade --force -uroot -p 

ale wciąż mam ten sam błąd. więc poszedłem do przodu i dodałem new user manually w tabeli mysql.user, kopiując wszystkie szczegóły z innych wierszy mających root nazwę użytkownika.

restart service mysqld 

i gotowe.

0

podczas migracji z mysql 5,5 do 5,7 (przy użyciu pełnej mysqldump a następnie polecenie source) miałem błąd tylko wtedy, gdy próbowałem zmienić lub dodać użytkownika

ERROR 1805 (HY000): Liczba kolumn mysql.user jest błędna. Oczekiwany 45, znalezionych 42. W tabeli jest prawdopodobnie uszkodzona

Podobnie jak kilka innych tutaj zrobiłem

sudo mysql_upgrade -u -p #sudo korzeń więc może napisać sudo dziennika

service mysql restart

Naprawiono problem z dodawaniem i edytowaniem użytkowników. Dodałbym tę niewielką różnicę jako komentarz do jednej z podobnych odpowiedzi, ale nie mam jeszcze reputacji.