银河麒麟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. 参考资料

相关推荐
janthinasnail23 分钟前
使用Docker安装nanobot(超轻量个人AI助手)
docker·容器
原来是猿38 分钟前
MySQL【事务下】
数据库·mysql·oracle
奕成则成1 小时前
面试被问:MySQL 与 Doris/SelectDB 的架构区别。 大数据为什么禁止select *。
mysql·面试·架构
gjc5921 小时前
踩坑实录:MySQL服务器CPU爆高,元凶竟是SELinux的setroubleshootd?
运维·服务器·数据库·mysql·adb
恋红尘2 小时前
K8S 配置与调度-叩丁狼
云原生·容器·kubernetes
喵喵爱自由2 小时前
Docker容器共享宿主机-安全网络
网络·安全·docker
Bat U2 小时前
MySQL数据库|建库&建表&数据类型
数据库·mysql
杨浦老苏2 小时前
搜索引擎聚合器Degoog
搜索引擎·docker·群晖
2401_884662102 小时前
计算机的基本概念
mysql
恋红尘2 小时前
K8S Pod 基础解析-分篇-叩丁狼
云原生·容器·kubernetes·pod