×

远程连接docker mysql报错_使用phpmyadmin远程连接docker的MySQL数据库

hqy hqy 发表于2022-11-16 11:51:15 浏览373 评论0

抢沙发发表评论

在docker里搭建mysql容器里通过phpmyadmin远程连接docker里的mysql以及遇到的一些问题


生成mysql镜像


docker pull mysql:5.7


创建目录


mkdir /home/www


mkdir -p /server/mysql


创建mysql容器


docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Zhying5354 -v "$PWD"/data:/var/lib/mysql -v "$PWD"/conf:/etc/mysql/conf.d -d mysql:5.7


说明


name 参数为mysql容器名称,可以自己定义。


-p 指定外部映射到容器的端口


-e 环境变量 MYSQL_ROOT_PASSWORD为指定root账号密码


-v 映射目录或者文件


* /data 为mysql数据目录


* /conf 为配置目录


-d 以守护进程的方式运行


docker ps -a 可以看到运行的容器。


提示:


如果使用最新的mysql版本,例如使用mysql8.0.11,php在连接数据库的时候可能可能会连接不上,是因为mysql默认密码验证插件是caching_sha2_password,解决办法是修改数据库默认验证方式,可以创建新的数据库账号,然后修改验证插件为mysql_native_password。


# 修改


ALTER USER username IDENTIFIED WITH mysql_native_password BY '123456';


# 刷新权限,生效


FLUSH PRIVILEGES;


远程连接docker的mysql


1)docker ps -a  # 查看正在运行的container


2)docker exec -it mysql bash   # 进入容器


3)登录到mysql: mysql -uroot -p


4) grant all privileges on *.*  to 'root'@'%' ;   #  给用于授予权限


GRANT ALL PRIVILEGES ON *.*  ‘root’@’%’ identified by ‘123123’ WITH GRANT OPTION;  这是网上流传较多的写法。实际上会报错的。


5)flush privileges;   # 刷新权限


此时,还不能远程访问,因为Navicat只支持旧版本的加密,需要更改mysql的加密规则


更改加密规则:


ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;


更新root用户密码:


ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';


然后就可以远程连接mysql数据库了,主机名称需要填写服务器的IP地址才可以。


提示:很多时候在liunx系统上安装了web服务应用后(如tomcat、apache等),需要让其它电脑能访问到该应用,而linux系统(centos-7、redhat等)的防火墙是默认只对外开放了22端口,可能没有对mysql的3306开放端口。另外如果是云服务器的也要去安全组里面看看有没有开放3306端口。


而CentOs宿主机的端口设置在/etc/sysconfig/iptables文件中配置。


vi编辑器的用法:esc:命令行模式/插入模式;i:插入,wq:保存推出,q:退出,q!:不保存退出


把-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 放在下面的位置,不要乱放,这就开放了mysql远程连接的端口,然后重启一下iptables的服务就ok了。[root@localhost ~]# vi /etc/sysconfig/iptables


# sample configuration for iptables service


# you can edit this manually or use system-config-firewall


# please do not ask us to add additional ports/services to this default configuration


*filter


:INPUT ACCEPT [0:0]


:FORWARD ACCEPT [0:0]


:OUTPUT ACCEPT [0:0]


-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


-A INPUT -p icmp -j ACCEPT


-A INPUT -i lo -j ACCEPT


-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT//centos-7默认的端口


-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT


-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT//tomcat端口


-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT //mysql端口


-A INPUT -j REJECT --reject-with icmp-host-prohibited


-A FORWARD -j REJECT --reject-with icmp-host-prohibited


COMMIT


~


[root@localhost ~]# service iptables restart


Redirecting to /bin/systemctl restart iptables.service


[root@localhost ~]#


使用phpmyadmin连接mysql数据库遇到的问题


1.phpmyadmin登录提示mysqli_real_connect(): (HY000/2002): No such file or directory


解决方法:


把phpmyadmin目录中的配置文件config.sample.inc.php改成config.inc.php,并把


$cfg['Servers'][$i]['host'] = 'localhost';


#改成,如果是远程登录就改成服务器的IP地址


$cfg['Servers'][$i]['host'] = '127.0.0.1';


再次刷新页面就不会出现mysqli_real_connect(): (HY000/2002): No such file or directory的错误提示了。


2.phpMyAdmin无法缓存模板文件,所以会运行缓慢。


出现这个的原因是 phpmyadmin的安装目录, tmp目录不存在,或者存在但是权限不对。这是个缓存目录,可以加快phpmyadmin的运行,即使不理睬这个警告信息,也不会影响程序的执行。


解决方法:


进入phpmyadmin的安装目录后,依次执行:


mkdir tmp


chmod 777 tmp


刷新以下页面,就会发现警告不在啦。


打赏

本文链接:https://www.kinber.cn/post/2975.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客