SSF0SSF0
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
  • Bash

    • Bash 获取路径在不同类型电脑的区别
  • Git

    • Git 使用 ssh 与 https 的区别
    • Git 回滚、重置与变基
    • 文件名大小写发生变化的坑
    • Git 提交信息规范解读与实践指南
    • Git 历史邮箱统一 + 推送 GitHub 后的远程分支处理指南
  • Docker

    • Docker 命令大全
    • nginx 镜像部署静态文件
    • Docker 运行命令说明
    • 使用 node 镜像运行本地项目
    • 挂载和卷的区别
    • Docker 打包多平台镜像
    • Docker 使用 mysql
    • Docker 容器网络访问问题总结
  • VuePress

    • 使用 VuePress 搭建个人博客概括
  • CI/CD

    • blog 使用 Github-Actions 部署 docker 服务器
  • 服务器

    • 腾讯云使用 ssh 连接服务器(Linux 实例)
    • ssl 证书安装到 docker 服务器
    • 操作系统与架构
    • ssh 连接时长问题
  • 掌握 hosts 文件:本地开发、域名重定向与回调处理完全指南
  • Cloudflare DNS与代理:完全指南

使用 mysql

1. 拉取镜像

docker pull mysql:8.0

2. 创建卷

docker volume create mysql_data

3. 运行容器

docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d  -p 3306:3306 -v mysql-data:/var/lib/mysql --restart always mysql:8.0
# 或者
docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d --network my-network -p 3306:3306 -v mysql-data:/var/lib/mysql --restart always mysql:8.0

解释说明:

  • --name mysql:指定容器名称为 mysql

  • -e MYSQL_ROOT_PASSWORD=my-secret-pw:设置 root 用户的密码为 my-secret-pw

  • -d:后台运行容器

  • -p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口

  • -v mysql-data:/var/lib/mysql:将主机上的 mysql-data 卷挂载到容器的 /var/lib/mysql 目录,用于持久化存储数据

  • --restart always:设置容器在启动时自动重启

  • mysql:8.0:指定使用的镜像为 mysql:8.0

  • --network my-network:指定容器使用的网络为 my-network

    • 如果需要使用网络,需要先创建网络,例如:
    docker network create my-network
    • 这样容器就可以通过容器名称进行通信了

    例如:

    docker run --name mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d --network my-network -p 3306:3306 -v mysql-data:/var/lib/mysql --restart always mysql:8.0
    docker run --name my-app -d --network my-network my-app:latest

    在 my-app 容器里面,就可以通过 mysql(容器的名称) 来连接 mysql 数据库了 代码示例:

    import mysql.connector
    
    mydb = mysql.connector.connect(
      host="mysql", # 容器名称
      user="root",
      password="my-secret-pw"
    )
    
    mycursor = mydb.cursor()
    
    mycursor.execute("SELECT DATABASE()")
    
    myresult = mycursor.fetchone()
    
    print(myresult)

4. 碰到的问题

MySQL 服务器停止是因为收到了来自 root 用户的关闭命令。日志中有这样的记录:

2024-10-24T01:15:08.562888Z 128 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.39).

这意味着有具有 root 权限的人执行了停止 MySQL 服务器的命令。如果这不是你的本意,建议检查系统的命令历史记录或可能发出该命令的脚本。

  1. 目前看了篇文章,都不行,所以直接当数据库关闭后就自动启动,把数据存在卷里,下次启动的时候,卷里的数据还在,所以数据不会丢失。
最后更新时间:
贡献者: 何风顺
上一页
Docker 打包多平台镜像
下一页
Docker 容器网络访问问题总结