创建MySQL目录映射
mysql/log
mysql/data
mysql/conf
创建配置文件
mysql/conf/my.cnf
配置文件 my.cnf
[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
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
[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
:这个选项禁用了主机名解析,以提高连接性能。
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 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 镜像。
运行成功后代表完成
进入容器
docker exec -it mysql bash
# 登录mysql
mysql -u root -p123456
# 修改密码
# 修改普通用户,只改一个就好
SET PASSWORD FOR 'youruser' = PASSWORD('xxxxxxxx');
# 修改root用户,改两个
SET PASSWORD FOR 'root' = PASSWORD('xxxxxxxxx');
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('xxxxxxxxx');