Docker 部署 MySQL 8 详细图文教程_docker mysql8
🚀 作者主页: 有来技术
🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template
🌺 仓库主页: GitCode︱ Gitee ︱ Github
💖 欢迎点赞 👍 收藏 ⭐评论 📝 如有错误敬请纠正!
目录
- 1. 环境准备
- 2. 创建宿主机挂载目录
- 3. 准备 MySQL 配置文件
- 4. 拉取 MySQL 8 Docker 镜像
- 5. 启动 MySQL 容器
- 6. 查看容器运行状态
- 7. 配置 MySQL 远程连接权限
- 8. 备份和恢复
1. 环境准备
首先,确保你的系统已安装 Docker。如果尚未安装 Docker,请参考相关文档进行安装:
- Linux (CentOS 9) 安装 Docker
- Linux (CentOS 8) 安装 Docker
2. 创建宿主机挂载目录
为了方便管理 MySQL 的配置文件、数据和日志,需要在宿主机上创建相应的挂载目录:
mkdir -p /mnt/mysql/{conf,data,logs}
/mnt/mysql/conf
my.cnf
/mnt/mysql/data
/mnt/mysql/logs
设置挂载目录权限:
为确保容器能够正常访问和写入这些目录,需要调整宿主机目录的权限:
sudo chown -R 999:999 /mnt/mysql/datasudo chown -R 999:999 /mnt/mysql/logs
999:999
是 MySQL 容器内的mysql
用户和组的 UID 和 GID。通过将权限设置为999:999
,确保容器能够正确地读写数据和日志文件。
3. 准备 MySQL 配置文件
在 /mnt/mysql/conf
目录下创建 MySQL 的配置文件。可以从官方 MySQL 镜像中获取默认配置文件并进行定制化设置。以下是一个基础的 my.cnf
配置文件示例:
首先,进入 /mnt/mysql/conf
目录并创建配置文件:
vi /mnt/mysql/conf/my.cnf
然后,添加以下内容到 my.cnf
配置文件中:
[mysqld]# MySQL 数据存储路径datadir=/var/lib/mysql# MySQL 错误日志路径log-error=/var/log/mysql/error.log# 启用远程连接bind-address=0.0.0.0# 设置字符集为 utf8mb4character-set-server=utf8mb4# 默认排序规则为 utf8mb4_0900_ai_ci,若需兼容 MySQL 5.7 可使用 utf8mb4_unicode_cicollation-server=utf8mb4_0900_ai_ci
4. 拉取 MySQL 8 Docker 镜像
在宿主机上执行以下命令来拉取最新版本的 MySQL 8 Docker 镜像:
docker pull mysql:8
5. 启动 MySQL 容器
通过 Docker 启动 MySQL 8 容器,并将宿主机的 /mnt/mysql
目录挂载到容器的相应路径。执行以下命令:
docker run -d \\ --name mysql8 \\ -e MYSQL_ROOT_PASSWORD=123456 \\ -p 3306:3306 \\ -v /mnt/mysql/conf/my.cnf:/etc/mysql/my.cnf \\ -v /mnt/mysql/data:/var/lib/mysql \\ -v /mnt/mysql/logs:/var/log/mysql \\ mysql:8
-d
--name mysql8
mysql8
-e MYSQL_ROOT_PASSWORD=rootpassword
root
用户密码为 yourpassword
-p 3306:3306
-v /mnt/mysql/conf/my.cnf:/etc/mysql/my.cnf
-v /mnt/mysql/data:/var/lib/mysql
-v /mnt/mysql/logs:/var/log/mysql
6. 查看容器运行状态
使用以下命令检查 MySQL 容器是否成功启动:
docker ps
7. 配置 MySQL 远程连接权限
默认情况下,MySQL 只允许本地连接。如果你希望允许远程连接,可以通过修改 MySQL 的用户权限来实现。首先,进入 MySQL 容器并登录数据库:
docker exec -it mysql8 mysql -u root -p# 输入容器创建时设置的 root 用户密码# Enter password: yourpassword
接着,执行以下 SQL 语句,允许 root 用户从任何 IP 地址连接:
-- 允许 root 用户从任何 IP 地址连接GRANT ALL PRIVILEGES ON *.* TO \'root\'@\'%\';-- 刷新权限FLUSH PRIVILEGES;
设置成功后,使用可视化客户端连接 MySQL 服务,并测试连接是否成功。请确保防火墙已开放 MySQL 的端口(默认端口 3306),以允许外部连接。
8. 备份和恢复
由于数据已经挂载到宿主机的 /mnt/mysql/data
目录中,你可以轻松地备份 MySQL 数据。以下是一个简单的备份命令示例:
docker exec mysql8 mysqldump -u root -pyourpassword --all-databases > /mnt/mysql/data/all_databases_backup.sql
恢复数据时,使用以下命令:
docker exec -i mysql8 mysql -u root -pyourpassword < /mnt/mysql/data/all_databases_backup.sql