银河麒麟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容器默认允许远程访问,但需要确保:
- 防火墙已开放3306端口(已在3.3节配置)
- MySQL用户已授权远程访问(使用'user'@'%'格式)
- 服务器安全组(如果有)已开放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的完整过程,包括:
- Docker和Docker Compose的安装与配置
- MySQL 8的容器化部署
- 数据持久化配置
- 远程访问设置
- 开机自启动配置
- 性能优化建议
- 常见问题解决方案
通过Docker部署MySQL 8,您可以快速搭建一个稳定、安全的数据库环境,同时享受容器化带来的各种优势。