介绍
Docker 中文网址: https://www.dockerdocs.cn
Docker Hub官方网址:https://hub.docker.com
Docker Hub中MySQL介绍:https://hub.docker.com/_/mysql
切换到“Tags”页面,复制指定的MySQL版本拉取命令,例如 :docker pull mysql:5.7
预备
先创建3个目录,创建MySQL容器时会挂载容器的卷(Volume),用于Docker和宿主机(Centos)之间文件共享,包罗配置文件、数据文件和日记文件。
什么是卷(Volume)?命令 docker -v 中的“-v”就是这个卷,“-v”只是“–volume”的简写。
客官请留步,多少的看一下!!!
Docker官方文档解释卷的寄义:https://docs.docker.com/storage/volumes/
由于本人的英文水平非常的一般,全部我看的中文文档:https://www.dockerdocs.cn/storage/volumes/
下面这个操纵可以不消,因为下面会有整合完整的使用命令!!!
使用 -p 创建多级目录,即 mydata 目录下创建 mysql 目录, mysql 目录下又创建 log 、data 、conf 三个目录:
- mkdir -p /mydata/mysql/log
- mkdir -p /mydata/mysql/data
- mkdir -p /mydata/mysql/conf
复制代码 安装
- 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 编码。
- [client]
- default-character-set=utf8mb4
- [mysql]
- default-character-set=utf8mb4
- [mysqld]
- 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 服务器的字符集和排序规则等设置。让我解释一下这个配置文件的内容:
- [client] 部分包罗了 MySQL 客户端的配置,确保客户端使用 UTF-8 字符集。
- [mysql] 部分也配置了 MySQL 客户端的默认字符集。
- [mysqld] 部分包罗了 MySQL 服务器的配置选项,用于配置 MySQL 服务器的举动。
以下是这个配置文件的各个配置选项的解释:
default-character-set=utf8mb4 和 default-character-set=utf8mb4****:这两个选项在 [client] 和 [mysql] 部分都设置了默认字符集为 UTF-8,确保客户端和服务器使用相同的字符集。
init_connect='SET collation_connection = utf8mb4_unicode_ci' 和 init_connect='SET NAMES utf8mb4'****:这些选项在 [mysqld] 部分设置了初始化连接时实行的 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 exec -it mysql bash
复制代码
- mysql -h 主机IP地址 -P 3306 -u root -p
复制代码 退出MySQL服务
退出容器
添加配置
- 修改容器中的MySQL时间差别步的问题
- 修改容器中的MySQL分组only_full_group_by问题
- 修改表名不区分大小写问题
在MySQL配置文件(通常是my.cnf)中,确保已正确配置时区。您可以在配置文件中添加以下内容:
- [mysqld]
- 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 exec -it mysql bash
复制代码 登录MySQL
修改暗码
- # 修改普通用户,只改一个就好
- 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 表。
- select user,host from user;
复制代码
删除mysql数据库user表中 user=“root”,host="%"的那条记载,并革新权限。
可以这么做,但是不建议这么干,改个复杂的暗码,不袒露给其他使用者就好了!!!
可以这么做,但是不建议这么干,改个复杂的暗码,不袒露给其他使用者就好了!!!
可以这么做,但是不建议这么干,改个复杂的暗码,不袒露给其他使用者就好了!!!
- delete user from mysql.user where user='root' and host='%';
复制代码
创建新账户供外部工具连接
使用 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;
复制代码 革新账号权限。
新用户登录测试
容器基础操纵
启动容器
- docker start mysql
- 或
- docker start 容器ID
复制代码 制止容器
- docker stop mysql
- 或
- docker stop 容器ID
复制代码 删除容器
- docker rm mysql
- 或
- docker rm 容器ID
复制代码 重启容器
- docker restart mysql
- 或docker restart 容器ID
复制代码 查看状态
查看全部容器的运行状态,包罗运行的和制止的
查看全部运行中的容器的状态,不包罗制止的
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企服之家,中国第一个企服评测及商务社交产业平台。 |