Словил офигенный случай при работе с MySQL.
# mysql -u 'kikimor' -p Enter password: ERROR 1045 (28000): Access denied for user 'kikimor'@'localhost' (using password: YES)
Каждый нормальный человек скажет — неправильно вводишь логин/пароль, либо для данного пользователя не разрешен hostname, с которого идет подключение. Но нет, в моем случая я успешно подключался с этими же логином и паролем с другого компьютера (с удаленного). Кроме того, с локалхоста коннект не проходил ни под одним логином/паролем, которые есть в базе. И тут я решил попробовать коннектнуться без пароля. Результат меня очень удивил — я подключился. Дальнейшие тестирования показали, что я могу указать произвольный логин (даже которого не существует) и подключение пройдет успешно.
Как оказалось, такое происходит, если в таблице mysql.user существует строка, в которой поле User = » (пустая строка). После удаления такой строки — все пришло в норму.
Сначала я подумал, что меня похакали, но потом посмотрел /var/log/mysql/mysqld.err:
131129 4:12:44 InnoDB: Database was not shut down normally! InnoDB: Starting crash recovery. InnoDB: Reading tablespace information from the .ibd files... InnoDB: Restoring possible half-written data pages from the doublewrite InnoDB: buffer... InnoDB: Last MySQL binlog file position 0 947859907, file name ./mysqld-bin.000008 131129 4:12:49 InnoDB: Started; log sequence number 0 3344617434 131129 4:12:49 [Note] Recovering after a crash using mysqld-bin 131129 4:13:21 [Note] Starting crash recovery... 131129 4:13:21 [Note] Crash recovery finished. 131129 4:13:21 [Note] Event Scheduler: Loaded 3 events ...
Оказалось, что сервак ребутнулся и база немного убилась. При старте MySQL попытался восстановить таблицы, но сделал это не очень удачно.
0 Комментарии。