当前位置:   article > 正文

docker安装mysql步骤及远程连接问题_docker mysql远程访问

docker mysql远程访问

1. 在docker仓库中搜索mysql的镜像:

 docker search mysql  
下载镜像: docker pull mysql

2.     查看本地镜像:

 docker images -a               参数-a 表示所有 

3.运行mysql

  1. docker run --name mysql \
  2. --restart=always \
  3. -p 3306:3306 \
  4. -v /data/mysql/log:/var/log/mysql \
  5. -v /data/mysql/data:/var/lib/mysql \
  6. -v /data/mysql/conf:/etc/mysql/conf.d \
  7. -e MYSQL_ROOT_PASSWORD=root \
  8. -d mysql

命令说明:

  • -p 3306:3306:将容器的3306端口映射到主机的3306端口,主机端口:docker端口
  • --name  容器名称
  • 1.-v /mydata/mysql/log:/var/log/mysql(日志文件挂载)
    将容器中的日志文件夹/var/log/mysql挂载到主机对应的/mydata/mysql文件夹中
    2.-v /mydata/mysql/data:/var/lib/mysql(数据文件挂载)
    将容器中的数据文件夹/var/lib/mysql挂载到主机对应的/mydata/mysql/data文件夹中
    3.-v /mydata/mysql/conf:/etc/mysql(配置文件挂载)
    将容器的配置文件夹/etc/mysql挂载到主机对应的/mydata/mysql/conf文件夹中
  • -e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
  • -d: 后台运行容器,并返回容器ID
  • --restart=always    自动启动
  • mysql:指定用这个镜像来创建运行实例

4. 查看运行中的容器:

docker ps  
(可加参数 -a 表示所有,如果不加这个参数只会展示运行状态的容器,

  按容器即服务的思想,某种程度上可以把容器也当作服务,)

这样 mysql 就已安装并成功启动,处于运行状态了。

可以通过 docker port 容器name 查看对应端口

5. 可能出现远程连接失败

通过navicat 远程连接docker里的mysql结果发现连接不了出现了一个10060 unknow error

要么是网络问题,要么就是权限问题,要么就是防火墙的问题(iptables),要么就是端口号不正确。

(1)、如果你到了下面这一步,说明你的网络是没问题的

//进入容器的命令

docker exec -it mysql bash

[root@iZbp17yjchz883bn0kud44Z service]# docker exec -it mysql bash
bash-4.4# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> 
 

(2)、权限问题,如果权限问题的话,你就尝试更改一下权限,mysql账户是否不允许远程连接。如果无法连接可以尝试以下方法:

创建账户:create user '用户名'@'访问主机' identified by '密码';
赋予权限:grant 权限列表 on 数据库 to '用户名'@'访问主机' ;(修改权限时在后面加with grant option)

#添加远程登录用户
CREATE USER 'liaozesong'@'%' IDENTIFIED WITH mysql_native_password BY 'Lzslov123!';
GRANT ALL PRIVILEGES ON *.* TO 'liaozesong'@'%';

或者

update user set host = "%" where user='root'; 

FLUSH PRIVILEGES; //需要输入次命令使修改生效

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

centos7修改防火墙:

firewall-cmd --state

如果返回的是 “not running”,那么需要先开启防火墙;

  1. 开启防火墙


systemctl start firewalld.service

 

再次查看防火墙状态,发现已开启!

开启指定端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent
显示 success 表示成功
–zone=public 表示作用域为公共的
–add-port=443/tcp 添加 tcp 协议的端口端口号为 443
–permanent 永久生效,如果没有此参数,则只能维持当前 服 务生命周期内,重新启动后失效;

重启防火墙

systemctl restart firewalld.service
系统没有任何提示表示成功!

重新加载防火墙

firewall-cmd --reload
 

centOs6主机的端口设置在/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 ~]#

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/461502
推荐阅读
相关标签
  

闽ICP备14008679号