祗疼妳一个 发表于 2024-10-16 10:38:59

Docker实操:安装MySQL5.7详解(保姆级教程)

介绍

Docker 中文网址: https://www.dockerdocs.cn
Docker Hub官方网址:https://hub.docker.com
Docker Hub中MySQL介绍:https://hub.docker.com/_/mysql
https://img-blog.csdnimg.cn/img_convert/a4152289d3865f71dc0854ed3400123b.png
https://img-blog.csdnimg.cn/img_convert/e2c434b763e098cc180be980a34b2da0.png

https://img-blog.csdnimg.cn/img_convert/7d8547e89a546d09dd066e863c542b79.png
切换到“Tags”页面,复制指定的MySQL版本拉取命令,例如 :docker pull mysql:5.7


https://img-blog.csdnimg.cn/img_convert/d307a54b800bba456c4831ac0a3e0cf4.png
预备

先创建3个目录,创建MySQL容器时会挂载容器的卷(Volume),用于Docker和宿主机(Centos)之间文件共享,包罗配置文件、数据文件和日记文件。
什么是卷(Volume)?命令 docker -v 中的“-v”就是这个卷,“-v”只是“–volume”的简写。
客官请留步,多少的看一下!!!
Docker官方文档解释卷的寄义:https://docs.docker.com/storage/volumes/
由于本人的英文水平非常的一般,全部我看的中文文档:https://www.dockerdocs.cn/storage/volumes/
https://img-blog.csdnimg.cn/img_convert/24d2f7e3f3e5e6c13e191a61c6901638.png
下面这个操纵可以不消,因为下面会有整合完整的使用命令!!!
使用 -p 创建多级目录,即 mydata 目录下创建 mysql 目录, mysql 目录下又创建 log 、data 、conf 三个目录:
mkdir -p /mydata/mysql/log
mkdir -p /mydata/mysql/data
mkdir -p /mydata/mysql/conf
安装



[*]拉取MySQL指定版本的镜像
docker pull mysql:5.7


[*]运行容器
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
这个 Docker 命令是用于启动 MySQL 5.7 容器的,让我们解释其中的各个部分:
   docker run****:这是 Docker 启动容器的命令。
-p 3306:3306****:这部分命令将主机的端口 3306 映射到容器内的 3306 端口。这样,您可以通过主机的 3306 端口来访问容器内运行的 MySQL 服务。
--name mysql****:通过此选项,您为容器指定了一个名称,即 mysql****。这使得容器更轻易识别和管理。
-v /mydata/mysql/log:/var/log/mysql****:这是一个数据卷挂载操纵,将主机上的 /mydata/mysql/log 目录挂载到容器内的 /var/log/mysql 目录。这样,MySQL 日记文件将在主机上存储,以供查看。
-v /mydata/mysql/data:/var/lib/mysql****:同样,这是另一个数据卷挂载操纵,将主机上的 /mydata/mysql/data 目录挂载到容器内的 /var/lib/mysql 目录。这用于将 MySQL 数据文件保存在主机上,以便数据长期化。
-v /mydata/mysql/conf:/etc/mysql****:此挂载操纵将主机上的 /mydata/mysql/conf 目录挂载到容器内的 /etc/mysql 目录。这样,您可以提供自界说的 MySQL 配置文件。
--restart=always****:这个选项指示 Docker 在容器退出时自动重新启动容器。这对于确保 MySQL 服务一直可用非常有用。
-e MYSQL_ROOT_PASSWORD=123456****:这个选项设置 MySQL 根用户的暗码。在示例中,暗码被设置为 123456
-d****:这个选项使容器在后台运行,以允许您继承在终端中实行其他命令。
mysql:5.7****:这是要运行的 Docker 镜像的名称和标签。在此示例中,使用 MySQL 5.7 镜像。
这个命令将启动一个 MySQL 5.7 容器,将 MySQL 数据、日记和配置文件挂载到主机上的目录中,设置 MySQL 根暗码,并允许容器在后台运行,以及在容器退出时自动重新启动。这是一个典型的用例,用于在 Docker 中运行 MySQL 数据库容器。
宿主机新建配置文件

在宿主机,宿主机,宿主机上新建!!!

自界说的 my.cnf 配置文件。 **留意!!!**在 /mydata/mysql/conf/ 目录下创建自界说的 my.cnf 配置文件。文件名随意,文件格式必须为 .cnf 。
vi /mydata/mysql/conf/my.cnf
添加容器运行的配置参数。使用的是**utf8mb4**编码而不是 utf8 编码。

default-character-set=utf8mb4


default-character-set=utf8mb4


init_connect="SET collation_connection = utf8mb4_unicode_ci"
init_connect="SET NAMES utf8mb4"
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
保存后,已经创建了一个名为 /mydata/mysql/conf/my.cnf 的 MySQL 配置文件。这个文件包罗了一些 MySQL 的配置选项,用于配置 MySQL 服务器的字符集和排序规则等设置。让我解释一下这个配置文件的内容:


[*] 部分包罗了 MySQL 客户端的配置,确保客户端使用 UTF-8 字符集。
[*] 部分也配置了 MySQL 客户端的默认字符集。
[*] 部分包罗了 MySQL 服务器的配置选项,用于配置 MySQL 服务器的举动。
以下是这个配置文件的各个配置选项的解释:
   default-character-set=utf8mb4 和 default-character-set=utf8mb4****:这两个选项在 和 部分都设置了默认字符集为 UTF-8,确保客户端和服务器使用相同的字符集。
init_connect='SET collation_connection = utf8mb4_unicode_ci' 和 init_connect='SET NAMES utf8mb4'****:这些选项在 部分设置了初始化连接时实行的 SQL 语句。这些语句设置了连接的字符集和排序规则为 UTF-8 和 utf8mb4_unicode_ci****。
character-set-server=utf8mb4****:这个选项设置了 MySQL 服务器的字符集为 UTF-8。
collation-server=utf8mb4_unicode_ci****:这个选项设置了 MySQL 服务器的排序规则为 utf8mb4_unicode_ci****,通常用于支持国际化和多语言字符的正确排序。
skip-character-set-client-handshake****:这个选项用于禁用客户端字符集握手,允许客户端和服务器之间的字符集设置更加机动。
skip-name-resolve****:这个选项禁用了主机名解析,以提高连接性能。
它适用于确保 MySQL 以正确的字符集和排序规则处理数据。确保将这个配置文件用于启动 MySQL 服务器,可以通过 -v 选项将配置文件挂载到容器内。例如:
docker run -d -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
--restart=always \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7
将在容器内使用自界说配置文件 /mydata/mysql/conf/my.cnf 来启动 MySQL 服务器。
重启服务

docker restart mysql

查看日记

docker logs mysql
https://img-blog.csdnimg.cn/img_convert/08a80fbb340330780e367ba8c10ec354.png
测试连接

https://img-blog.csdnimg.cn/img_convert/1c6ff62bf944393ee71ff12c4e643391.png
进入容器

docker exec -it mysql bash

https://img-blog.csdnimg.cn/img_convert/915ea4010ebd2271c2d6675d561fd4c0.png


[*]可以使用外部工具连接测试
mysql -h 主机IP地址 -P 3306 -u root -p
退出MySQL服务

\q
退出容器

exit
添加配置


[*]修改容器中的MySQL时间差别步的问题
[*]修改容器中的MySQL分组only_full_group_by问题
[*]修改表名不区分大小写问题
在MySQL配置文件(通常是my.cnf)中,确保已正确配置时区。您可以在配置文件中添加以下内容:

default_time_zone = '+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1

这是一个 MySQL 配置文件(my.cnf 或 my.ini)中的一部分,用于设置数据库的默认时区、SQL 模式和其他选项。以下是这些选项的详细解释:
   default_time_zone = '+8:00'****:设置数据库的默认时区为 UTC+8。这意味着在实行与日期和时间相干的操纵时,数据库将根据这个时区进行转换。
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION****:设置 SQL 模式,以便更严格地依照 SQL 标准。这有助于避免匿伏的数据问题和错误。详细来说,这些模式包罗:
STRICT_TRANS_TABLES****:克制在严格模式下插入无效日期和数据。
NO_ZERO_IN_DATE****:克制使用零日期(如 ‘0000-00-00’)。
NO_ZERO_DATE****:克制使用零日期(如 ‘0000-00-00’)。
ERROR_FOR_DIVISION_BY_ZERO****:将除以零的操纵视为错误,而不是警告。
NO_AUTO_CREATE_USER****:克制自动创建用户。
NO_ENGINE_SUBSTITUTION****:假如哀求的存储引擎不可用,克制自动使用替代存储引擎。
lower_case_table_names = 1****:将全部表名存储为小写。这有助于避免因大小写差别而导致的表名混淆和错误。在某些操纵系统(如 Windows 和 macOS)上,这个选项可能对大小写不敏感,而在其他操纵系统(如 Linux)上可能对大小写敏感。设置为 1 表示启用该功能,0 表示禁用。
重启服务/容器

docker restart mysql

修改暗码

进入容器

docker exec -it mysql bash

登录MySQL

mysql -u root -p123456
https://img-blog.csdnimg.cn/img_convert/a74eeff358eb1f62b69a8febddfc7e97.png
修改暗码

# 修改普通用户,只改一个就好
SET PASSWORD FOR 'youruser' = PASSWORD('xxxxxxxx');
# 修改root用户,改两个
SET PASSWORD FOR 'root' = PASSWORD('xxxxxxxxx');
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('xxxxxxxxx');

留意,留意,留意!!!到此为止,docker下的MySQL服务已经可用了,下面是一些细化操纵。
留意,留意,留意!!!到此为止,docker下的MySQL服务已经可用了,下面是一些细化操纵。
留意,留意,留意!!!到此为止,docker下的MySQL服务已经可用了,下面是一些细化操纵。

禁用 root 账户被外部工具连接

进入到容器里,连接mysql,删除mysql数据库user表中 user=“root”,host="%"的那条记载。因为这条数据会允许 root 账户被允许外部工具(如Navicat或SQLyog)连接,现实上,应该克制这么做,正确做法是只允许 root 账户当地连接。假如想 root 账户继承被外部工具连接,那就把root暗码设置得更复杂,过于简单不安全!
切换到 mysql 数据库,并查看 user 表。
use mysql;
select user,host from user;
https://img-blog.csdnimg.cn/img_convert/7197346115d4064bb42292f1c564bf1a.png
删除mysql数据库user表中 user=“root”,host="%"的那条记载,并革新权限。
可以这么做,但是不建议这么干,改个复杂的暗码,不袒露给其他使用者就好了!!!
可以这么做,但是不建议这么干,改个复杂的暗码,不袒露给其他使用者就好了!!!
可以这么做,但是不建议这么干,改个复杂的暗码,不袒露给其他使用者就好了!!!
delete user from mysql.user where user='root' and host='%';
flush privileges;

创建新账户供外部工具连接

使用 CREATE 创建账户,例如对应mysql.user表中,字段user为 goboy,字段host为 % ,账号暗码为 123456 ,“%”代表任何主机。使用 GRANT 授予账户特定权限。
创建用户和暗码
CREATE USER 'goboy'@'%' IDENTIFIED BY '123456';
授予账户特定权限。ALL 和 ALL PRIVILEGES 是一样的,可简写为 ALL 。
GRANT ALL ON *.* TO 'goboy'@'%' WITH GRANT OPTION;
革新账号权限。
FLUSH PRIVILEGES;

https://img-blog.csdnimg.cn/img_convert/9faa799e3c0ee70b0afc496118531794.png

新用户登录测试

https://img-blog.csdnimg.cn/img_convert/70c074f26de7a812a921aaf4fc860b64.png

容器基础操纵

启动容器

docker start mysql

docker start 容器ID
制止容器

docker stop mysql

docker stop 容器ID
删除容器

docker rm mysql

docker rm 容器ID
重启容器

docker restart mysql

或docker restart 容器ID 查看状态

查看全部容器的运行状态,包罗运行的和制止的

docker ps
-a
查看全部运行中的容器的状态,不包罗制止的

docker ps
MySQL的conf.d和conf文件都是用于配置MySQL服务的重要文件,但它们在配置管理和使用上有所差别。以下是它们之间的主要区别:
conf.d文件的作用
自界说配置文件:conf.d目录下的文件主要用于存放自界说的MySQL配置,例如,假如您想要添加或修改某些服务端或客户端的配置,可以在这个目录下创建相应的.cnf文件。
合并配置:MySQL会读取conf.d目录下的全部.cnf文件,并将它们合并为一个配置。这意味着,假如您在conf.d目录下创建了新的my.cnf文件,MySQL会将其读取并合并到配置中,但不会覆盖/etc/my.cnf文件。
conf文件的作用
默认配置文件:conf文件通常是MySQL的默认配置文件,它包罗了MySQL的基本配置信息。这个文件通常位于/etc/mysql/mysql.cnf或/etc/my.cnf,详细取决于您的操纵系统和MySQL版本。
服务启动和运行的基础:conf文件是MySQL服务启动和运行的基础,它包罗了服务所需的基本配置,如数据库目录、日记文件位置等。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Docker实操:安装MySQL5.7详解(保姆级教程)