CentOS 7 使用 Docker 搭建 MySQL 8.0.32 的全面详细教程

一、安装 Docker

1. 卸载旧版本(如果存在)

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2. 安装必要的依赖包

sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

3. 添加 Docker 仓库

sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

4. 更新 yum 软件包索引

sudo yum makecache fast

5. 安装 Docker CE

sudo yum install -y docker-ce docker-ce-cli containerd.io

6. 启动并设置 Docker 开机自启

sudo systemctl start docker
sudo systemctl enable docker

7. 验证 Docker 是否安装成功

sudo docker run hello-world

如果看到 "Hello from Docker!" 字样,表示安装成功。

二、拉取 MySQL 8.0.32 镜像

sudo docker pull mysql:8.0.32

三、创建数据持久化和配置文件目录

1. 创建数据持久化目录

sudo mkdir -p /opt/mysql_data

2. 创建 MySQL 配置文件目录

sudo mkdir -p /opt/mysql_conf

3. 设置目录权限

为了避免权限问题,确保 Docker 容器内的 MySQL 用户可以访问这些目录,需要设置正确的权限。

sudo chown -R 999:999 /opt/mysql_data
sudo chown -R 999:999 /opt/mysql_conf

说明

  • 999:999 是官方 MySQL Docker 镜像中 mysql 用户的 UID 和 GID。

四、编写 MySQL 配置文件

1. 创建 my.cnf 文件

sudo vi /opt/mysql_conf/my.cnf

2. 添加以下内容

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

# 允许远程连接
bind-address=0.0.0.0

# 其他配置(可选)
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

说明

  • bind-address=0.0.0.0:允许 MySQL 监听所有网络接口的连接请求。
  • 字符集设置确保数据库使用 UTF-8 编码。

五、运行 MySQL 容器

sudo docker run -d \
--name mysql8 \
-p 3306:3306 \
-v /opt/mysql_data:/var/lib/mysql \
-v /opt/mysql_conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-e MYSQL_ROOT_PASSWORD=你的密码 \
--restart unless-stopped \
mysql:8.0.32

参数说明:

  • -d:后台运行容器。
  • --name mysql8:容器名称。
  • -p 3306:3306:端口映射。
  • -v /opt/mysql_data:/var/lib/mysql:数据持久化目录映射。
  • -v /opt/mysql_conf/my.cnf:/etc/mysql/conf.d/my.cnf:挂载自定义配置文件。
  • -e MYSQL_ROOT_PASSWORD=你的密码:设置 root 用户密码,请自行替换。
  • --restart unless-stopped:设置容器重启策略。

六、验证 MySQL 容器运行状态

1. 查看容器状态

sudo docker ps

应看到 mysql8 容器正在运行。

2. 查看容器日志

sudo docker logs mysql8

确保日志中没有错误信息,如出现类似以下内容,表示启动成功:

[Note] [Entrypoint]: MySQL init process done. Ready for start up.
[System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections.

七、配置 MySQL 允许远程连接

1. 进入容器内部

sudo docker exec -it mysql8 bash

2. 登录 MySQL

mysql -u root -p

输入之前设置的密码。

3. 创建远程用户并授予权限

CREATE USER 'remote_user'@'%' IDENTIFIED BY '用户密码';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

说明

  • 'remote_user':替换为您希望创建的用户名。
  • '用户密码':替换为该用户的密码。
  • '%':表示允许从任何主机连接。

4. 退出 MySQL 和容器

EXIT;
exit

八、配置防火墙

1. 开放 3306 端口

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

2. 验证防火墙配置

sudo firewall-cmd --zone=public --query-port=3306/tcp

返回 yes 表示端口已开放。

九、验证数据持久化

1. 创建测试数据库

sudo docker exec -it mysql8 mysql -u root -p -e "CREATE DATABASE testdb;"

2. 重启容器

sudo docker restart mysql8

3. 验证数据库是否存在

sudo docker exec -it mysql8 mysql -u root -p -e "SHOW DATABASES;"

应看到 testdb 数据库仍然存在。

十、设置容器随 Docker 启动

由于在运行容器时使用了 --restart unless-stopped 参数,容器会在 Docker 服务启动时自动启动。您可以通过以下命令验证:

sudo systemctl restart docker
sudo docker ps

mysql8 容器应在 Docker 重启后自动启动。

注意事项

  1. 权限问题
    • 确保数据持久化目录 /opt/mysql_data 和配置文件目录 /opt/mysql_conf 的所有者和权限正确。
    • 可以通过以下命令设置权限:sudo chown -R 999:999 /opt/mysql_data sudo chown -R 999:999 /opt/mysql_conf
  2. 防火墙配置
    • 确保防火墙已开放 3306 端口,允许远程连接。
  3. 安全性
    • 远程用户应设置强密码。
    • 在生产环境中,尽量限制允许连接的 IP 地址,不要使用 % 通配符。
    • 考虑使用防火墙或安全组进一步限制访问。
  4. 数据备份
    • 在对数据目录进行任何删除或清空操作之前,务必备份重要数据。
  5. 错误处理
    • 如果在启动容器时遇到 --initialize specified but the data directory has files in it. Aborting. 错误,说明数据目录已存在文件,导致初始化失败。需要清空数据目录并确保权限正确。解决方法sudo docker stop mysql8 sudo docker rm mysql8 sudo rm -rf /opt/mysql_data/* sudo chown -R 999:999 /opt/mysql_data 然后重新运行容器。

总结

通过本教程,您已经成功在 CentOS 7 上使用 Docker 搭建了 MySQL 8.0.32,配置了数据持久化,允许了远程连接,并设置了容器随 Docker 启动。整个过程包括安装 Docker、拉取 MySQL 镜像、配置 MySQL、运行容器和验证功能。希望本教程对您有所帮助。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:zbxhhzj@qq.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
转载本站文章请保留原文链接,如文章内说明不允许转载该文章,请不要转载该文章,谢谢合作。

给TA赞助
共{{data.count}}人
人已赞助
Java

Linux系统下从A主机到B主机传输文件的11种超级详细方法

2024-9-26 17:20:39

技术自动化

自动补偿技术:如何通过自我修复提升系统效率与可靠性

2025-1-21 8:04:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
购物车
优惠劵
搜索