docker部署MySQL8

docker部署MySQL

1、创建数据存放目录

mkdir -p /data/docker/mysql/{data,conf}

2、配置MySQL配置文件

cat <<EOF> /data/docker/mysql/conf/my.cnf 
[client]
default-character-set=utf8mb4          # 客户端默认字符集 utf8mb4,支持表情符号

[mysql]
default-character-set=utf8mb4          # mysql 命令行默认 utf8mb4

[mysqld]
# ================= 基础字符集 =================
character-set-server=utf8mb4           # 服务端默认字符集 utf8mb4
collation-server=utf8mb4_unicode_ci    # 排序规则(常用 utf8mb4_unicode_ci)
skip-character-set-client-handshake    # 忽略客户端字符集请求,强制用服务端字符集

# ================= 基础优化 =================
skip-name-resolve                      # 禁止主机名解析,连接更快(授权必须用IP)
max_connections=300                     # 最大连接数,根据业务需要调整
max_allowed_packet=64M                 # 允许的最大包大小,适合较大 SQL
max_connect_errors=100000              # 防止连接错误导致被拒绝

# ================= InnoDB 引擎优化 =================
default-storage-engine=InnoDB          # 默认存储引擎
innodb_buffer_pool_size=1G             # 内存 4G 可设置 1G~2G,占总内存 50~70%
innodb_log_file_size=512M              # 日志文件大小,适合较大事务
innodb_flush_log_at_trx_commit=1       # 每次提交写入日志,最安全
innodb_file_per_table=1                # 每表单独表空间,方便管理
innodb_flush_method=O_DIRECT           # 避免双缓存,性能更好

# ================= 日志 =================
log-bin=mysql-bin                      # 开启二进制日志(单节点建议保留,方便恢复)
binlog_format=ROW                      # 推荐 ROW 格式,数据一致性更好
server-id=1                            # server-id 必须设置,即使单节点
expire_logs_days=7                     # 二进制日志保留天数,按需求调整

# ================= 慢查询日志 =================
slow_query_log = ON                              # 开启慢查询日志
long_query_time = 2.0                            # 超过 2 秒的查询记入慢日志
log_queries_not_using_indexes = ON               # 记录未用索引的查询

# ================= MyISAM(如果不用可调小) =================
key_buffer_size=16M                    # MyISAM 索引缓冲,少用时不必太大

# ================= 安全设置 =================
lower_case_table_names=1               # 表名不区分大小写(Windows 默认 1,Linux 可选)
default-authentication-plugin=mysql_native_password   # 加密插件,设置兼容旧版
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION   # 推荐模式,防止隐式错误
EOF

3、创建docker-compose.yml文件

cat <<EOF> /data/docker/mysql/docker-compose.yml
version: '3.8'
services:
  mysql:
    image: registry.cn-hangzhou.aliyuncs.com/guojie-apps/mysql:8.0.42
    restart: always
    container_name: MySQL8
    security_opt:
      - seccomp:unconfined
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: dkfhdNUd1D12c
    network_mode: "host"
    volumes:
      - /data/docker/mysql/data:/var/lib/mysql
      - /data/docker/mysql/conf:/etc/mysql/conf.d
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1"]
      interval: 30s
      timeout: 10s
      retries: 5
EOF

4、启动

# 注意以上docker镜像是我使用个人仓库的,需要提前登录,否则拉取不到
docker-compose -f /data/docker/mysql/docker-compose.yml up -d

5、备份和数据恢复

全备:

docker exec MySQL8 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > full-backup.sql

全部导入:

[root@localhost mysql]# docker exec MySQL8 printenv MYSQL_ROOT_PASSWORD
dkfhdNUd1D12c
[root@localhost mysql]# docker exec -i MySQL8 mysql -uroot -p"dkfhdNUd1D12c" < full-backup.sql

来源链接:https://www.cnblogs.com/luguojie/p/19004537

© 版权声明
THE END
支持一下吧
点赞6 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容