银河麒麟v10服务器版Docker部署MySQL 8教程

银河麒麟v10服务器版Docker部署MySQL 8教程

1. 前言

本教程旨在指导用户在银河麒麟v10服务器版上使用Docker容器化技术部署MySQL 8数据库。通过Docker部署MySQL可以实现快速安装、环境隔离、数据持久化和灵活扩展等优势。

1.1 适用环境

  • 银河麒麟v10服务器版
  • 至少2GB内存
  • 至少10GB可用磁盘空间
  • 网络连接正常

1.2 MySQL 8特性

  • 更好的性能和可扩展性
  • 支持NoSQL文档存储
  • 增强的安全性(默认启用密码策略)
  • 改进的JSON支持
  • 窗口函数和公共表表达式

2. 系统环境准备

2.1 系统更新

bash 复制代码
# 更新系统软件包到最新版本
sudo yum update -y

2.2 安装必要依赖

bash 复制代码
# 安装wget、curl等必要工具
sudo yum install -y wget curl vim

3. Docker安装与配置

3.1 安装Docker

bash 复制代码
# 安装Docker所需的依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加Docker官方软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装Docker CE、CLI和containerd.io
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动Docker服务
sudo systemctl start docker

# 设置Docker服务开机自启
sudo systemctl enable docker

# 验证Docker安装是否成功
sudo docker --version

3.2 安装Docker Compose

bash 复制代码
# 下载Docker Compose二进制文件
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 创建软链接到系统PATH
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# 验证Docker Compose安装是否成功
docker-compose --version

3.3 配置防火墙

bash 复制代码
# 启动并启用firewalld服务
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 允许Docker服务通过防火墙
sudo firewall-cmd --permanent --zone=public --add-service=docker

# 允许MySQL 3306端口通过防火墙
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp

# 重新加载防火墙规则
sudo firewall-cmd --reload

4. MySQL 8 Docker部署

4.1 创建目录结构

bash 复制代码
# 创建MySQL数据、配置和日志目录
sudo mkdir -p /opt/docker/mysql/{data,conf,logs}

# 设置目录权限
sudo chmod -R 777 /opt/docker/mysql

4.2 创建MySQL配置文件

bash 复制代码
# 创建my.cnf配置文件
cat > /opt/docker/mysql/conf/my.cnf << EOF
[mysqld]
# 基本设置
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

# 数据存储设置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# 日志设置
log-error=/var/log/mysql/error.log
pid-file=/var/run/mysqld/mysqld.pid

# 连接设置
max_connections=1000
connect_timeout=60
wait_timeout=28800
interactive_timeout=28800

# 性能设置
table_open_cache=128
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=2M
join_buffer_size=2M

# 安全设置
default_authentication_plugin=mysql_native_password

# InnoDB设置
innodb_buffer_pool_size=256M
innodb_log_file_size=64M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50

# SQL模式
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
EOF

4.3 创建Docker Compose文件

bash 复制代码
# 创建docker-compose.yml文件
cat > /opt/docker/mysql/docker-compose.yml << EOF
version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql8
    restart: always
    environment:
      # MySQL root用户密码
      MYSQL_ROOT_PASSWORD: YourStrongRootPassword123!  # 请修改为强密码
      # 创建新用户(可选)
      MYSQL_USER: appuser  # 自定义用户名
      MYSQL_PASSWORD: AppUserPassword123!  # 自定义用户密码
      # 创建默认数据库(可选)
      MYSQL_DATABASE: appdb  # 自定义数据库名
    ports:
      - "3306:3306"
    volumes:
      # 数据持久化
      - /opt/docker/mysql/data:/var/lib/mysql
      # 配置文件
      - /opt/docker/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
      # 日志文件
      - /opt/docker/mysql/logs:/var/log/mysql
    command:
      # 启动命令参数
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --default-authentication-plugin=mysql_native_password
EOF

4.4 启动MySQL服务

bash 复制代码
# 进入MySQL目录
cd /opt/docker/mysql

# 使用Docker Compose启动MySQL
docker-compose up -d

# 查看容器启动状态
docker-compose ps

4.5 验证MySQL部署

bash 复制代码
# 查看容器日志,确认MySQL启动成功
docker-compose logs -f

# 进入MySQL容器
docker exec -it mysql8 bash

# 在容器内登录MySQL
mysql -u root -p

输入你在docker-compose.yml中设置的MYSQL_ROOT_PASSWORD密码,成功登录后会显示MySQL命令行提示符。

5. MySQL 8 基本配置与使用

5.1 创建数据库和用户(如果未在Docker Compose中设置)

sql 复制代码
-- 创建数据库
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户并授权
CREATE USER 'myuser'@'%' IDENTIFIED BY 'MyUserPassword123!';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

5.2 远程访问配置

MySQL容器默认允许远程访问,但需要确保:

  1. 防火墙已开放3306端口(已在3.3节配置)
  2. MySQL用户已授权远程访问(使用'user'@'%'格式)
  3. 服务器安全组(如果有)已开放3306端口

5.3 数据备份与恢复

bash 复制代码
# 备份MySQL数据
cd /opt/docker/mysql
docker exec mysql8 mysqldump -u root -p --all-databases > backup_all.sql

# 恢复MySQL数据
docker exec -i mysql8 mysql -u root -p < backup_all.sql

6. 开机自启动配置

6.1 容器级自启动

在docker-compose.yml中已配置restart: always,确保容器在退出或Docker服务重启时自动重启。

6.2 系统级自启动

确保Docker服务已设置开机自启:

bash 复制代码
# 验证Docker服务开机自启设置
sudo systemctl is-enabled docker

# 如果未启用,执行以下命令
sudo systemctl enable docker

6.3 配置Docker Compose服务开机自启(可选)

创建systemd服务单元来管理MySQL的Docker Compose服务:

bash 复制代码
# 创建systemd服务文件
cat > /etc/systemd/system/mysql-docker.service << EOF
[Unit]
Description=MySQL 8 Docker Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/docker/mysql
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target
EOF

启用并启动该服务:

bash 复制代码
# 重新加载systemd配置
sudo systemctl daemon-reload

# 启用服务开机自启
sudo systemctl enable mysql-docker

# 启动服务
sudo systemctl start mysql-docker

# 验证服务状态
sudo systemctl status mysql-docker

7. MySQL 8 性能优化

7.1 调整InnoDB缓冲池大小

根据服务器内存大小调整innodb_buffer_pool_size参数,建议设置为服务器可用内存的50-70%:

bash 复制代码
# 修改配置文件
vim /opt/docker/mysql/conf/my.cnf

# 在[mysqld]部分添加或修改
innodb_buffer_pool_size=1G  # 根据实际内存调整

# 重启MySQL服务
docker-compose restart

7.2 调整连接数

根据实际需求调整max_connections参数:

bash 复制代码
# 修改配置文件
vim /opt/docker/mysql/conf/my.cnf

# 在[mysqld]部分添加或修改
max_connections=2000  # 根据实际需求调整

# 重启MySQL服务
docker-compose restart

7.3 启用慢查询日志

bash 复制代码
# 修改配置文件
vim /opt/docker/mysql/conf/my.cnf

# 在[mysqld]部分添加
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2  # 慢查询阈值(秒)

# 重启MySQL服务
docker-compose restart

8. 常见问题与故障排除

8.1 容器启动失败

bash 复制代码
# 查看详细日志
docker-compose logs -f

# 检查端口是否被占用
sudo netstat -tuln | grep 3306

# 检查目录权限
sudo ls -la /opt/docker/mysql/

8.2 无法远程连接MySQL

bash 复制代码
# 检查防火墙设置
sudo firewall-cmd --list-ports

# 检查MySQL用户授权
mysql -u root -p -e "SELECT user,host FROM mysql.user;"

# 检查容器端口映射
docker-compose ps

8.3 数据文件权限问题

bash 复制代码
# 修复目录权限
sudo chown -R 999:999 /opt/docker/mysql/data

8.4 MySQL日志过大

bash 复制代码
# 清理日志文件
cat /dev/null > /opt/docker/mysql/logs/error.log

# 配置日志轮转(可选)
# 创建/etc/logrotate.d/mysql-docker文件,添加日志轮转规则

9. 升级MySQL版本

bash 复制代码
# 备份数据(重要)
docker exec mysql8 mysqldump -u root -p --all-databases > backup_before_upgrade.sql

# 更新docker-compose.yml中的MySQL版本
# 将image: mysql:8.0改为image: mysql:8.0.x(指定新版本)

# 重新创建容器
docker-compose down
docker-compose up -d

10. 总结

本教程详细介绍了在银河麒麟v10服务器版上使用Docker部署MySQL 8的完整过程,包括:

  1. Docker和Docker Compose的安装与配置
  2. MySQL 8的容器化部署
  3. 数据持久化配置
  4. 远程访问设置
  5. 开机自启动配置
  6. 性能优化建议
  7. 常见问题解决方案

通过Docker部署MySQL 8,您可以快速搭建一个稳定、安全的数据库环境,同时享受容器化带来的各种优势。

11. 参考资料

相关推荐
weixin_466836 分钟前
K8S-Deployment
云原生·容器·kubernetes
soft200152539 分钟前
Linux + MySQL + Sysbench 一键部署和压测教程
linux·mysql·adb
时光追逐者43 分钟前
在 .NET 中将 EF Core 升级到 9.0.5 MySQL 连接提示 get_LockReleaseBehavior
数据库·mysql·c#·.net·ef core
计算机学姐43 分钟前
基于Python的智能点餐系统【2026最新】
开发语言·vue.js·后端·python·mysql·django·flask
卜锦元1 小时前
docker 部署南大通用 GBase 8sV8.8
运维·数据库·docker·容器·部署·运维开发
Garfield20051 小时前
查找Docker 容器占用的磁盘空间
docker·容器·键盘
【非典型Coder】1 小时前
MySQL 临键锁
数据库·mysql
宋冠巡1 小时前
Docker容器化Node.js应用教程
docker·node.js
北友舰长1 小时前
基于Springboot+vue大型商场应急预案管理系统的设计与实现【Java毕业设计·安装调试·代码讲解·文档报告】
java·vue.js·spring boot·mysql·商场·应急处理·应急