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.cnfsudo 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
0
二维码
打赏
海报
docker部署mysql8.0.36异常记录
1、SSH介入,创建对应文件夹 mkdir -p conf data logs backup
conf:MySQL 配置文件
data:MySQL数据文件(最重要)
logs:错误日志、慢查询日志
backup:数……
共有 0 条评论