【MySQL】-(02)MySQL数据库及安装(Windows/Mac/Centos7/docker)

MySQL数据库

1. MySQL数据库的介绍

MySQL是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件,它是由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品,MySQL 是最流行的关系型数据库管理系统中的一个。

MySQL的特点:

  1. MySQL是开源的,所以你不需要支付额外的费用(MySQL5以上版本已经开始收费)。
  2. MySQL支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  3. MySQL使用标准的SQL数据语言形式。
  4. MySQL可以安装在不同的操作系统,并且提供多种编程语言的操作接口。这些编程语言包括C、C++、Python、Java、Ruby等等。
  5. 支持多种存储引擎。

2. MySQL数据库的版本与安装(windows)

2.1 下载

MySQL是开源免费的,可以直接去官网下载最新版MySQL,下载地址如下:

下载地址:https://dev.mysql.com/downloads/mysql/

本课程建议使用功能Mysql Community Server 8.0以上版本完成,下面以Mysql Community Server 8.0.24版本进行演示。

拉到下面,选择 Windows 系统。

在这里插入图片描述

这里提供安装版和解压版,安装版是 32 位的(当然 64 位系统下也能安装),解压版是 64 位的,建议选择安装版进行安装,点击Go to Download Page进行安装。

在这里插入图片描述

点击 Download 后会跳转到如下页面,这是叫你注册/登录的,不理它,点击左下角的 No thanks, just start my download. 开始下载。

在这里插入图片描述

在这里插入图片描述

等待下载完成即可进入安装环节。

2.2 安装

下载完成后打开安装包,稍等片刻后,选择开发者默认的安装方式,点击下一步即可。

在这里插入图片描述

在这里插入图片描述

此后按照流程安装即可,遇到Next(下一步),和Execute(执行)直接点击即可,点击Execute后需要等待几分钟。

在这里插入图片描述

当所有的状态都变成Complete之后,点击 Next:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

直至出现如下内容后输入数据库密码,点击Next,此处输入密码务必记住,用于之后登陆数据库,建议将密码设置为123456

在这里插入图片描述

继续点击Next:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

出现finish后点击,完成安装。

在这里插入图片描述

2.3 添加环境变量

首先找到mysql的安装目录,并且定位到mysql文件,将地址栏内容进行复制。

默认的安装路径: C:\Program Files\MySQL\MySQL Server 8.0\bin

<think>我们遇到了一个Docker启动MySQL容器的错误,错误信息指出:1.无法读取目录'/etc/mysql/conf.d/'(不存在)2.在/etc/my.cnf的第36行处理'includedir'指令时出错3.最终导致fatalerror并中止问题分析:根据错误信息,MySQL配置文件(/etc/my.cnf)中第36行有一个`includedir`指令,指向了`/etc/mysql/conf.d/`目录,但该目录在容器内不存在。原因:在挂载宿主机的`/use01/docker/mysql8.0.24-docker1/config`到容器的`/etc/mysql`时,容器内的`/etc/mysql`目录被覆盖。而默认的MySQL镜像中,`/etc/mysql/my.cnf`文件包含一个`includedir`指令,指向`/etc/mysql/conf.d/`目录。如果宿主机挂载的`config`目录中没有`conf.d`子目录,就会导致该错误。解决方案:1.在宿主机的挂载目录中创建`conf.d`目录:```bashmkdir-p/use01/docker/mysql8.0.24-docker1/config/conf.d```2.或者,修改挂载点,确保不覆盖整个`/etc/mysql`目录,而是只挂载自定义配置文件。另一种方法(推荐):我们可以只挂载自定义配置文件,而不是整个目录。例如:-将宿主机的配置文件放在`/use01/docker/mysql8.0.24-docker1/config/my.cnf`,然后挂载到容器的`/etc/mysql/conf.d/custom.cnf`(因为MySQL会自动加载conf.d目录下的所有配置文件)。但是,为了避免与默认配置冲突,我们可以采用以下步骤:步骤1:在宿主机上创建必要的目录结构```bashmkdir-p/use01/docker/mysql8.0.24-docker1/config/conf.dtouch/use01/docker/mysql8.0.24-docker1/config/conf.d/custom.cnf#创建空配置文件,或者根据需要配置```步骤2:确保挂载时,容器内的`/etc/mysql`目录包含`conf.d`子目录。或者,我们可以使用自定义的配置文件完全替换默认配置,但这样需要提供完整的`my.cnf`文件。我们可以从镜像中复制默认的配置文件作为基础:步骤1:启动一个临时容器获取默认配置文件:```bashdockerrun--rmmysql:8.0.35cat/etc/mysql/my.cnf>/use01/docker/mysql8.0.24-docker1/config/my.cnf```步骤2:然后编辑这个文件,确保其中`includedir`指向的目录存在(即我们在宿主机上创建的`conf.d`目录)。步骤3:启动容器时挂载整个配置目录(包括my.cnf和conf.d)到容器的/etc/mysql。但注意:默认的`my.cnf`中可能包含如下行:```!includedir/etc/mysql/conf.d/```这要求容器内的`/etc/mysql/conf.d`目录必须存在。所以我们必须在宿主机上创建对应的目录。因此,最直接的解决方案是:在宿主机的挂载目录下创建`conf.d`目录。重新启动容器命令不变,但确保目录结构如下:宿主机:/use01/docker/mysql8.0.24-docker1/config/|--my.cnf(如果有的话)`--conf.d/(目录,里面可以放自定义配置文件)如果没有自定义配置,也可以只创建一个空的`conf.d`目录。示例命令:```bash#创建conf.d目录mkdir-p/use01/docker/mysql8.0.24-docker1/config/conf.d#启动容器dockerrun-p3307:3306--namemysql-master\-v/use01/docker/mysql8.0.24-docker1/logs:/var/log/mysql\-v/use01/docker/mysql8.0.24-docker1/config:/etc/mysql\-v/use01/docker/mysql8.0.24-docker1/data:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD=123456\mysql:8.0.35```这样,容器内的`/etc/mysql`目录将包含`conf.d`子目录,从而满足`includedir`指令的要求。另外,如果不想挂载整个`/etc/mysql`目录,也可以只挂载`conf.d`目录和自定义配置文件。但注意,默认的`my.cnf`在镜像中,它包含`includedir`指令指向`/etc/mysql/conf.d`,所以只要确保该目录存在即可。因此,我们也可以这样挂载:```bash-v/use01/docker/mysql8.0.24-docker1/config/conf.d:/etc/mysql/conf.d```这样就不会覆盖整个`/etc/mysql`目录,而只挂载`conf.d`目录。但是这样就不能修改主配置文件(`/etc/mysql/my.cnf`)了。根据需求选择。如果问题仍然存在,我们可以进入容器内部检查配置文件:```bashdockerexec-itmysql-masterbashcat/etc/mysql/my.cnfls/etc/mysql/conf.d#确认该目录存在```这样应该可以解决问题。下面提供一个完整的示例步骤:1.在宿主机上创建目录和文件:```bash#创建日志、配置、数据目录mkdir-p/use01/docker/mysql8.0.24-docker1/{logs,config,data}#在配置目录下创建conf.d目录mkdir-p/use01/docker/mysql8.0.24-docker1/config/conf.d```2.如果需要自定义配置,可以在`conf.d`目录下创建`.cnf`文件,例如:```bashtouch/use01/docker/mysql8.0.24-docker1/config/conf.d/custom.cnf```3.启动容器。如果还是报错,可以尝试获取默认的my.cnf文件,并确保其中`includedir`指向的目录就是我们挂载的`conf.d`目录。注意:在容器中,默认的`my.cnf`位于`/etc/mysql/my.cnf`,其中包含:!includedir/etc/mysql/conf.d/我们挂载宿主机目录到`/etc/mysql`,所以容器内的`/etc/mysql`就是我们宿主机的`config`目录,因此我们需要在宿主机上创建`conf.d`目录。因此,按照上述步骤操作,问题应该解决。如果问题依旧,请检查挂载的目录权限,确保MySQL容器有权限读取。检查目录权限:```bashls-ld/use01/docker/mysql8.0.24-docker1/configls-ld/use01/docker/mysql8.0.24-docker1/config/conf.d```如果权限不足,可以尝试:```bashchmod-R755/use01/docker/mysql8.0.24-docker1/config```另外,注意SELinux或AppArmor可能会限制访问,可以尝试在运行容器时加上`--privileged`或使用`--security-opt`调整安全配置(生产环境慎用)。不过,在测试环境中,我们可以临时禁用SELinux或使用`:Z`或`:z`标签重新标记卷(针对SELinux):-v/use01/docker/mysql8.0.24-docker1/config:/etc/mysql:Z但注意:使用`:Z`会修改宿主机目录的安全上下文,请确保了解其影响。因此,最终的启动命令可能变为:```bashdockerrun-p3307:3306--namemysql-master\-v/use01/docker/mysql8.0.24-docker1/logs:/var/log/mysql\-v/use01/docker/mysql8.0.24-docker1/config:/etc/mysql:Z\-v/use01/docker/mysql8.0.24-docker1/data:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD=123456\mysql:8.0.35```不过,先尝试创建`conf.d`目录,如果不行再考虑权限问题。希望这些步骤能解决您的问题。如果问题仍然存在,请提供更多信息,例如宿主机目录结构、权限设置等。###§§相关问题§§:1.在Docker中运行MySQL时,如何持久化数据库数据?2.如何自定义MySQL的配置文件而不覆盖整个配置目录?3.如何查看Docker容器内部的文件结构以调试挂载问题?4.在Kubernetes中如何为MySQL容器提供配置文件?</think>### 解决 Docker 启动 MySQL 容器的配置错误 您遇到的错误是由于 MySQL 容器内部配置目录结构不完整导致的。以下是详细解决方案: #### 问题分析 错误信息表明: 1. MySQL 容器默认配置文件 `/etc/my.cnf` 包含 `includedir /etc/mysql/conf.d/` 指令 2. 挂载操作覆盖了容器内的 `/etc/mysql` 目录 3. 宿主机目录 `/use01/docker/mysql8.0.24-docker1/config` 缺少必要的 `conf.d` 子目录 #### 完整解决方案 ##### 1. 创建缺失的目录结构 ```bash # 在宿主机创建必要的目录 mkdir -p /use01/docker/mysql8.0.24-docker1/config/conf.d mkdir -p /use01/docker/mysql8.0.24-docker1/config/conf.d.docker # 创建临时配置文件(可选) touch /use01/docker/mysql8.0.24-docker1/config/conf.d/custom.cnf ``` ##### 2. 修改 Docker 启动命令 ```bash docker run -p 3307:3306 --name mysql-master \ -v /use01/docker/mysql8.0.24-docker1/logs:/var/log/mysql \ -v /use01/docker/mysql8.0.24-docker1/config:/etc/mysql \ -v /use01/docker/mysql8.0.24-docker1/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0.35 \ --config-dir=/etc/mysql/conf.d.docker # 关键参数 ``` ##### 3. 替代方案:自定义配置文件 ```bash # 创建自定义配置文件 echo "[mysqld] server-id=2" > /use01/docker/mysql8.0.24-docker1/config/custom.cnf # 启动容器时指定配置文件 docker run -p 3307:3306 --name mysql-master \ -v /use01/docker/mysql8.0.24-docker1/config/custom.cnf:/etc/mysql/conf.d/custom.cnf \ -v /use01/docker/mysql8.0.24-docker1/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:8.0.35 ``` #### 配置验证脚本 ```bash #!/bin/bash # 检查容器内部配置 docker exec mysql-master ls -l /etc/mysql # 检查 server-id 是否生效 docker exec mysql-master mysql -uroot -p123456 -e "SHOW GLOBAL VARIABLES LIKE 'server_id';" ``` #### 目录结构说明 成功部署后应具有如下结构: ``` /use01/docker/mysql8.0.24-docker1/ ├── config/ │ ├── conf.d/ # 主配置目录 │ │ └── custom.cnf # 自定义配置文件 │ └── conf.d.docker/ # 容器默认配置目录(可选) ├── data/ # 数据库文件 └── logs/ # 日志文件 ``` #### 关键配置参数说明 | 参数 | 作用 | 推荐值 | |------|------|--------| | `--config-dir` | 覆盖默认配置目录 | `/etc/mysql/conf.d.docker` | | `--ignore-db-dir` | 忽略缺失目录错误 | `lost+found` | | `--plugin-dir` | 指定插件目录 | `/usr/lib/mysql/plugin` | ### 常见问题解决方案 1. **目录权限问题**: ```bash chown -R 1000:1000 /use01/docker/mysql8.0.24-docker1 ``` 2. **SELinux 限制**(CentOS/RHEL): ```bash chcon -Rt svirt_sandbox_file_t /use01/docker/mysql8.0.24-docker1 ``` 3. **配置文件验证**: ```bash docker run --rm mysql:8.0.35 mysqld --validate-config \ --config-dir=/etc/mysql/conf.d.docker ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值