Docker compose配置MySQL并实现远程连接

您需要确保您的运行环境达到了以下的要求:

  • Docker Engine
  • Docker CLI
  • Docker Compose

docker-compose.yml

version: '3.7'
services:
  mysql:
    image: "mysql/mysql-server:8.0"
    environment:
      TZ: "Asia/Shanghai"
      MYSQL_ROOT_PASSWORD: "root密码" # 设置root密码
      MYSQL_DATABASE: "数据库名" # 设置数据库
      MYSQL_USER: "用户名" # 增加一个MySQL用户,并启用远程连接
      MYSQL_PASSWORD: "用户密码" # 设置用户密码
    ports:
      - "自定义映射端口:3306" # 映射,如果需要远程连接Docker中的数据库,这一步很重要
    volumes: # 挂载,重新创建镜像时,数据库数据不会消失
      - mysql-data:/var/lib/mysql
      - ./.github/init.sql:/docker-entrypoint-initdb.d/init.sql
    restart: "always"
    container_name: "mysql"

远程连接效果如下:
Docker compose配置MySQL并实现远程连接_第1张图片
docker内的项目连接数据库时的配置
注意:每一个参数的名字是根据.env文件确定的。enviroment定义在容器中设置的环境变量。

environment:
      APP_ENV: "${APP_ENV:-prod}"
      DB_HOST: "mysql"
      DB_PORT: "3306" # 因为在同一个环境,所以直接用3306端口就行
      DB_USERNAME: "用户名"
      DB_PASSWORD: "密码"
      DB_DATABASE: "database


如果参数名字有误,可能会报密码错误或者拒绝连接的错误,注意检查参数。docker exec

// 进入docker的 mysql
docker exec -it mysql mysql -uroot -p // 
// 设置远程
use mysql;
// 查看当前用户
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| healthchecker    | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
7 rows in set (0.00 sec)
update user set host='%' where user='root'; // 开启远程连接。但是一般建议建个新用户再设置
ALTER USER 'root'@'%' IDENTIFIED BY '密码'; // 如果密码错误时,可以修改密码
// 刷新数据库
flush privileges;
// centos开放3306端口,如果开启了映射,记得开启映射的端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=映射端口/tcp --permanent // 开启映射的端口
// 重启centos的防火墙
systemctl restart firewalld.service

// 远程连接测试时数据库后面加:?allowPublicKeyRetrieval=true(用DBeaver时需要加)
否则会报错:
Public Key Retrieval is not allowed

你可能感兴趣的:(linux,docker,mysql,运维)