在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)