PHP 7.2.8
Очередные заметки на полях, вдруг кому-то пригодится. Если вы столкнулись с ошибкой:
Fatal error: Uncaught PDOException: PDO::__construct(): Unexpected server respose while doing caching_sha2 auth: 109 in …
Кстати да, в самом тексте тоже ошибка, слово response написано без буквы n — ошибка в ошибке, так сказать.
Так вот, если вы встретились с такой ошибкой, то чинится это таким вот вариантом:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your password';
ALTER USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'your password';
Но при таком раскладе получается что вы закрываете доступ к тому же MySQL Workbench, который будет ругаться ошибкой:
Cannot Connect to Database Server
Your connection attempt failed for user ‘user’ from your host to server at 1хх.ххх.ххх.хх9:3306:
Authentication plugin ‘caching_sha2_password’ cannot be loaded: dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image not found
Я вышел из ситуации создав отдельно пользователя для скриптов и отдельно пользователя для доступа через СУБД.
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER 'user'@'1xx.xxx.xxx.xx7' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'1xx.xxx.xxx.xx7';
ALTER USER 'user'@'1xx.xxx.xxx.xx7' IDENTIFIED WITH caching_sha2_password BY 'password';
FLUSH PRIVILEGES;
Понятное дело что для безопасности не все привелегии выдаются, чисто из экономии кода. Главное понятен смысл. Для воркбенча используется mysql_native_password, для PDO используется caching_sha2_password.
Вот как-то так.
Если знаете способы лучше — напишите в комментарии, пожалуйста.