docker-compose启动mysql
文章目录
前言
1)本文分三个部分:
- 启动一个测试/开发级别的数据库。
- 启动一个生产级别的数据库
- 开发环境的一个自动化方案。让开发人员在宿主机上随时快速启动一个mysql数据库。
2)其他相关文档
- 生产高可用集群: 《helm启动mysql-ha》
- 其他部署方式:《docker-compose启动mysql》、《helm启动单节点mysql》
- web管理工具推荐 :《k8s启动phpmyadmin》
1. 测试/开发使用
优点:
- 简单
你不需要关于mysql的知识即可在一个服务器上启动很多mysql数据库。
简单使用中你也不需要更多关于容器的知识。 - 高效
即刻让一个数据库拔地而起。 - 干净
当你不用了,停止容器后不会有任何系统垃圾。
1.1 环境准备
已安装docker和docker-compose
1.2 docker-compose文件
创建mysql目录,目录下新建 docker-compose.yml 文件,内容如下:
version: '3'
services:
db:
image: 'docker.io/mysql:latest' #使用的镜像
restart: always
container_name: mysql #容器名
volumes:
- ./data:/var/lib/mysql #挂载目录,持久化存储
ports:
- '3306:3306'
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: "liubei@2021" #设置root用户的密码
1.3 启动mysql
在刚才创建的mysql 目录下执行命令
# docker-compose up -d
启动之后,数据库就可以正常使用了。
1.4 其他操作
- 查看服务状态
# docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------
mysql docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
- 停止服务
# docker-compose stop
Stopping mysql ... done
# docker-compose ps
Name Command State Ports
--------------------------------------------------------
mysql docker-entrypoint.sh mysqld Exit 0
- 重启容器
# docker-compose restart
- 关闭容器容器
# docker-compose down
Stopping mysql ... done
Removing mysql ... done
Removing network mysql_default
# docker-compose ps
Name Command State Ports
------------------------------
说明:可以看到,stop的时候,容器是Exit状态。而down之后容器被彻底删除了,但是不用担心,我们已经对数据做了持久话存储,up之后数据还在。
2 生产级使用
说明:
此处只讨论mysql的创建,不介绍高可用或主从架构。
如果要做主从的话只需要放一个脚本或sql在 2.4中的 init目录下。
思路简述:
创建mysql目录,下边创建如下文件和目录
- docker-compose.yml
生命周期和编排文件 - my.cnf
mysql配置文件,挂载出来便于修改,同时也是对配置的持久化存储。 - data目录
将msyql的数据持久化存储以避免执行 down 后数据丢失。 - init目录
用来放 mysql的初始化脚本,如果data目录中有文件,则再会执行初始化。
2.1 docker-compose 文件
version: '3'
services:
db:
image: 'docker.io/mysql:latest'
restart: always
container_name: mysql
volumes:
- ./data:/var/lib/mysql
- ./my.cnf:/etc/mysql/my.cnf
- ./init:/docker-entrypoint-initdb.d/
ports:
- '3306:3306' #“宿主机端口号:容器内端口号”
environment:
MYSQL_ROOT_PASSWORD: "liubei@2021"
MYSQL_USER: 'liubei' # 创建普通用户
MYSQL_PASSWORD: 'liubei@2021' #普通用户密码
MYSQL_DATABASE: 'liubeidb' #创建一个库
2.2 my.cnf
说明:msyql的配置文件,下边只是一个示例,你可以根据需要更改
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
2.3 data目录
可以不提前创建,容器启动的时候会自动创建并挂载。
2.4 init目录和初始化脚本
将启动脚本写放到init目录,给执行权限即可,可以是shell,可以是sql。如果你不需要就不放任何文件。数据库没有初始化时候会执行该脚本。
2.5 容器启动和操作
同上文 1.3 和 1.4,不赘述。
3 自动创建脚本
-
说明:
1)在宿主机中执行如下脚本,自动启动一个容器供开发测试使用。
2)执行过程中需要一些交互式输入:安装位置、root密码、使用端口、库名。 -
实际应用
我将这个脚本放在ftp服务器上,开发人员需要启动mysql的时候执行
# wget ftp://10.252.xxx.xxx/script/x'x'x'x.sh -O xxx.sh && bash xxx.sh
即可直接启动一个开发/测试级的 msyql数据库
#!/bin/bash
########## 定义变量 ##########
read -p "输入安装的位置(回车默认/usr/local/mysql ) " home_dir
if [ -z "${home_dir}" ];then
home_dir=/usr/local/mysql
fi
read -p "输入密码(回车默认liubei@2021):" mysql_passwd
if [ -z "${mysql_passwd}" ];then
mysql_passwd="liubei@2021"
fi
read -p "输入端口(默认3306):" mysql_port
if [ -z "${mysql_port}" ];then
mysql_port=3306
fi
read -p "新建库(默认liubeidb):" mysql_db
if [ -z "${mysql_db}" ];then
mysql_db=liubeidb
fi
############## yml文件 ##################
mkdir ${home_dir} -p
cat > ${home_dir}/docker-compose.yml << EOF
version: "3.1"
services:
mysql:
image: docker.io/mysql:latest
environment:
MYSQL_ROOT_PASSWORD: ${mysql_passwd}
MYSQL_DATABASE: ${mysql_db}
TZ: Asia/Shanghai
restart: always
ports:
- ${mysql_port}:3306
volumes:
- ./data:/var/lib/mysql
EOF
cd ${home_dir}
docker-compose up -d
docker ps
posted on 2021-08-14 12:55 运维开发玄德公 阅读(304) 评论(0) 编辑 收藏 举报 来源