缓行 發表於 2025-7-25 14:21:00

docker部署MySQL8

<p>docker部署MySQL</p>
<p>1、创建数据存放目录</p>
<pre><code>mkdir -p /data/docker/mysql/{data,conf}
</code></pre>
<p>2、配置MySQL配置文件</p>
<pre><code>cat &lt;&lt;EOF&gt; /data/docker/mysql/conf/my.cnf

default-character-set=utf8mb4          # 客户端默认字符集 utf8mb4,支持表情符号


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


# ================= 基础字符集 =================
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
</code></pre>
<p>3、创建docker-compose.yml文件</p>
<pre><code>cat &lt;&lt;EOF&gt; /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
</code></pre>
<p>4、启动</p>
<pre><code># 注意以上docker镜像是我使用个人仓库的,需要提前登录,否则拉取不到
docker-compose -f /data/docker/mysql/docker-compose.yml up -d
</code></pre>
<p>5、备份和数据恢复</p>
<p>全备:</p>
<pre><code>docker exec MySQL8 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' &gt; full-backup.sql
</code></pre>
<p>全部导入:</p>
<pre><code># docker exec MySQL8 printenv MYSQL_ROOT_PASSWORD
dkfhdNUd1D12c
# docker exec -i MySQL8 mysql -uroot -p"dkfhdNUd1D12c" &lt; full-backup.sql
</code></pre><br><br>
来源:https://www.cnblogs.com/luguojie/p/19004537
頁: [1]
查看完整版本: docker部署MySQL8