欢迎您的光临,本博所发布之文章皆为作者亲测通过,如有错误,欢迎通过各种方式指正。

文摘  使用phpmyadmin远程连接docker的MySQL数据库

Docker 本站 657 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.cnblogs.com/paopao123/p/10749202.html 


转载请注明: ITTXX.CN--分享互联网 » 使用phpmyadmin远程连接docker的MySQL数据库

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

赞 (8) or 分享 ()
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽