使用Docker部署MySQL并实现中文支持与数据持久化
拉取MySQL 5.7镜像
通过以下命令获取MySQL 5.7版本的官方镜像:
docker pull mysql:5.7
启动MySQL容器实例
运行容器,映射端口3306,并设置root用户密码为123456:
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
确认容器已成功运行:
docker ps
进入容器并验证数据库
连接到正在运行的容器实例,登录MySQL服务:
docker exec -it <container_name> /bin/bash
mysql -uroot -p123456
执行基础查询验证:
show databases;
create database test_db;
use test_db;
create table users(id INT, name VARCHAR(50));
insert into users values(1, '张三');
select * from users;
配置字符集以解决中文乱码问题
停止并删除原有容器后,重新创建带数据卷和配置文件挂载的新容器:
docker run -d \
-p 3306:3306 \
--privileged=True \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name=mysql_container \
mysql:5.7
在宿主机路径 /data/mysql/conf 下创建配置文件 my.cnf:
[client]
default_character_set=utf8
[mysqld]
character_set_server=utf8
collation_server=utf8_general_ci
保存后重启容器使配置生效:
docker restart mysql_container
验证字符集设置
进入容器检查当前字符集配置:
docker exec -it mysql_container /bin/bash
mysql -uroot -p123456
执行如下命令查看字符集状态:
SHOW VARIABLES LIKE 'character%';
确保所有相关变量均显示为 utf8。
测试中文存储功能
在新数据库中创建表并插入包含中文的数据:
CREATE DATABASE test_charset;
USE test_charset;
CREATE TABLE items (id INT, description VARCHAR(100));
INSERT INTO items VALUES (1, '这是一个测试用例');
SELECT * FROM items;
结果应正确显示中文内容,无乱码现象。
验证数据持久性
删除现有容器并重建,验证数据是否保留:
docker rm -f mysql_container
使用相同的卷路径重新创建容器:
docker run -d \
-p 3306:3306 \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name=mysql_container \
mysql:5.7
再次进入容器检查数据是否存在:
docker exec -it mysql_container /bin/bash
mysql -uroot -p123456
SHOW DATABASES;
USE test_charset;
SHOW TABLES;
SELECT * FROM items;
确认之前插入的中文记录依然存在,说明数据持久化已成功实现。