Docker数据库Mysql

114 阅读2分钟

配置数据库信息 就是把数据库文件信息以sql文件导出,然后进入mysql容器里面再导入

数据卷怎么上传?不会(看了官网的文档,使用ORS上传到dockerHub上,然后再拉下来,然后替换就可以了,感觉也没有很方便……)!

至于为什么不写进启动的命令里,是因为每次启动都会调用这些命令行,所以只在第一次部署的时候注入

导出的命令是mysqldump -u root -p -P 13306 gva > D:\goland\gin-vue-admin\dump.sql

该命令是用于从一个 SQL 文件中恢复一个数据库的。但是,如果您的 SQL 文件是用 Windows PowerShell 和 mysqldump 命令创建的,可能会出现编码问题。因为 PowerShell 的默认编码是 UTF-16,而 MySQL 不支持这种编码1。这可能导致您的 SQL 文件中出现一些不可识别的字符,从而引发错误。

解决这个问题的方法之一是,使用 --result-file 选项来生成 ASCII 格式的输出文件1。例如:

mysqldump -u root -p -P 13306 gva --result-file=D:\goland\gin-vue-admin\dump.sql

-P是宿主机链接数据库的端口

然后,您可以用这个文件来恢复数据库:

下面是把sql文件导入数据库的命令

docker stop gva-server 
# 先关闭server容器(反正在数据库迁移后需要重启server容器)

docker cp dump.sql gva-mysql:/
# 复制文件dump.sql到gva-mysql容器里面

docker exec -it gva-mysql /bin/bash
# 进入gva-mysql容器

mysql -u root -p --binary-mode --force gva < ./dump.sql
# 导入sql文件

在docker-compose中设置mysql案例

  mysql:
    image: mysql:8.0.21       # 如果您是 arm64 架构:如 MacOS 的 M1,请修改镜像为 image: mysql/mysql-server:8.0.21
    container_name: gva-mysql
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #设置utf8字符集
    restart: always
    ports:
      - "13306:3306"  # host物理直接映射端口为13306
    environment:
      MYSQL_ROOT_PASSWORD: '123456' # root管理员用户密码
      MYSQL_DATABASE: 'gva' # 初始化启动时要创建的数据库的名称
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: '123456'
    volumes: 
      - ./initSQL:/docker-entrypoint-initdb.d/   # 把这个目录挂载到mysql中/docker-entrypoint-initdb.d/,该路径下容器启动时自动执行sql文件,用于初始化数据库。
      - mysql:/var/lib/mysql

    networks:
      network:
        ipv4_address: 177.7.0.13

如上图中的volumes