docker docker-compose 安装 mysql:5.7.31

本文介绍了如何在企业环境中利用Docker和docker-compose轻松安装和配置MySQL5.7作为测试服务器。选择MySQL5.7是因为其稳定性,并且相比更高版本如MySQL8,安装过程更简单。文章详细阐述了设置docker-compose文件,创建初始化脚本,以及启动服务的过程。

一、背景

在企业中相信大家会遇到很多不同的测试服务器,在运维人员中有大量的部署工作要做,需要连接mysql数据库进行测试,做压力测试的,这里选择docker安装mysql5.7,简单便捷。

至于为什么选择mysql5.7,是因为mysql5.7版本稳定,其次安装相较于其他高版本(mysql8)实在是简单太多了,少了很多grant等初始化操作,比如access denied for user root......password no。看到这些连接错误提示信息实在头疼。

前提

二、安装 docker,docker-compose

国内镜像源

Docker中国区官方镜像
https://registry.docker-cn.com

网易
http://hub-mirror.c.163.com

ustc
https://docker.mirrors.ustc.edu.cn

通过daemon.json文件来修改

(1)在/etc/docker目录中添加daemon.json文件,内容如下:
        {
              "registry-mirrors": ["http://hub-mirror.c.163.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"]
        }
(2)重启docker服务:
     systemctl restart docker
(3)执行:docker info,查看是否配置成功:

三、创建docker-compose 编排文件

# vim docker-compose.yml

version: '3.8'
services:
  mysql:
    container_name: mysql57
    image: mysql:5.7.31
    restart: always
    ports:
      - 3307:3306
    privileged: true
    volumes:
      - $PWD/mysql57/log:/var/log/mysql 
      - $PWD/mysql57/conf/my.cnf:/etc/mysql/my.cnf
      - $PWD/mysql57/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "123456"
      MYSQL_USER: 'haima'
      MYSQL_PASS: '123456'
    command: [
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_general_ci',
        '--max_connections=3000'
    ]
    networks:
      - myweb

networks:

  myweb:
    driver: bridge

三.创建初始化脚本 init-mysql.sh

#!/bin/bash
mkdir -p $PWD/mysql57/{conf,data,log}  #创建本地文件夹


#新建配置文件
tee $PWD/mysql57/conf/my.cnf<<-'EOF'
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
lower_case_table_names=1 #实现mysql不区分大小(开发需求,建议开启)
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
default-time_zone = '+8:00'

# 更改字符集 如果想Mysql在后续的操作中文不出现乱码,则需要修改配置文件内容
symbolic-links=0
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

EOF

四、编排文件以及安装脚本目录结构

[root@centos7 mysql]# chmod +x init-mysql.sh docker-compose.yml  #加执行权限
[root@centos7 mysql]# ./init-mysql.sh

[root@centos7 mysql]# tree ./  #查看目结构
./
├── docker-compose.yml
├── init-mysql.sh
└── mysql57
    ├── conf
    │   └── my.cnf
    ├── data
    └── log

五、启动服务

docker-compose up -d
此时服务已经启动成功了.使用角本是不是很爽,嘿嘿...

登陆mysql

[root@centos7 mysql57]# docker exec -it mysql57 mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql>

mysql 配置My.cnf

[client]
#password    = your_password
port        = 3306
socket        = /tmp/mysql.sock

[mysqld]
port        = 3306
socket        = /tmp/mysql.sock
datadir = /data/
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 128M
max_allowed_packet = 100G
table_open_cache = 512
sort_buffer_size = 2M
net_buffer_length = 4K
read_buffer_size = 2M
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 32M
thread_cache_size = 64
query_cache_size = 64M
tmp_table_size = 64M
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp = true
#skip-name-resolve
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=/data/mysql-slow.log
long_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""


innodb_data_home_dir = /data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/
innodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 4
innodb_write_io_threads = 4

[mysqldump]
quick
max_allowed_packet = 500M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 2M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

常用命令

docker ps -a #查看启动的服务
docker-compose up -d #后台启动服务
docker-compose -h #帮助命令
docker-compose down #停止并删除服务
docker-compose restart #重启服务
docker-compose stop #停止服务
docker-compose start #停止服务
docker-compose logs #停止日志
<think> 我们正在解决验证 docker-compose.yml 文件时出现的错误:'services.mysql Additional property healhcheck is not allowed' 根据错误信息,问题在于在mysql服务的配置中,有一个不被允许的属性'healhcheck'(注意:这里可能是拼写错误,正确应为'healthcheck') 但是,docker-compose 的 services 配置中确实支持 'healthcheck' 属性(注意拼写正确)。因此,我们需要检查: 1. 属性名是否拼写错误(当前错误信息中的属性是'healhcheck',少了一个字母't',所以应该是拼写错误) 2. 检查使用的docker-compose版本是否支持healthcheck(healthcheck是在docker-compose文件版本2.1及更高版本中引入的) 根据引用[2]中的内容,用户正在使用docker desktop,并且配置docker-compose.yml文件。我们假设用户使用的是较新的docker版本。 具体步骤: 1. 检查docker-compose.yml文件中mysql服务的配置,找到'healhcheck'(拼写错误的)属性,将其改为'healthcheck'(正确的拼写)。 2. 确认docker-compose文件顶部的版本声明(version)是否支持healthcheck。建议至少使用版本2.1。 例如,一个正确的healthcheck配置如下: healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 3 注意:在docker-compose版本3中,healthcheck的写法与版本2相同。 因此,解决方案是: 将 'healhcheck' 改为 'healthcheck' 另外,如果用户的docker-compose文件版本过低(比如低于2.1),则需要升级文件版本。但考虑到当前使用xxl-job 2.4.0,通常使用较新的版本,所以拼写错误的可能性更大。 操作步骤: 1. 打开文件:/root/nw-local/middle/xxl-job-2.4.0/docker-compose.yml 2. 找到mysql服务的配置部分,将'healhcheck'修正为'healthcheck' 3. 保存文件,然后重新运行验证(或启动)命令。 如果用户使用的是docker-compose命令进行验证,可以运行: docker-compose -f /root/nw-local/middle/xxl-job-2.4.0/docker-compose.yml config 该命令会检查配置文件语法,并输出解析后的配置,如果没有错误则配置正确。 注意:如果用户还在其他服务中使用了healthcheck,也要检查拼写。 另外,如果用户确实在文件中写的是'healthcheck'(拼写正确)但仍然报错,那么可能是文件版本不支持。此时需要检查文件顶部的version版本号,建议至少设置为'2.1'或更高(如'3'、'3.8'等)。 例如,在文件顶部应该有这样的声明: version: '3.8' 根据引用[3]中的内容,用户可能还涉及到多容器管理,所以使用较新的版本(如3.8)是合适的。 总结:先修正拼写错误,如果问题依旧,则升级docker-compose文件版本。 注意:如果用户使用的是旧版本的docker-compose(比如1.x),则可能不支持version为3的文件,需要升级docker-compose工具。不过,如果用户按照引用[2]安装Docker Desktop,通常会附带较新的docker-compose版本。 因此,我们首先建议修正拼写错误,然后检查文件版本。 </think> ### 解决 "Additional property healhcheck is not allowed" 错误 这个错误通常是由 **拼写错误** 和 **版本兼容性问题** 导致的。以下是具体解决方案: #### 1. 修正拼写错误(最常见原因) 错误信息中的 `healhcheck` 是 `healthcheck` 的拼写错误: ```yaml services: mysql: # ❌ 错误拼写 healhcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] # ✅ 正确拼写 healthcheck: test: ["CMD-SHELL", "mysqladmin ping -h localhost"] ``` #### 2. 检查 Docker Compose 版本兼容性 在 `docker-compose.yml` 文件顶部添加版本声明(至少需要 v2.1): ```yaml version: '3.8' # ✅ 推荐版本(支持 healthcheck) services: mysql: image: mysql:5.7 healthcheck: ... # 此时语法合法 ``` #### 3. 验证配置 修复后执行以下命令验证: ```bash docker-compose -f /root/nw-local/middle/xxl-job-2.4.0/docker-compose.yml config ``` 如果配置正确,将输出解析后的 YAML 内容。 --- ### 原因分析 1. **拼写问题** Docker Compose 对字段名严格校验,`healhcheck` → `healthcheck` 是典型拼写错误。 2. **版本限制** `healthcheck` 字段需要: - Docker Compose 文件格式 ≥ v2.1 - Docker Engine ≥ 1.12.0 若不声明版本,默认使用旧版语法规则[^1]。 3. **缩进错误** YAML 对缩进敏感,确保 `healthcheck` 是 `services.mysql` 的直接子项: ```yaml services: mysql: image: mysql:5.7 # ✅ 正确缩进 healthcheck: test: ["CMD", "mysqladmin", "ping"] ``` --- ### 完整配置示例 ```yaml version: '3.8' # 声明兼容版本 services: mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root ports: - "3306:3306" healthcheck: # ✅ 正确字段名 test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 3 xxl-job: image: xuxueli/xxl-job-admin:2.4.0 depends_on: mysql: condition: service_healthy # 依赖健康检查 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huainian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值