Docker 安装 MySQL
·
拉取镜像需要魔法,我通过 Win 主机拉取 MySQL 镜像,再上传到 Linux 虚拟机内;
我的 Linux 环境是通过 VMware Workstation 安装的 Rocky Linux 10 虚拟机;
- 拉取 mysql:latest 镜像,本文对应的版本是 mysql:9.4.0 ,执行命令,如下
docker pull mysql:latest
# 或指定具体版本号 9.4.0
# docker pull mysql:9.4.0


- 导出镜像,执行命令,如下
docker save mysql:latest > mysql_latest.tar
# linux 环境中如果有 gzip 命令,还可以执行以下命令进行压缩
# 注:mysql:9.4.0 镜像已经很小了,再进行压缩其实没太大必要,这里只是为了记录
# docker save mysql:latest | gzip > mysql_latest.tar.gz

- 上传到
Linux虚拟机内/opt/docker-temp,导入镜像,执行命令,如下
ll /opt/docker-temp
# /opt/docker-temp 目录不存在的话,则需要创建
# sudo mkdir /opt/docker-temp
# 如果操作用户是非 root 用户,则需要修改所有者
# sudo chown -R $USER:$USER
cd /opt/docker-temp
docker load < mysql_latest.tar

- 创建
/opt/mysql/opt/mysql/conf/opt/mysql/init目录,用以放置mysql相关文件,执行命令,如下
sudo mkdir -p /opt/mysql
sudo mkdir -p /opt/mysql/conf
sudo mkdir -p /opt/mysql/init
sudo chown -R $USER:$USER /opt/mysql

- 在
/opt/mysql/conf目录下创建my.cnf文件,文件内容如下
sudo vim /opt/mysql/conf/my.cnf
[mysqld]
# 基础运行配置
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
default_time_zone='+8:00'
# 网络与连接配置
port=3306
max_connections=200
max_connect_errors=10000
# 内存与缓存配置
tmp_table_size=32M
max_heap_table_size=32M
join_buffer_size=128M
sort_buffer_size=2M
read_buffer_size=1M
read_rnd_buffer_size=2M
# 存储引擎配置
default_storage_engine=InnoDB
innodb_buffer_pool_size=4G
innodb_buffer_pool_instances=4
innodb_read_io_threads=8
innodb_write_io_threads=8
innodb_purge_threads=4
# 字符集与校验
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
# 二进制日志配置
server-id=1
log_bin=/var/lib/mysql/mysql-bin
binlog_format=ROW
log_bin_trust_function_creators=1
# 安全与约束配置
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
explicit_defaults_for_timestamp=ON
[client]
default_character_set=utf8mb4
- 在
/opt目录下创建docker-compose.yaml文件,添加mysql配置文件引入,文件内容如下
sudo vim /opt/docker-compose.yaml
name: zhe
include:
- /opt/mysql/mysql-compose.yaml
- 在
/opt/mysql目录下创建mysql-compose.yaml文件,添加mysql配置,文件内容如下
sudo vim /opt/mysql/mysql-compose.yaml
services:
mysql:
image: mysql:latest
container_name: mysql
restart: on-failure:30
privileged: true
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=123456
ports:
- "3306:3306"
volumes:
- /opt/mysql/conf:/etc/mysql/conf.d
- /opt/mysql/data:/var/lib/mysql
- /opt/mysql/init:/docker-entrypoint-initdb.d
- 在
/opt或/opt/mysql目录下,启动mysql容器,执行命令,如下
cd /opt
# 修改所属者
sudo chown -R $USER:$USER /opt/mysql
docker compose up -d mysql

- 查看
mysql启动状态,执行命令,如下
docker ps

目录 /opt/mysql/init 是放置 MySQL 容器初始创建时需要初始化的操作,支持 .sh .sql .sql.gz 等文件,以 demo.sql 文件为示例
- 创建
/opt/mysql/init/demo.sql文件,内容如下
vim /opt/mysql/init/demo.sql
-- 创建数据库(如果不存在),使用 utf8mb4 字符集以支持中文和特殊字符
CREATE DATABASE IF NOT EXISTS zhe_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建用户并设置密码
CREATE USER IF NOT EXISTS 'zhe_user'@'%' IDENTIFIED BY '123456';
-- 授予用户对 zhe_db 数据库的所有权限
GRANT ALL PRIVILEGES ON zhe_db.* TO 'zhe_user'@'%';
-- 刷新权限使授权生效
FLUSH PRIVILEGES;
-- 切换到 zhe_db 数据库
USE zhe_db;
-- 创建 user 表
CREATE TABLE IF NOT EXISTS `user` (
`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID,主键',
`name` VARCHAR(50) NOT NULL COMMENT '用户姓名',
`gender` ENUM('M','F') COMMENT '性别:M-男,F-女',
`age` INT UNSIGNED COMMENT '年龄',
`mobile_number` VARCHAR(11) UNIQUE COMMENT '手机号码',
`address` TEXT COMMENT '住址',
`id_number` CHAR(18) UNIQUE COMMENT '身份证号码',
`created_by` BIGINT UNSIGNED NOT NULL COMMENT '创建人用户ID',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_by` BIGINT UNSIGNED NOT NULL COMMENT '更新人用户ID',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '逻辑删除标记:0-未删除,1-已删除'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
-- 初始化插入 1 条示例数据
INSERT INTO `user` (
`id`,
`name`,
`gender`,
`age`,
`mobile_number`,
`address`,
`id_number`,
`created_by`,
`updated_by`
) VALUES (
1001,
'张三',
'M',
28,
'13800138000',
'北京市海淀区某某街道123号',
'110101199501011234',
0,
0
);
- 停止
MySQL容器,并删除数据目录,重新启动容器,执行命令,如下
cd /opt/mysql
docker compose stop mysql
sudo rm -rf data
docker compose up -d mysql

- 连接
MySQL,用户名/密码:zhe_user/123456,查询user表,如下

- 查询数据,执行
SQL如下
SELECT * FROM user;

更多推荐




所有评论(0)