Docker中运行一个mysql

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 尽管不希望在docker中运行mysql,但是自己玩确实方便~~~

服务器环境:centos7

一、docker安装

1.1 安装

摘自:https://developer.aliyun.com/article/110806

# step 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CEsudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务sudoservice docker start注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。# vim /etc/yum.repos.d/docker-ce.repo#   将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1## 安装指定版本的Docker-CE:# Step 1: 查找Docker-CE的版本:# yum list docker-ce.x86_64 --showduplicates | sort -r#   Loading mirror speeds from cached hostfile#   Loaded plugins: branch, fastestmirror, langpacks#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable#   docker-ce.x86_64            17.03.1.ce-1.el7.centos            @docker-ce-stable#   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable#   Available Packages# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)# sudo yum -y install docker-ce-[VERSION]# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。# yum list docker-ce-selinux- --showduplicates | sort -r# sudo yum -y install docker-ce-selinux-[VERSION]# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令# 经典网络:# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo# VPC网络:# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo

1.2 配置加速镜像

配置阿里云的加速镜像

https://cr.console.aliyun.com/

sudomkdir-p /etc/docker
sudotee /etc/docker/daemon.json <<-'EOF'{
"registry-mirrors": ["加速镜像地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

二、docker中安装mysql

2.1 查询mysql的各个版本

docker search mysql

2.2 拉取镜像

通过pull命令去拉取镜像,默认拉取的是latest版本,可以通过冒号来指定版本,如拉取5.7版本的mysql

docker pull mysql:5.7

可以通过https://hub.docker.com/_/mysql去查询版本号

image.png

2.3 查看拉取的镜像

docker images

2.4 新建一个mysql的配置文件

要运行mysql,执行docker run一下就可以了

但是,我们希望做一些配置,如:指定数据库data的存放位置,不区分大小写

这是我们新建一个my.cnf

mkdir-p /data/mysql/config
vim my.cnf

my.cnf中添加参数

[mysqld]
user=mysql
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1event_scheduler=ON
default-time-zone ='+8:00'

其中

  • event_scheduler=ON 表示开启事件支持
  • lower_case_table_names=1 表示数据库不区分大小写
  • default-time-zone = '+8:00' 表示使用中国时区

2.5 docker运行mysql

docker run -d-p3306:3306  -eMYSQL_ROOT_PASSWORD=123456--name mysql -v /data/mysql/config/my.cnf:/etc/mysql/my.cnf -v /data/mysql/db:/var/lib/mysql mysql:5.7

各个参数的说明

  • run:运行一个容器
  • -d:设置容器运行模式为后台运行
  • -p:进行端口映射,用于暴露给外界让其访问
  • -e:初始化用户密码
  • --name:自定义容器名称
  • -v:挂载
  • 第一个-v:挂载我们自定义的配置文件
  • 第二个-v:挂载数据库的data存放位置
2.5.1 docker中mysql的时区修改

不知道为什么上面的指定参数default-time-zone = '+8:00'没有生效

找了其他几种方法吧

  1. 启动容器时设置
-eTZ=Asia/Shanghai
  1. 容器内永久修改
# 进入容器docker exec -it mysql bash# 查看当前时区date -R# 修改时区cp /usr/share/zoneinfo/PRC /etc/localtime
# 或者ln-sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 退出容器exit# 重启容器docker restart mysql
  1. mysql中临时修改,重启失效
# 查看时间
select now();# 修改为北京时间
mysql>set global time_zone ='+8:00';Query OK,0 rows affected (0.00 sec)mysql>set time_zone ='+8:00';Query OK,0 rows affected (0.00 sec)mysql> flush privileges;Query OK,0 rows affected (0.00 sec)

2.6 查看运行的容器

使用docker ps查看,类似于linuxps,查看全部使用docker ps -a

进入容器内部,使用mysql的相关命令

# 进入容器名称为mysql的内部docker exec -it mysql /bin/bash
mysql -uroot-p# 在mysql的命令行中进行操作show databases;
# 退出exit

2.7 mysql相关配置

2.7.1 创建一个用户

创建一个用户,如:testuser/123456

# 限定的IP地址,可以用通配符%替换,代表任何IP都可以
mysql>CREATE USER 'testuser'@'限定的IP地址' IDENTIFIED BY'123456';2 Query OK,0 rows affected (0.02 sec)# 设置这个用户的登录权限
# 设置testuser用户允许本地登录
grant all privileges on*.* to testuser@localhost identified by"123456";# 设置testuser用户允许任何任何ip登录
grant all privileges on*.* to testuser@"%" identified by"123456";# 进行flush
# mysql新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表
# 否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效
flush privileges;
2.7.2 设置用户的数据库访问权限
# 设置用户testuser,只能访问数据库test_db的表user_infor
# *.*代表任何数据库的任何表
# 数据库中的其他表均不能访问 ;
grant all privileges on test_db.user_infor to testuser@localhost identified by"123456";
2.7.3 设置用户操作权限
# 设置用户testuser,拥有所有的操作权限,也就是管理员 ;
grant all privileges on*.* to testuser@localhost identified by"123456" WITH GRANT OPTION;# 设置用户增删改查的权限
grant select,insert,update,deleteon*.* to testuser@localhost identified by"123456";
2.7.4 关闭root用户的远程登录
# 切换到mysql数据库
use mysql;deletefrom user where user ='root'and host ='%';select user,host from user;#刷新权限
flush privileges ;

2.8 其他相关

# 查看容器docker container ls# 查看所有容器docker container ls-a# 删除容器docker rm [容器名称or容器的id]
docker rm mysql
docker rm 88f9f37e7de8
# 删除容器前先关闭容器docker stop mysql
# 删除镜像,同样删除镜像之前需要stop依赖这个镜像的容器docker rmi [image id]

2.9 在安装过程中遇到的坑

run一个容器时,发现没有网络

image.png

查了一番之后,说是没有开启转发,网桥配置完之后,需要开启转发,不然容器启动后,就没有网络,配置/etc/sysctl.conf,添加net.ipv4.ip_forward=1

# 编辑文件vim /etc/sysctl.conf
# 配置转发net.ipv4.ip_forward=1# 重启服务,让配置生效systemctl restart network
# 查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功sysctl net.ipv4.ip_forward
# 重启docker服务service docker restart


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
6月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
913 82
|
5月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
265 28
|
5月前
|
Ubuntu 关系型数据库 MySQL
在Ubuntu系统的Docker上安装MySQL的方法
以上的步骤就是在Ubuntu系统的Docker上安装MySQL的详细方法,希望对你有所帮助!
579 12
|
6月前
|
SQL 数据库 Docker
【赵渝强老师】在Docker中运行达梦数据库
本文介绍了在Docker容器中部署达梦数据库(DM 8)的具体步骤,包括创建文件夹、下载安装包、导入镜像、启动容器、登录数据库及查看状态等操作。同时,通过视频讲解辅助理解。文中还分析了将数据库服务容器化的潜在问题,如数据安全性、硬件资源争用、网络带宽占用和额外隔离带来的挑战,指出数据库服务在生产环境中可能不适合容器化的原因。
338 4
【赵渝强老师】在Docker中运行达梦数据库
|
5月前
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
362 10
|
6月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
282 16
|
7月前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
672 42
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
639 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
247 62