引言
在本教程中,我们将通过 Docker 快速部署 MySQL 5.7 数据库服务,并深入解决在使用过程中可能遇到的字符集问题。此过程不仅涉及基本的安装步骤,还会详细介绍如何利用 Docker 数据卷(volume)来持久化数据以及优化配置,确保数据库支持中文字符的正确存储与查询。
准备工作
- 确保已安装 Docker。
- 确认宿主机的 3306 端口未被其他服务占用。
步骤一:拉取 MySQL 镜像
打开终端或命令行工具,执行以下命令以下载 MySQL 5.7 版本的官方镜像:
docker pull mysql:5.7
步骤二:运行 MySQL 容器
执行以下命令启动 MySQL 容器。此命令将宿主机的 3306 端口映射到容器的 3306 端口,并设置了 root 用户的默认密码为 123456
。同时,使用 --privileged
参数给予容器更高的权限,以便处理可能的权限问题。
docker run -d -p 3306:3306 --privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
步骤三:挂载数据卷
初次尝试可能未考虑数据持久化和配置文件的外部化。若在使用中遇到中文字符插入错误,需采取以下步骤进行修正。
-
停止并移除之前的容器:
docker stop mysql docker rm mysql
-
使用数据卷挂载:重新运行容器,挂载宿主机的目录到容器的对应目录,确保数据、日志和配置文件的持久化。
docker run -d -p 3306:3306 --privileged=true \ -v /usr/local/mysql/log:/var/log/mysql \ -v /usr/local/mysql/data:/var/lib/mysql \ -v /usr/local/mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
这里分别挂载了日志、数据和配置文件夹。
步骤四:配置字符集
-
创建配置文件:在宿主机的
/usr/local/mysql/conf
目录下创建my.cnf
文件。cd /usr/local/mysql/conf vim my.cnf
在
my.cnf
中添加以下内容:[client] default_character_set=utf8 [mysqld] collation_server=utf8_general_ci character_set_server=utf8
保存并退出。
-
重启容器,使新的配置生效:
docker restart mysql
步骤五:验证与测试
-
检查字符集:进入容器,检查 MySQL 的字符集设置是否已更正。
docker exec -it mysql bash mysql -u root -p
登录后执行
SHOW VARIABLES LIKE '%character%'
和SHOW VARIABLES LIKE '%collation%'
查看字符集设置。 -
创建数据库和表:在 MySQL 提示符下,创建数据库、表,并尝试插入中文数据,验证中文存储功能是否正常。
-
本地工具测试:使用 Navicat 或其他数据库管理工具连接至宿主机的 3306 端口,测试中文数据的插入、查询是否正常。
总结
通过上述步骤,我们不仅成功利用 Docker 部署了 MySQL 服务,还解决了中文字符插入失败的问题。数据卷的使用不仅保证了数据的持久性,也让配置文件的修改更加灵活和安全。现在,你拥有了一个稳定、支持中文的 Docker 化 MySQL 环境,适合开发、测试乃至生产环境的应用。