Appearance
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。这种方式的优势包括:
- 环境隔离 - Docker 容器提供了良好的环境隔离
- 易于管理 - 通过简单的 Docker 命令即可管理 MySQL 服务
- 数据持久化 - 通过数据卷挂载确保数据不会丢失
- 快速部署 - 可以快速在不同环境中部署相同配置的 MySQL
记住定期备份数据,监控服务状态,并根据实际使用情况调整配置参数以获得最佳性能。