AI创想

标题: Docker安装MySQL详解 [打印本页]

作者: admin    时间: 2025-4-17 22:10
标题: Docker安装MySQL详解
一、docker下载MySQL镜像
docker pull mysql  默认下载最新版本
docker pull mysql:{版本号}
例:docker pull mysql:5.7
查看MySQL镜像是否下载成功
docker images


1、创建mysql目录
创建mysql配置文件目录,使用 -p 创建多级目录
mkdir -p /docker/mysql/conf
编写配置文件
cd /docker/mysql/conf

vi my.conf
[client]
# 端口号
port=3306

[mysql]
no-beep
# 配置了 MySQL 客户端的默认字符集
default-character-set=utf8mb4

[mysqld]
# 端口号
port=3306
# 数据目录
datadir=/var/lib/mysql
# 设置了 MySQL 服务器的字符集为 UTF-8
character-set-server=utf8mb4
# 设置了 MySQL 服务器的排序规则为 utf8mb4_unicode_ci,通常用于支持国际化和多语言字符的正确排序
collation-server=utf8mb4_unicode_ci
# 用于禁用客户端字符集握手,允许客户端和服务器之间的字符集设置更加灵活
skip-character-set-client-handshake
# 禁用了主机名解析,以提高连接性能
skip-name-resolve
# 默认存储引擎
default-storage-engine=INNODB
# 将 SQL 模式设置为严格
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
#  最大连接数
max_connections=1024
# 表缓存
table_open_cache=2000
# 表内存
tmp_table_size=16M
# 线程缓存
thread_cache_size=10
# 设置大小写不敏感
lower_case_table_names=1

# myisam设置
myisam_max_sort_file_size=100G
myisam_sort_buffer_size=8M
key_buffer_size=8M
read_buffer_size=0
read_rnd_buffer_size=0

# innodb设置
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=8M
innodb_log_file_size=48M
innodb_thread_concurrency=33
innodb_autoextend_increment=64
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_checksum_algorithm=0
# 其他设置
back_log=80
flush_time=0
join_buffer_size=256K
max_allowed_packet=4M
max_connect_errors=100
open_files_limit=4161
sort_buffer_size=256K
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000
2、启动MySQL
编写脚本
cd /docker/mysql/

vi startMysql.sh
docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart=always \
-v /docker/mysql/log:/var/log/mysql \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/conf:/etc/mysql/conf.d \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
参数说明:
docker run:这是 Docker 启动容器的命令。

-d:这个选项使容器在后台运行,以允许您继续在终端中执行其他命令。

--name mysql:创建的容器名称。

-p 3306:3306:这部分命令将主机的端口 3306 映射到容器内的 3306 端口。

--restart=always :开机自动启动

-v /docker/mysql/log:/var/log/mysql:映射日志目录,宿主机:容器。

-v /docker/mysql/data:/var/lib/mysql:映射数据目录,宿主机:容器。

-v /docker/mysql/conf:/etc/mysql/conf.d:映射配置目录,宿主机:容器。

-v /etc/localtime:/etc/localtime:ro \ : 让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。

-e MYSQL_ROOT_PASSWORD=root:这个选项设置 MySQL 根用户的密码。

mysql:5.7:这是要运行的 Docker 镜像的名称和标签。

赋予权限
chmod -R 777 startMysql.sh
启动脚本
./startMysql.sh
查看运行镜像
docker ps


查看日志
docker logs mysql


测试连接


二、设置开机自动启动/取消开机启动
docker ps


docker update --restart=always 容器ID


取消开机自动启动
docker update --restart=no 容器ID
三、修改密码
进入容器
docker exec -it mysql bash
登录MySQL
mysql -u root -proot


修改密码

# 修改普通用户,只改一个就好
SET PASSWORD FOR 'youruser' = PASSWORD('xxxxxxxx');
# 修改root用户,改两个
SET PASSWORD FOR 'root' = PASSWORD('xxxxxxxxx');
SET PASSWORD FOR 'root'@'localhost'=PASSWORD('xxxxxxxxx');
退出MySQL服务
\q
退出容器

exit
重启服务/容器
docker restart mysql
四、添加配置
1、修改容器中的MySQL时间不同步的问题
2、修改容器中的MySQL分组only_full_group_by问题
3、修改表名不区分大小写问题
在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
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
————————————————

原文链接:https://blog.csdn.net/qq_27257535/article/details/144582697






欢迎光临 AI创想 (https://llms-ai.com/) Powered by Discuz! X3.4