Docker部署MySQL 5.7:持久化数据的实战技巧

ops/2025/1/23 0:46:38/

在生产环境中使用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容器。

 


http://www.ppmy.cn/ops/152320.html

相关文章

Freemarker和ItextPDF实际应用

1. FreeMarker模板文件路径 确保FreeMarker模板文件位于正确的路径,并通过Spring Boot自动加载。模板文件放在 src/main/resources/templates/ 目录下,FreeMarker会自动处理这些文件。 Configuration public class FreeMarkerConfig {Value("${sp…

Walrus Learn to Earn计划正式启动!探索去中心化存储的无限可能

本期 Learn to Earn 活动将带领开发者和区块链爱好者深入探索 Walrus 的技术核心与实际应用,解锁分布式存储的无限可能。参与者不仅能提升技能,还能通过完成任务赢取丰厚奖励!🌊 什么是 Walrus? 数据主权如今正成为越…

【2024年华为OD机试】 (E卷,100分) - 字符统计及重排(JavaScriptJava PythonC/C++)

一、问题描述 题目描述 给定一个仅包含字母的字符串(不包含空格),统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。如果次数相同,则按照自然顺序进行排序,且小写字母在大写字母之前。 输入描述 输入一行,…

使用EVE-NG-锐捷实现静态路由

一、项目拓扑 二、项目实现 1、路由器R1配置 进入特权模式 enable 进入全局模式 configure terminal更改名称为R1 hostname R1关闭域名解析。在域名解析开启的情况下,输错的命令会当做域名进行解析,卡住30秒左右,直至解析超时 …

Vue 3中导航守卫(Navigation Guard)结合Axios实现token认证机制

在Vue 3中,导航守卫(Navigation Guard)用于拦截路由的变化,可以在用户访问页面前进行检查。结合Axios进行token认证机制时,我们可以通过导航守卫在路由跳转时,检查用户的认证状态,确保用户有有效…

【2024 博客之星评选】请继续保持Passion

我尝试复盘自己2024年走的路,希望能给诸君一些借鉴。 文章目录 回头望感想与收获成长与教训今年计划感恩一些体己话 回头望 回望我的2024年,年初拿高绩效,但感觉逐渐被公司一点点剥离出中心;年中一直在学习防患于未然&#xff1b…

.NET开源的处理分布式事务的解决方案

前言 在分布式系统中,由于各个系统服务之间的独立性和网络通信的不确定性,要确保跨系统的事务操作的最终一致性是一项重大的挑战。今天给大家推荐一个.NET开源的处理分布式事务的解决方案基于 .NET Standard 的 C# 库:CAP。 CAP项目介绍 C…

消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)

Apache Pulusar是一个分布式、多租户、高性能的发布/订阅(Pub/Sub)消息系统,最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点,提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力,适用于大规模分布式系…