docker部署mysql8.0.36异常记录

1、SSH介入,创建对应文件夹 mkdir -p conf data logs backup

  • conf:MySQL 配置文件
  • data:MySQL数据文件(最重要)
  • logs:错误日志、慢查询日志
  • backup:数据库备份文件
  • # MySQL 容器内部使用 mysql 用户运行,其 UID 固定为 999。 
    # 如果宿主机挂载目录属主不匹配,容器将无法写入数据。
    # 修改目录所有者
    sudo chown -R 999:999 ./data ./logs ./conf ./backup
    # 设置目录权限(禁止其他用户读取数据库文件)
    sudo chmod -R 755 ./data ./logs ./conf ./backup
    # 删除 data 目录下的所有文件(小心操作,确保里面没重要数据)
    sudo rm -rf ./data/*

2、编写 MySQL 配置文件在宿主机的 conf 目录下,创建一个名为 my.cnf 的配置文件:

  • sudo touch my.cnf
  • sudo vim my.cnf
  • ###### [client] 配置模块 ######
    [client]
    default-character-set = utf8mb4
    
    ###### [mysql] 配置模块 ######
    [mysql]
    default-character-set = utf8mb4
    
    ###### [mysqld] 配置模块 ######
    [mysqld]
    # === 基础路径(与Docker挂载一致)===
    datadir = /var/lib/mysql
    
    # === 字符集(支持中文、Emoji)===
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    
    # === 时区(东八区)===
    default-time-zone = '+08:00'
    log_timestamps = SYSTEM
    
    # === SQL模式(兼容分组查询,禁用ONLY_FULL_GROUP_BY)===
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    
    # 允许所有IP访问(远程连接需开启)
    bind-address = 0.0.0.0
    
    host_cache_size = 0
    
    # === 存储与表名 ===
    default-storage-engine = INNODB
    lower_case_table_names = 1
    
    # === 连接与性能 ===
    max_connections = 500
    max_allowed_packet = 16M
    innodb_buffer_pool_size = 256M        # 根据宿主机内存调整(建议:RAM 的 50%~70%)
    
    # === 日志配置(关键!匹配 /data/mysql/logs 挂载)===
    log-error = /var/log/mysql/error.log
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/slow.log
    long_query_time = 2
    
    # === 可选高级功能(按需取消注释)===
    # event_scheduler = ON
    # log_bin_trust_function_creators = 1
    
    # === Binlog(主从/数据恢复用,单机可关闭)===
    # log_bin = /var/lib/mysql/mysql-bin
    # binlog_format = ROW
    # server-id = 1
    # binlog_expire_logs_seconds = 604800  # 7天自动清理
  • lower_case_table_names= 1
    • 该参数在数据库初始化后不可修改,并会影响表名的大小写规则。
    • 适合开发测试环境
    • 不建议直接用于 Linux 生产环境
  • bind-address = 0.0.0.0
    • 允许任意 IP 访问数据库
    • 务必通过防火墙或安全组限制来源 IP
  • innodb_buffer_pool_size = 256M
    • 该参数用于设置InnoDB缓冲池的大小,建议设置为宿主机内存的50%~70%。
    • 例如,如果宿主机内存为1GB,可以设置为512M;
    • 如果宿主机内存为4GB,可以设置为2GB。
  • slow_query_log = 1
    • 开启慢查询日志后,MySQL会记录执行时间超过long_query_time参数设置值的SQL语句,默认值为2秒。

docker-compose如下

services:
  mysql_8_0_36:
    image: mysql:8.0.36
    container_name: mysql_8_0_36
    volumes:
      - ./logs:/var/log/mysql
      - ./data:/var/lib/mysql
      - ./conf:/etc/mysql/conf.d
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: 'rootmima' # 设置root用户密码
      TZ: Asia/Shanghai
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    restart: always
    networks:
      - my_network
    privileged: true
networks:
  my_network:
    external: true 

创建数据库&用户

-- 新建MySQL数据库:mtab

CREATE DATABASE mtab CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# -- 新建MySQL用户xiaoyu,并设置密码为76HchillHrD3KwA
# CREATE USER 'xiaoyu'@'%' IDENTIFIED BY '76HchillHrD3KwA';

-- 授权xiaoyu用户访问chuan_sys数据库
GRANT ALL PRIVILEGES ON mtab.* TO 'xiaoyu'@'%';

-- 授权结束后刷新特权
FLUSH PRIVILEGES;

使用dbeaver 连接提示:Public Key Retrieval is not allowed

  • 解决公钥检索报错:点击该页面的编辑驱动设置,在弹出的窗口切换到连接属性选项卡,找到allowPublicKeyRetrieval 参数,将其值设置为true ,点击确定返回;
  • 若没有该参数,可点击添加,手动输入参数名和值。

同理Navicat 在高级设置中找到其他参数输入框,填入allowPublicKeyRetrieval=true ,若需同时关闭 SSL(本地测试常用),可补充为allowPublicKeyRetrieval=true&useSSL=false 。


2026.01.08

采用dbeaver执行如下:

UPDATE uf_gcy_shb_bffy bffy JOIN uf_gcy_shbfdd bfdd ON  bffy.form_data_id = bfdd.id SET bffy.fyzfzt = 0 WHERE  bfdd.ptddh = 'DLZ27122' AND bffy.je = 289;
UPDATE uf_gcy_shb_bffy bffy JOIN uf_gcy_shbfdd bfdd ON  bffy.form_data_id = bfdd.id SET bffy.fyzfzt = 0 WHERE  bfdd.ptddh = 'DLZ27133' AND bffy.je = 344;

dbeaver报错如下:

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE uf_gcy_shb_bffy bffy JOIN uf_gcy_shbfdd bfdd ON  bffy.form_data_id = bfdd' at line 2

Error position: line: 1

原因是dbeaver默认没有开启允许多语句执行

  • 打开 DBeaver,选中你的 MySQL 连接,右键 → 「编辑连接」;
  • 在弹出的窗口中,切换到「驱动属性」标签页;
  • 找到 allowMultiQueries 属性,将其值从 false 改为 true;
  • 点击「确定」保存,重启连接(断开再重新连接数据库);

常用运维命令

# ========================================
# 常用 MySQL Docker Compose 命令(在 /data/mysql 目录下执行)
# ========================================

# 先切换到 MySQL 项目目录
cd /data/mysql

# 停止 MySQL 容器
docker compose stop

# 重启 MySQL 容器
docker compose restart

# 查看 MySQL 容器日志(实时输出)
docker compose logs -f

# 启动 MySQL 容器(后台)
docker compose up -d

# 删除容器(保留宿主机挂载的数据)
docker compose down

# 备份数据库
docker compose exec mysql mysqldump -uroot -p mydb > /data/mysql/backup/mydb_$(date +%Y%m%d).sql

# 恢复数据库
docker compose exec mysql mysql -uroot -p mydb < /data/mysql/backup/mydb_20260128.sql

# 进入 MySQL 容器
docker compose exec mysql bash

# 登录 MySQL 控制台
docker compose exec mysql mysql -uroot -p

 

 

THE END
分享
二维码
打赏
海报
docker部署mysql8.0.36异常记录
1、SSH介入,创建对应文件夹 mkdir -p conf data logs backup conf:MySQL 配置文件 data:MySQL数据文件(最重要) logs:错误日志、慢查询日志 backup:数……
<<上一篇
下一篇>>