Docker部署MySQL 5.7:持久化数据的实战技巧
在生产环境中使用Docker启动MySQL 5.7时,需要考虑数据持久化、配置文件管理、安全性等多个方面。以下是一个详细的步骤指南。
1. 准备工作
(1)创建挂载目录 在宿主机上创建用于挂载的目录,以便持久化数据和配置文件。
sudo mkdir -p /usr/local/mysql/{data,conf,log}
(2)创建配置文件 在/usr/local/mysql/conf
目录下创建my.cnf
配置文件,内容如下:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
bind-address = 0.0.0.0
max_connections = 500
max_allowed_packet = 1073741824
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
根据你的实际需求调整配置文件中的参数。
2. 拉取MySQL 5.7镜像
sudo docker pull mysql:5.7
3. 运行MySQL容器
使用以下命令运行MySQL容器,并挂载配置文件、数据目录和日志目录:
sudo docker run -d -p 3306:3306 --name mysql57 \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart=always \
mysql:5.7
-d
:以守护进程模式运行容器。-p 3306:3306
:将容器的3306端口映射到宿主机的3306端口。--name mysql57
:为容器指定名称。-v /usr/local/mysql/data:/var/lib/mysql
:挂载数据目录。-v /usr/local/mysql/conf:/etc/mysql/conf.d
:挂载配置文件目录。-v /usr/local/mysql/log:/var/log/mysql
:挂载日志目录。-e MYSQL_ROOT_PASSWORD=123456
:设置root用户的密码。--restart=always
:设置容器在退出时自动重启。mysql:5.7
:指定使用的镜像版本。
4. 验证MySQL是否运行成功
(1)查看容器状态
sudo docker ps
如果看到名为mysql57
的容器处于运行状态,说明MySQL容器已成功启动。
(2)连接MySQL数据库
使用命令行工具
sudo docker exec -it mysql57 mysql -uroot -p
然后输入密码123456
,如果成功进入MySQL命令行界面,说明MySQL服务已正常运行。
(3)使用数据库管理工具 推荐使用开源的工具DBeaver,当然如果不缺Money可以使用强大的好用的navicat。
5. 数据持久化
通过挂载数据目录和配置文件,即使删除容器,数据和配置也不会丢失。你可以重新运行一个新的容器并挂载相同的数据卷,数据将保持一致。
6. 安全性
(1) 使用环境变量文件
为了避免在命令行历史中直接暴露密码,可以将密码存储在一个环境变量文件中。
创建环境变量文件(envvars.env
)
MYSQL_ROOT_PASSWORD=123456
运行MySQL容器
sudo docker run -d -p 3306:3306 --name mysql57 \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/log:/var/log/mysql \
--env-file /path/to/envvars.env \
--restart=always \
mysql:5.7
将/path/to/envvars.env
替换为环境变量文件的实际路径。
7. 配置防火墙(如果需要)
如果你使用的是云服务器,需要在服务器的安全组中开放3306端口,以允许外部访问MySQL服务。例如,如果是阿里云ECS服务器,可以在阿里云控制台的安全组设置中开放3306端口。
8. 常见操作
- 停止容器
sudo docker stop mysql57
- 启动容器
sudo docker start mysql57
- 重启容器
sudo docker restart mysql57
- 删除容器
sudo docker rm mysql57
如果容器正在运行,需要先停止容器再删除,或者使用sudo docker rm -f mysql57
强制删除正在运行的容器。
通过以上步骤,你可以在生产环境中安全地启动并运行MySQL 5.7容器。