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

本文详细介绍了如何在Docker中搭建MySQL容器,包括创建镜像、设置数据和配置目录。在遇到phpmyadmin远程连接报错时,提供了修改用户验证方式、授权及配置iptables的解决方案,确保可以成功远程访问Docker中的MySQL数据库。
摘要由CSDN通过智能技术生成

在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

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

参考网址:

最后更新:2020-04-28 12:08:53

赞 (9)

or

分享 (3)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值