鍍金池/ 問(wèn)答/Java  PHP  數(shù)據(jù)庫(kù)/ php連接docker mysql 8.0出錯(cuò)authentication me

php連接docker mysql 8.0出錯(cuò)authentication method unknown

完整錯(cuò)誤:

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

docker-compose.xml

mysql:
    image: mysql:8.0
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
    ports:
      - 3306:3306
    env_file:
      - ./.env

my.cnf

innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M

PHP版本是7.1

回答
編輯回答
愛(ài)礙唉
在my.cnf設(shè)置任何用戶(hù)登錄都可以獲得全部的權(quán)限
在[mysqld]的段中加上一句:skip-grant-tables 然后重啟mysql

然后執(zhí)行修改密碼的sql:
UPDATE user SET Password = password ('new-password') WHERE User = 'root';
flush privileges;

再次重啟mysql,這下應(yīng)該就好了

2017年4月1日 19:39
編輯回答
使勁操

自己看文檔解決了,新的驗(yàn)證方式Caching SHA-2
所以在my.cnf中加一句:

default_authentication_plugin=mysql_native_password

變成原來(lái)的驗(yàn)證方式即可

2018年4月13日 10:53
編輯回答
墨小羽

這個(gè)問(wèn)題是由于新的mysql賬號(hào)密碼解鎖機(jī)制跟老的不兼容造成的。 你查一下你的用戶(hù),如果密碼是16位的就是老賬號(hào)了,要重新設(shè)一遍新的密碼。

SELECT
  Length(`Password`),
  Substring(`Password`, 1, 1)
FROM
  `mysql`.`user`
WHERE
  `user`='你的用戶(hù)名' // 根據(jù)設(shè)定,你可能要測(cè)試所有的用戶(hù)
2017年10月12日 09:04