安装:php
请看连接:https://www.cnblogs.com/jingxiaoniu/p/12557663.htmlhtml
问题:mysql
php代码测试链接mysql报错,链接失败sql
$servername = "mysql"; $username = "root"; $password = "root"; // 建立链接 $conn = new mysqli($servername, $username, $password); // 检测链接 if ($conn->connect_error) { die("链接失败: " . $conn->connect_error); } echo "链接成功";
一 没有mysqli扩展支持docker
php连接mysql须要mysqli扩展的支持,docker安装mysql默认没有mysqli扩展,须要下载。安全
1 进入docker的mysql容器内部bash
docker exec -it [容器ID] bash测试
2 进入docker-php-ext-install目录spa
cd /usr/local/bindebug
3 下载mysqli扩展
./docker-php-ext-install mysqli
4 查看扩展目录
cd /usr/local/lib/php/extension/no-debug-non-zts-[时间版本]
5 查看是否成功
是否有mysqli.so文件,若是有就表示下载成功
6 修改php配置文件,添加mysqli.so扩展
extension=mysqli.so
7 重启php容器
docker restart [容器名称|ID]
二 mysql连接主机问题
php要连接docker中运行的mysql是不能用localhost或127.0.0.1来连接的,由于每一个docker运行容器的localhost 127.0.0.1都是本身容器自己,不是mysql容器,须要修改为mysql容器内部IP或者是mysql容器名称
1 获取容器内部IP地址
docker inspect [容器名称|ID] |grep IPAddress
docker inspect --format='{{.NetworkSettings.IPAddress}}' [容器名称|ID]
2 修改链接主机IP (如:)
$servername = 'mysql'
$servername = '172.27.0.5'
三 mysql8版本问题
mysql8.0使用新的安全验证方式caching_sha_password,默认是mysql_native_password
解决方法:
1 查看用户plugin方式,若是为 caching_sha_password 修改
select * from user\G;
2 设置用户不过时可跳过
ALTER USER 'root'@'%' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER;
3 修改身份验证类型
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'
4 刷新权限生效
FLUSH PRIVILEGES;
四 navicat链接mysql失败
主机名或ip地址不能使用127.0.0.1 或 localhost连接,使用本机IP
1 查看本机IP地址
ifconfig
以上就是此次的所有内容!