云原生之使用Docker部署mysql数据库教程

IDC服务

云原生之使用Docker部署mysql数据库教程

2025-04-14 00:02


? 部署前准备 安装Docker 在Linux系统(以Ubuntu为例)中,执行以下命令安装Docker:

                                            





? 部署前准备

  1. 安装Docker
    在Linux系统(以Ubuntu为例)中,执行以下命令安装Docker:

    sudo apt-get update && sudo apt-get install docker.io -y
    

    验证安装:

    docker --version
    
  2. 安装Docker Compose
    下载最新版本的Docker Compose:

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    

    验证版本:

    docker-compose --version
    

? 部署MySQL服务

方式一:单实例快速部署

  1. 拉取官方镜像

    docker pull mysql:latest
    
  2. 运行容器

    docker run -d \
      --name mysql-server \
      -p 3306:3306 \          # 映射MySQL端口
      -v /your/data/path:/var/lib/mysql \  # 指定数据存储目录(必须持久化)
      -e MYSQL_ROOT_PASSWORD=your_root_password \  # 设置root密码
      -e MYSQL_DATABASE=your_database \  # 可选:初始化数据库
      -e MYSQL_USER=your_user \          # 可选:创建用户
      -e MYSQL_PASSWORD=your_password \  # 可选:用户密码
      mysql:latest
    
    • 替换/your/data/path为实际路径(如/opt/mysql/data)。
    • 注意:若未挂载卷,数据将在容器删除后丢失。

方式二:Docker Compose部署(推荐)

创建docker-compose.yml文件:

version: '3'
services:
  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: your_database
      MYSQL_USER: your_user
      MYSQL_PASSWORD: your_password
    restart: always

启动服务:

docker-compose up -d

? 验证部署

  1. 访问MySQL

    • 本地连接
      docker exec -it mysql-server mysql -uroot -p
      
      输入密码后进入MySQL命令行。
    • 远程连接
      确保防火墙开放3306端口,并通过客户端工具(如MySQL Workbench)连接:
      Host: 服务器IPPort: 3306User: root(或其他用户)Password: your_root_password
      
  2. 检查数据持久化
    停止并删除容器后,数据仍保留在./data目录中,重启容器可恢复服务。


?️ 高级配置

1. 配置MySQL参数

通过挂载配置文件自定义MySQL行为:

volumes:
  - ./my.cnf:/etc/mysql/conf.d/my.cnf

创建my.cnf文件:

[mysqld]
max_connections = 200
innodb_buffer_pool_size = 1G

2. 主从复制(Master-Slave)

创建docker-compose.yml

version: '3'
services:
  master:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: master_password
      MYSQL_DATABASE: testdb
    volumes:
      - ./master_data:/var/lib/mysql
    ports:
      - "3306:3306"

  slave:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: slave_password
      MYSQL_REPLICATION_USER: repl
      MYSQL_REPLICATION_PASSWORD: repl_password
    volumes:
      - ./slave_data:/var/lib/mysql
    ports:
      - "3307:3306"
    depends_on:
      - master

master容器中配置主从同步:

FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;  # 记录File和Position
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

slave容器中执行:

CHANGE MASTER TO
  MASTER_HOST='master',
  MASTER_USER='repl',
  MASTER_PASSWORD='repl_password',
  MASTER_LOG_FILE='记录的File',
  MASTER_LOG_POS=记录的Position;
START SLAVE;

? 安全加固

  1. 限制远程访问
    修改MySQL配置文件my.cnf

    [mysqld]
    bind-address = 0.0.0.0  # 默认允许所有IP,建议指定具体IP
    

    通过防火墙限制端口访问(如仅允许特定IP访问3306端口)。

  2. 启用SSL加密
    my.cnf中添加:

    [mysqld]
    ssl-ca=/path/to/ca.pem
    ssl-cert=/path/to/server-cert.pem
    ssl-key=/path/to/server-key.pem
    

    挂载证书文件到容器内。


⚠️ 常见问题与注意事项

  1. 端口冲突
    若提示端口被占用,修改docker-compose.yml中的端口映射(如- "3307:3306")。

  2. 数据目录权限
    确保挂载目录有读写权限:

    sudo chmod -R 777 /your/data/path
    
  3. 日志查看

    docker logs -f mysql-server
    
  4. 远程连接失败
    检查MySQL用户是否有%权限(允许远程访问),并确保防火墙未拦截3306端口。


? 总结

 

通过Docker部署MySQL,可快速搭建轻量级数据库服务,适用于开发测试或小型生产环境。对于高并发或高可用场景,建议采用主从复制或多节点集群,并结合持久化存储方案(如NFS或云存储)。部署后需严格管理访问权限,定期备份数据,确保系统安全与稳定性。


标签:
  • Docker
  • mysql