使用Docker快速部署和初始化MySQL数据库的实战指南

在现代软件开发中,容器化技术已经成为提高开发效率和简化部署流程的重要工具。Docker作为容器化技术的代表,能够帮助开发者快速构建、部署和运行应用程序。本文将详细介绍如何使用Docker快速部署和初始化MySQL数据库,帮助你在项目中快速上手。

一、准备工作

在开始部署之前,我们需要做好以下准备工作:

    安装Docker: 确保你的系统中已经安装了Docker。你可以参考官方文档进行安装:Docker安装指南。

    准备MySQL配置文件和初始化脚本: 为了更好地管理MySQL配置和初始化数据,我们需要准备相应的配置文件和初始化脚本。

      创建配置文件 hm.cnf

      [mysqld]
      character-set-server=utf8mb4
      collation-server=utf8mb4_unicode_ci
      

      创建初始化脚本 hmall.sql

      CREATE DATABASE IF NOT EXISTS hmall;
      USE hmall;
      CREATE TABLE users (
       id INT AUTO_INCREMENT PRIMARY KEY,
       username VARCHAR(50) NOT NULL,
       password VARCHAR(50) NOT NULL
      );
      INSERT INTO users (username, password) VALUES ('admin', 'admin123');
      

    创建挂载目录: 在虚拟机上创建本地目录用于挂载:

    mkdir -p /root/mysql/data
    mkdir -p /root/mysql/conf
    mkdir -p /root/mysql/init
    

将准备好的配置文件和初始化脚本移动到挂载目录下:

   cp hm.cnf /root/mysql/conf/
   cp hmall.sql /root/mysql/init/

二、部署MySQL数据库

    拉取MySQL镜像: 使用以下命令拉取MySQL镜像:

    docker pull mysql:8.0.26
    

    创建并启动MySQL容器: 使用以下命令创建并启动MySQL容器,同时挂载本地目录:

    docker run -d \
     --name mysql \
     -p 3306:3306 \
     -e TZ=Asia/Shanghai \
     -e MYSQL_ROOT_PASSWORD=wangjx17 \
     -v /root/mysql/data:/var/lib/mysql \
     -v /root/mysql/conf:/etc/mysql/conf.d \
     -v /root/mysql/init:/docker-entrypoint-initdb.d \
     mysql:8.0.26
    
    • -d:以守护进程模式运行容器。
    • --name mysql:为容器命名为mysql
    • -p 3306:3306:将容器的3306端口映射到主机的3306端口。
    • -e TZ=Asia/Shanghai:设置时区为亚洲/上海。
    • -e MYSQL_ROOT_PASSWORD=wangjx17:设置MySQL的root用户密码。
    • -v:挂载本地目录到容器中的相应目录。

    验证MySQL容器: 使用以下命令查看容器状态:

    docker ps
    

如果看到mysql容器正在运行,说明部署成功。

三、连接和测试MySQL数据库

    使用客户端连接MySQL: 你可以使用任何MySQL客户端工具(如MySQL Workbench、Navicat等)连接到MySQL数据库。连接参数如下:

    • 主机名:localhost 或虚拟机IP
    • 端口:3306
    • 用户名:root
    • 密码:wangjx17

    验证数据库和表: 连接成功后,执行以下SQL语句验证数据库和表是否创建成功:

    SHOW DATABASES;
    USE hmall;
    SHOW TABLES;
    SELECT * FROM users;
    

如果能看到hmall数据库和users表,并且表中有数据,说明初始化脚本执行成功。

四、使用Docker Compose简化部署

除了手动部署,我们还可以使用Docker Compose来简化部署过程。

    创建docker-compose.yml文件: 在项目根目录下创建docker-compose.yml文件,添加以下内容:

    version: '3.7'
    services:
     db:
       image: mysql:8.0.26
       restart: always
       environment:
         MYSQL_ROOT_PASSWORD: wangjx17
         MYSQL_DATABASE: hmall
       ports:
         - "3306:3306"
       volumes:
         - dbdata:/var/lib/mysql
         - ./mysql/conf:/etc/mysql/conf.d
         - ./mysql/init:/docker-entrypoint-initdb.d
    volumes:
     dbdata:
    

    启动服务: 在项目根目录下执行以下命令:

    docker-compose up -d
    

这将自动拉取MySQL镜像并启动容器,同时挂载本地目录。

五、常见问题及解决方案

    容器启动失败

    • 检查Docker日志:使用docker logs <container_id>查看容器日志,找出错误原因。
    • 确保挂载目录权限正确:确保本地挂载目录有适当的读写权限。

    无法连接到MySQL

    • 检查防火墙设置:确保主机防火墙允许3306端口访问。
    • 确认容器运行状态:使用docker ps确认容器是否正常运行。

    初始化脚本未执行

    • 确认脚本位置:确保初始化脚本位于/docker-entrypoint-initdb.d目录下。
    • 检查脚本语法:确保SQL脚本语法正确。

六、总结

通过本文的详细步骤,你已经学会了如何使用Docker快速部署和初始化MySQL数据库。无论是手动部署还是使用Docker Compose,都能帮助你高效地管理数据库环境。希望这些实战经验能对你的项目开发有所帮助,祝你开发顺利!