Docker搭建MySQL的实现示例

 更新时间:2025年05月09日 10:11:25   作者:Dolphin_Home  
本文主要介绍了Docker搭建MySQL的实现示例,包括MySQL 8.0和MySQL 5.7,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

准备工作

  • 先准备配置目录和持久化目录,举个栗子:mkdir -p /opt/module/mysql/{conf,data,log}
  • 准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。
  • 当然不准备也没事,容器中有个默认配置:/etc/mysql/conf.d/my.cnf

拉取官方MySQL镜像

# 拉取 mysql8.0.33
docker pull mysql:8.0.33
docker pull mysql:5.7 

# 拉取最新版mysql镜像
docker pull mysql

运行镜像【安装MySQL8.0】

docker run -d -p 3306:3306 --name mysql \
-v /opt/module/mysql/conf:/etc/mysql/conf.d \
-v /opt/module/mysql/data:/var/lib/mysql \
-v /opt/module/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=root mysql:8.0.33

-d 表示后台启动;
-p 3306:3306 表示端口映射,前面是主机端口,后面是代表容器端口;
--name mysql 表示容器名称;

-v /opt/module/mysql/conf:/etc/mysql/conf.d 挂载配置文件,前面是主机目录,后面是容器内目录。
特别说明:

  • MySQL默认配置文件为/etc/mysql/my.cnf,该文件里面最后有一行!includedir /etc/mysql/conf.d/,表示包含该文件夹下面的*.cnf配置,故自定义配置放到该目录下即可;
  • 比较常用的方式是-v /opt/module/mysql/conf/my.cnf:/etc/mysql/my.cnf,直接挂载/opt/module/mysql/conf/my.cnf替换掉/etc/mysql/my.cnf文件;
  • 两种方式都行,个人更喜欢前一种;

-v /opt/module/mysql/data:/var/lib/mysql 挂载数据文件,前面是主机目录,后面是容器内目录;

-v /opt/module/mysql/log:/var/log/mysql 挂载数据文件,前面是主机目录,后面是容器内目录;

-e MYSQL_ROOT_PASSWORD=root 表示增加环境变量,等号前面是变量名称,这里是设置密码为root;
mysql:8.0.31 表示镜像名称和tag;

设置mysql开机自启

#查看是否运行
docker ps -a
#设置mysql开机自启
sudo docker update mysql --restart=always

查看启动日志

#docker logs [服务id/服务名]
docker logs mysql

docker logs -f -t --tail 20 mysql

进入MySQL容器内部

docker ps -a     # 查看正在运行的容器,并得到 容器id

# 进入mysql容器内部
docker exec -it [容器id] /bin/bash  # 中间那个是容器id 就是 CONTAINER_ID
#  -it 表示进入
docker exec -it mysql bash
docker exec -it mysql /bin/bash
# 使用 命令别名 开启 ll命令
cat <<EOF >> /etc/profile
alias ll='ls -l --color=tty'
alias grep='grep --color=auto'
EOF

检查

# 执行如下命令可以登录MySQL
docker exec -it mysql mysql -uroot -p  #回车后输入密码进入MySQL
# 执行相关MySQL语句查询
show databases; #回车

配置my.cnf

cat <<EOF >> /opt/module/mysql/conf/my.cnf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
EOF

查看docker下的ip地址

docker inspect [container_id 容器id]
或
docker inspect [container_id 容器id] | grep ip address

docker inspect --format='{{.NetworkSettings.IPAddress}}' [container_id 容器id]

查看防火墙【开放端口】

# 查询端口是否开放
firewall-cmd --query-port=3306/tcp

# 开放3306端口
firewall-cmd --permanent --add-port=3306/tcp

# 移除端口
firewall-cmd --permanent --remove-port=3306/tcp

# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

# 查看已经开发那些端口
firewall-cmd --list-ports
firewall-cmd --zone=public --list-ports

卸载

#停止mysql服务(也可以停止其他)
#docker stop [容器id/容器名]
docker stop mysql

#删除mysql服务(也可以删除其他)
#docker rm [服务id/服务名]
docker rm mysql

#删除mysql镜像
#docker rmi [镜像id/镜像名]
docker rmi mysql

常见错误

mysql Tablespace exists解决 1813 - Tablespace ‘xx.xx`’ exists.

执行如下命令:

mysql> show global variables like "%datadir%";
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.03 sec)

去这个目录(/var/lib/mysql/ )下面找 表名.idb 文件,删除该.ibd文件文件后,再重新创建表就没有问题了

补充MySQL权限操作

MySQL中:

创建hadoop用户,密码为:root

给hadoop用户,分配可以操作AAA、BBB数据库权限

开启hadoop用户的远程访问权限

在MySQL中,你可以通过以下步骤来完成上述任务:

创建用户并设置密码

CREATE USER 'hadoop'@'localhost' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;

这将在本地创建一个名为’hadoop’的用户,并设置密码为’root’。如果要允许从任何主机远程访问,可以使用以下命令:

CREATE USER 'hadoop'@'%' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;

给用户分配数据库权限【指定数据库】

GRANT ALL PRIVILEGES ON AAA.* TO 'hadoop'@'localhost';
GRANT ALL PRIVILEGES ON BBB.* TO 'hadoop'@'localhost';
FLUSH PRIVILEGES;

这将授予用户’hadoop’在本地对数据库’AAA’和’BBB’的全部权限。如果要允许从任何主机远程访问,可以使用以下命令:

GRANT ALL PRIVILEGES ON AAA.* TO 'hadoop'@'%';
GRANT ALL PRIVILEGES ON BBB.* TO 'hadoop'@'%';
FLUSH PRIVILEGES;

给用户分配数据库权限【全部数据库】

如果你想给hadoop用户分配可以操作所有数据库的权限,你可以使用通配符*。以下是在MySQL中授予用户对所有数据库的全部权限的方法:

-- 在localhost上授予权限
GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'localhost' WITH GRANT OPTION;

-- 允许远程访问时,使用以下语句
GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'%' WITH GRANT OPTION;

上述语句中,*.*表示所有数据库的所有表。WITH GRANT OPTION表示hadoop用户将拥有授予权限给其他用户的权限。

请注意,给予用户对所有数据库的全部权限可能存在安全风险,因此在生产环境中应该仔细考虑授权策略,只授予用户实际需要的最小权限。

开启远程访问权限

默认情况下,MySQL用户只能从本地连接。为了允许远程连接,你需要修改MySQL配置文件,并重新启动MySQL服务。

打开MySQL配置文件,一般在/etc/mysql/my.cnf/etc/my.cnf。找到并注释掉或修改如下行:

#bind-address = 127.0.0.1

将上述行注释掉或者将127.0.0.1改成服务器的IP地址。然后保存文件。

重启MySQL服务:

sudo service mysql restart

请注意,为了安全考虑,最好只允许特定IP地址范围访问MySQL。如果是在生产环境中使用,还应该考虑使用SSH隧道或SSL来加密连接。

补充内容Docker安装MySQL5.7

准备工作

  • 先准备配置目录和持久化目录,举个栗子:mkdir -p /opt/module/mysql/{conf,data,log}
  • 准备配置文件*.cnf,放到/opt/module/mysql/conf目录下。
  • 当然不准备也没事,容器中有个默认配置:/etc/mysql/conf.d/my.cnf

精简版

安装MySQL 5.7 可以通过 Docker 进行,以下是通过 Docker 安装 MySQL 5.7 的基本步骤:

  • 安装 Docker:如果你还没有安装 Docker,请先安装 Docker。你可以在 Docker 官网 上找到适合你操作系统的安装说明。

  • 拉取 MySQL 5.7 镜像:打开终端(命令行界面)并运行以下命令拉取 MySQL 5.7 镜像:

    docker pull mysql:5.7
    
  • 运行 MySQL 容器:运行以下命令创建并启动一个 MySQL 容器:

    docker run -d --name=mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_password mysql:5.7
    

    这里,将 your_password 替换为你想要设置的 MySQL root 用户的密码。

    • -d 表示在后台运行容器。
    • --name=mysql-5.7 给容器起一个名字,这里是 mysql-5.7,你可以根据需要更改。
    • -p 3306:3306 将容器的 MySQL 服务端口映射到主机的 3306 端口。
    • -e MYSQL_ROOT_PASSWORD=your_password 设置 MySQL root 用户的密码。
  • 进入 MySQL 容器:如果你想在容器内执行一些 MySQL 命令,可以使用以下命令进入容器:

    docker exec -it mysql-5.7 mysql -uroot -p
    

    输入你在第 3 步中设置的密码,然后你就可以在容器内使用 MySQL 了。

现在,你已经成功在 Docker 中安装并运行了 MySQL 5.7。请注意,这是一个简单的配置,生产环境中可能需要更多的配置选项,如数据卷、持久化存储等。

🍀进阶版

docker run -d -p 3306:3306 --name mysql-5.7 \
-v /opt/module/mysql/conf:/etc/mysql/conf.d \
-v /opt/module/mysql/data:/var/lib/mysql \
-v /opt/module/mysql/log:/var/log/mysql \
--restart=always --privileged=true \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7
  • -d: 表示以后台模式运行容器。
  • -p 3306:3306: 将主机的 3306 端口映射到容器的 3306 端口。
  • --name mysql-5.7: 为容器指定一个名字(mysql-5.7)。
  • -v /opt/module/mysql/conf:/etc/mysql/conf.d:将主机上的 MySQL 配置文件目录 /opt/module/mysql/conf 映射到容器内的 /etc/mysql/conf.d 目录,以便你可以自定义 MySQL 的配置。【容器中MySQL配置文件:/etc/mysql/conf.d/my.cnf
  • -v /opt/module/mysql/data:/var/lib/mysql: 将主机上的 MySQL 数据目录映射到容器内的相应位置。
  • -v /opt/module/mysql/log:/var/log/mysql: 将主机上的 MySQL 日志目录映射到容器内的相应位置。
  • --restart=always: 表示容器在退出时总是重新启动。
  • --privileged=true: 这个选项赋予容器所有的 Linux 的 capabilities,并打开所有的 Linux Security Modules。在一般情况下,最好仅提供容器所需的最小权限。如果没有特殊需求,建议不使用这个选项。

 到此这篇关于Docker搭建MySQL的实现示例的文章就介绍到这了,更多相关Docker搭建MySQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL主从同步设置中主服务器二进制日志无法开启的问题

    MySQL主从同步设置中主服务器二进制日志无法开启的问题

    这篇文章主要介绍了MySQL主从同步设置中主服务器二进制日志无法开启的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解MySQL的半同步

    详解MySQL的半同步

    这篇文章主要介绍了MySQL的半同步的相关资料,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-04-04
  • 数据库连接池以及sequelize实现增删改查等操作指南

    数据库连接池以及sequelize实现增删改查等操作指南

    Sequelize的连接需要传入参数,并且可以配置开启线程池、读写分库等操作,下面这篇文章主要给大家介绍了关于数据库连接池以及sequelize实现增删改查等操作的相关资料,需要的朋友可以参考下
    2022-08-08
  • Mysql分组查询每组最新一条数据的三种实现方法

    Mysql分组查询每组最新一条数据的三种实现方法

    我们在开发中经常会遇到分组查询最新数据的问题,下面这篇文章主要给大家介绍了关于Mysql分组查询每组最新一条数据的三种实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 关于clickhouse几种create table的情况

    关于clickhouse几种create table的情况

    这篇文章主要介绍了关于clickhouse几种create table的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • MYSQL优化之数据表碎片整理详解

    MYSQL优化之数据表碎片整理详解

    在日常的数据库维护中,在给客户制定维护方案时,都会有降低高水位此类的建议 建议每年年终定期做数据整理,下面这篇文章主要给大家介绍了关于MYSQL优化之数据表碎片整理的相关资料,需要的朋友可以参考下
    2022-04-04
  • MySQL 空间碎片的查看与回收

    MySQL 空间碎片的查看与回收

    ySQL数据库在运行过程中可能会出现空间碎片的问题,本文就来介绍一下MySQL 空间碎片的查看与回收 ,具有一定的参考价值,感兴趣的可以了解一下
    2025-02-02
  • Mysql解决USE DB堵塞详解

    Mysql解决USE DB堵塞详解

    这篇文章通过实例给大家分析了在MYSQL中出现USE DB堵塞的处理办法以及思考思路,有兴趣的朋友学习下吧。
    2017-12-12
  • Windows Server 2003 下配置 MySQL 集群(Cluster)教程

    Windows Server 2003 下配置 MySQL 集群(Cluster)教程

    这篇文章主要介绍了Windows Server 2003 下配置 MySQL 集群(Cluster)教程,本文先是讲解了原理知识,然后给出详细配置步骤和操作方法,需要的朋友可以参考下
    2015-06-06
  • 最新版MySQL5.7.19解压版安装指南

    最新版MySQL5.7.19解压版安装指南

    这篇文章主要介绍了最新版MySQL5.7.19解压版安装指南,需要的朋友可以参考下
    2017-08-08

最新评论