Skip to content

Ubuntu 24.04 服务器使用 Docker 安装 MySQL 5.7

本文详细介绍如何在 Ubuntu 24.04 服务器上使用 Docker 安装和配置 MySQL 5.7 数据库。

前提条件

在开始之前,请确保你的 Ubuntu 24.04 服务器已经安装了 Docker。如果还未安装,可以参考 Docker 官方文档进行安装。

检查 Docker 状态

bash
# 检查 Docker 是否运行
sudo systemctl status docker

# 如果未启动,启动 Docker
sudo systemctl start docker

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

安装步骤

1. 创建数据目录

首先创建用于存储 MySQL 数据、配置文件和日志的目录:

bash
# 创建 MySQL 相关目录
sudo mkdir -p /mydata/mysql/{conf,data,log}

# 查看创建的目录结构
tree /mydata/mysql/

这将创建以下目录结构:

  • /mydata/mysql/conf - 存储 MySQL 配置文件
  • /mydata/mysql/data - 存储 MySQL 数据文件
  • /mydata/mysql/log - 存储 MySQL 日志文件

2. 拉取 MySQL 5.7 镜像

bash
# 拉取 MySQL 5.7 镜像
docker pull mysql:5.7

# 查看镜像
docker images | grep mysql

3. 启动 MySQL 容器

使用以下命令启动 MySQL 5.7 容器:

bash
docker run -p 3306:3306 --name mysql5.7 \
  -v /mydata/mysql/log:/var/log/mysql \
  -v /mydata/mysql/data:/var/lib/mysql \
  -v /mydata/mysql/conf:/etc/mysql/conf.d \
  --restart=always \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -d mysql:5.7

参数说明:

  • -p 3306:3306 - 端口映射,将主机的 3306 端口映射到容器的 3306 端口
  • --name mysql5.7 - 容器名称
  • -v - 数据卷挂载,持久化数据
  • --restart=always - 容器自动重启策略
  • -e MYSQL_ROOT_PASSWORD=123456 - 设置 root 用户密码
  • -d - 后台运行

4. 创建 MySQL 配置文件

创建自定义的 MySQL 配置文件以优化性能和设置字符集:

bash
sudo tee /mydata/mysql/conf/mysql.cnf > /dev/null <<EOF
[mysqld]
# 绑定地址,允许外部连接
bind-address = 0.0.0.0

# 字符集设置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 默认存储引擎
default-storage-engine = INNODB

# 连接数设置
max_connections = 1000
max_connect_errors = 6000

# 缓冲区设置
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M

# 查询缓存
query_cache_size = 64M
query_cache_type = 1

# 日志设置
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# 时区设置
default-time_zone = '+8:00'

[mysql]
default-character-set = utf8mb4

[client]
default-character-set = utf8mb4
EOF

5. 重启容器以应用配置

bash
# 重启 MySQL 容器
docker restart mysql5.7

# 查看容器状态
docker ps | grep mysql5.7

验证安装

1. 检查容器运行状态

bash
# 查看容器状态
docker ps -a | grep mysql5.7

# 查看容器日志
docker logs mysql5.7

2. 连接到 MySQL

方法一:通过容器内部连接

bash
# 进入容器
docker exec -it mysql5.7 bash

# 连接到 MySQL
mysql -u root -p123456

# 查看数据库
SHOW DATABASES;

# 查看字符集设置
SHOW VARIABLES LIKE 'character%';

# 退出
exit

方法二:从主机直接连接

如果你的主机安装了 MySQL 客户端:

bash
# 连接到 MySQL
mysql -h localhost -P 3306 -u root -p123456

# 或者指定具体 IP
mysql -h 127.0.0.1 -P 3306 -u root -p123456

3. 创建测试数据库和用户

sql
-- 创建测试数据库
CREATE DATABASE testdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户并授权
CREATE USER 'testuser'@'%' IDENTIFIED BY 'testpass';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'%';
FLUSH PRIVILEGES;

-- 查看用户
SELECT user, host FROM mysql.user;

安全配置

1. 修改 root 密码

sql
-- 修改 root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_strong_password';
FLUSH PRIVILEGES;

2. 删除匿名用户

sql
-- 删除匿名用户
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

3. 配置防火墙(可选)

如果启用了防火墙,需要开放 3306 端口:

bash
# Ubuntu UFW 防火墙
sudo ufw allow 3306/tcp

# 或者只允许特定 IP 访问
sudo ufw allow from 192.168.1.0/24 to any port 3306

常用管理命令

容器管理

bash
# 启动容器
docker start mysql5.7

# 停止容器
docker stop mysql5.7

# 重启容器
docker restart mysql5.7

# 查看容器详细信息
docker inspect mysql5.7

# 查看容器资源使用情况
docker stats mysql5.7

数据备份

bash
# 备份数据库
docker exec mysql5.7 mysqldump -u root -p123456 --all-databases > backup.sql

# 备份指定数据库
docker exec mysql5.7 mysqldump -u root -p123456 testdb > testdb_backup.sql

# 恢复数据库
docker exec -i mysql5.7 mysql -u root -p123456 < backup.sql

查看日志

bash
# 查看 MySQL 错误日志
sudo tail -f /mydata/mysql/log/error.log

# 查看慢查询日志
sudo tail -f /mydata/mysql/log/slow.log

# 查看容器日志
docker logs -f mysql5.7

故障排除

1. 容器启动失败

bash
# 查看详细错误信息
docker logs mysql5.7

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

# 检查目录权限
ls -la /mydata/mysql/

2. 无法连接到 MySQL

  • 检查容器是否正在运行
  • 确认端口映射是否正确
  • 检查防火墙设置
  • 验证用户名和密码

3. 字符集问题

sql
-- 检查字符集设置
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';

-- 如果字符集不正确,需要重新创建数据库
DROP DATABASE IF EXISTS your_database;
CREATE DATABASE your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

性能优化建议

1. 内存配置

根据服务器内存大小调整 innodb_buffer_pool_size

ini
# 通常设置为系统内存的 70-80%
innodb_buffer_pool_size = 1G  # 对于 2GB 内存的服务器

2. 连接数配置

ini
# 根据实际需求调整最大连接数
max_connections = 500
max_connect_errors = 10000

3. 定期维护

sql
-- 优化表
OPTIMIZE TABLE your_table_name;

-- 分析表
ANALYZE TABLE your_table_name;

-- 检查表
CHECK TABLE your_table_name;

总结

通过以上步骤,你已经成功在 Ubuntu 24.04 服务器上使用 Docker 安装并配置了 MySQL 5.7。这种方式的优势包括:

  1. 环境隔离 - Docker 容器提供了良好的环境隔离
  2. 易于管理 - 通过简单的 Docker 命令即可管理 MySQL 服务
  3. 数据持久化 - 通过数据卷挂载确保数据不会丢失
  4. 快速部署 - 可以快速在不同环境中部署相同配置的 MySQL

记住定期备份数据,监控服务状态,并根据实际使用情况调整配置参数以获得最佳性能。