docker mysql 生产环境_如何部署Docker MySQL生产环境?

1 前言

Docker容器原则上是短暂的,如果容器被删除或损毁,数据或配置将丢失,所以上个章节部署的MySQL只适合于测试环境,由于生产的需求,本章将使用Docker卷机制持久保存Docker容器中创建的数据。

2 最佳实践

2.1 环境配置

2.1.1 系统环境配置

IP Address = 10.168.0.71

Host Name = any

OS = CentOS 7.6 x86_64

2.1.2 软件环境配置

2.2 非持久化方式启动MySQL

2.2.1 下载MySQL服务器Docker镜像

docker pull mysql/mysql-server:5.6

其他版本的下载,请使用以下命令,

docker pull mysql/mysql-server:5.5

docker pull mysql/mysql-server:5.6

docker pull mysql/mysql-server:5.7

docker pull mysql/mysql-server:8.0

docker pull mysql/mysql-server:latest

下载完毕后,你可以使用以下命令查看当前下载的镜像,

docker images

可见如下显示,

REPOSITORY TAG IMAGE ID CREATED SIZE

mysql/mysql-server 5.6 8fe1c25ccc38 6 weeks ago 218MB

2.2.2 初始化一个非持久化实例

docker run --name mysql1 -d mysql/mysql-server:5.6 --character-set-server=utf8 --collation-server=utf8_general_ci

启动实力后,可见如下显示,

87cb7f2615ff3f762332eb826566a566888e7ade0ecf5fe55cc4c462d7f2e9da

可使用如下命令查看正在运行的容器,

docker ps

可见如下显示,

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

18682cd5edea mysql/mysql-server:5.6 "/entrypoint.sh mysq…" About a minute ago Up About a minute (healthy) 3306/tcp mysql1

2.2.3 检查MySQL启动的log

docker logs mysql1

2.2.4 获取初始化密码

docker logs mysql1 2>&1 | grep -i "GENERATED ROOT PASSWORD:"

可见如下输出,

Entrypoint] GENERATED ROOT PASSWORD: 63JyseNLAsYf4vnydUS0D3x4NasF

注:以上密码为“[im4DdeRId3gOM0bAKIBzumJYBr”

2.2.5 从容器内部连接MySQL服务器

docker exec -it mysql1 mysql -uroot -p

然后,我们需要使用如下命令修改root密码才能继续,

alter user 'root'@'localhost' identified by 'rootpassword';

如果有以下错误提示,

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'rootpassword'' at line 1

请使用如下命令配置,

set password for 'root'@'localhost'=PASSWORD('rootpassword');

2.2.6 创建授权账号

grant all privileges on *.* to 'root'@'%' identified by "rootpassword";

flush privileges;

2.2.7 查询实例IP

docker inspect mysql1

可见如下显示,

[...]

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "e3134a755397c4841912004d8ecff4bf918f6484e9873e3da815946062e87940",

"EndpointID": "8ae10d4677c284e21523fbf4457aa8b0c2a297999a717d111f6b05c12a56fa0a",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:02",

"DriverOpts": null

}

}

[...]

注:参数”IPAddress”的声明即实例当前地址

2.2.8 测试登录

yum install -y mariadb

安装完客户端后,可使用如下命令测试,

mysql -uroot -p -h 172.17.0.2

2.3 持久化方式启动MySQL

2.3.1 持久化的说明

docker inspect mysql1

可见如下输出,

[...]

"Mounts": [

{

"Type": "volume",

"Name": "6757102195b9452306e48650023d366d2c3d72b51764878f08279bb58dca1cb2",

"Source": "/data/docker-runningdata/volumes/6757102195b9452306e48650023d366d2c3d72b51764878f08279bb58dca1cb2/_data",

"Destination": "/var/lib/mysql",

"Driver": "local",

"Mode": "",

"RW": true,

"Propagation": ""

}

[...]

如上所示,“docker inspect”命令所输出的JSON文件,

– “Mount”关键字声明Docker卷相关定义

– “Destination”关键字声明存于容器内部路径为“/var/lib/mysql”

– “Source”关键字声明存于物理主机的卷路径为“/data/docker-runningdata/volumes/6757102195b9452306e48650023d366d2c3d72b51764878f08279bb58dca1cb2/_data”

基于以上,如果需要持久保存数据,官方提供以下命令范式用于启动,

docker run --name=mysql1 \

--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \

--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \

-d mysql/mysql-server:tag

2.3.2 创建数据目录和配置文件目录

mkdir -p /data/docker/etc/mysql

mkdir -p /data/docker/data/

2.3.3 复制实例数据到本地

docker cp mysql1:/etc/my.cnf /data/docker/etc/mysql

docker cp mysql1:/etc/my.cnf.d /data/docker/etc/mysql

docker cp mysql1:/var/lib/mysql /data/docker/data/

2.3.4 停止并删除之前的实例

docker stop mysql1

docker rm mysql1

2.3.5 启动MySQL数据库实例

docker run --name=mysql1 \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf,dst=/etc/my.cnf \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf.d,dst=/etc/my.cnf.d \

--mount type=bind,src=/data/docker/data/mysql,dst=/var/lib/mysql \

-d mysql/mysql-server:5.6 \

--character-set-server=utf8 \

--collation-server=utf8_general_ci

2.3.6 测试登录

mysql -uroot -p -h 172.17.0.2

2.4 管理MySQL实例

2.4.1 使用shell管理MySQL服务器

docker exec -it mysql1 bash

可见如下命令提示符,

bash-4.2#

可使用如下命令查看MySQL的数据目录,

bash-4.2# ls /var/lib/mysql

可见如下提示,

auto.cnf ib_logfile0 ib_logfile1 ibdata1 mysql mysql.sock performance_schema test

2.4.2 管理MySQL容器的相关命令

docker start mysql1

docker restart mysql1

docker stop mysql1

docker rm mysql1

2.5 将容器加入一个特定的网络

2.5.1 创建容器间的网络

docker network create cmdschool-net

可以使用如下命令确认网络的创建,

docker network ls

可见如下显示,

NETWORK ID NAME DRIVER SCOPE

42120d142861 bridge bridge local

a44be59ebfd9 cmdschool-net bridge local

5bf4d2d3d1a6 host host local

e9ee5d7f4acc none null local

2.5.2 停止并删除之前配置的实例

docker stop mysql1

docker rm mysql1

2.5.3 使用新的参数连接Docker网络

docker run --name=mysql1 \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf,dst=/etc/my.cnf \

--mount type=bind,src=/data/docker/etc/mysql/my.cnf.d,dst=/etc/my.cnf.d \

--mount type=bind,src=/data/docker/data/mysql,dst=/var/lib/mysql \

--network=cmdschool-net \

-d mysql/mysql-server:5.6 \

--character-set-server=utf8 \

--collation-server=utf8_general_ci

注:留意“–network”参数

2.5.4 查询当前实例的IP

docker inspect mysql1

可见如下显示,

"Networks": {

"cmdschool-net": {

"IPAMConfig": null,

"Links": null,

"Aliases": [

"4e0f2027134c"

],

"NetworkID": "a44be59ebfd9319f7c0ae0dd26f4d41f0d576141481388346a0ff870ee2ed809",

"EndpointID": "76513bee3bddd2c80f611e93f003dbb6c9abd53d184ade5e35faf6bb3d19f3cf",

"Gateway": "172.19.0.1",

"IPAddress": "172.19.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:13:00:02",

"DriverOpts": null

}

}

注:参数”IPAddress”的声明即实例当前地址

2.5.5 测试登录

mysql -uroot -p -h 172.19.0.2

注:请自行安装mysql客户端

参阅文档

=================

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kali 切换root权限_Ubuntu 被曝严重漏洞:切换系统语言 + 输入几行命令,就能获取 root 权限...

公众号关注 “GitHubDaily”设为 “星标”,带你了解技术圈内新鲜事!来自量子位无需系统密码,就能添加新的 sudo 用户、获取 root 权限,事后还能删除不留痕迹。这是 GitHub 安全研究员 Kevin Backhouse 发现的一个 Ubuntu 系统大漏…

oracle定义变量sql赋值_ORACLE获取SQL绑定变量值的方法总结

本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点。在此梳理、总结一下这方面的知识点,方面日后查找、翻阅。方法1:查询V$SQLV$SQL视图中的BIND_DATA字段用来存储绑定变量的…

transition css_Transition 过渡

1:基本概念在一定时间内平滑的过渡,也就是圆滑的以动画效果改变css的属性值。它的过渡可以由鼠标点击、焦点获取或者失去、被点击事件或对元素的改变中触发;不能主动触发,只能被动触发。常用的基本属性有:Transition-d…

jdbc mysql分页_JDBC【数据库连接池、DbUtils框架、分页】

1.数据库连接池什么是数据库连接池简单来说:数据库连接池就是提供连接的。。。为什么我们要使用数据库连接池数据库的连接的建立和关闭是非常消耗资源的频繁地打开、关闭连接造成系统性能低下编写连接池编写连接池需实现java.sql.DataSource接口创建批量的Connectio…

python读写文件操作_详解Python文件读写操作

读文件 打开文件(文件需要存在)#打开文件 f open("data.txt","r") #设置文件对象 print(f)#文件句柄 f.close() #关闭文件 #为了方便,避免忘记close掉这个文件对象,可以用下面这种方式替代 with open(data.t…

keyloadtool_phoenix 利用CsvBulkLoadTool 批量带入数据并自动创建索引

需要先创建表:CREATE TABLE IF NOT EXISTS population (state CHAR(2) NOT NULL, city VARCHAR NOT NULL, population BIGINTCONSTRAINT my_pk PRIMARY KEY (state, city));在phoenix 目录下执行hadoop jar /home/phoenix-4.6.0-HBase-1.0-bin/phoenix-4.6.0-HBase-…

【cloud Alibaba】(三)流量控制、熔断降级(下)——Sentinel

各位小伙伴们大家好,欢迎来到这个小扎扎的spring cloud专栏,在这个系列专栏中我对B站尚硅谷阳哥的spring cloud教程进行一个总结,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛ 💡Sen…

python gui入门的例子_Python GUI编程之Tkinter入门之道

相信刚学习使用Python进行GUI编程的时候,肯定都会听过Tkinter,毕竟是standard Python interface to the Tk GUI toolkit.用来写一些小程序还是很方便的。但如果是刚接触GUI编程的话肯定是被官方文档搞的有些懵,毕竟还没弄清楚套路。之前使用过…

@async 默认线程池_SpringBoot 线程池的使用

Java大联盟帮助万千Java学习者持续成长关注作者|Musclehengblog.csdn.net/Muscleheng/article/details/81409672前言最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信。考虑发短信…

mysql 横向扩展 中间件_mysql-proxy数据库中间件架构 | 架构师之路

一、mysql-proxy简介mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server。它使用mysql协议,任何使用mysql-client的上游无需修改任何代码,即可迁移至mysql-proxy上。mysql-…

python selenium对象怎么序列化_python selenium爬取斗鱼

不加延迟报错selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:”xpath”,”selector”:”.//span[class”DyListCover-hot”]”}(Session info: chrome80.0.3987.122)最开始以为是版本问题,不…

神经网络的全连接层_深度神经网络全连接层

一、概念全连接层一般在网络的最后部分做分类输出,全连接层的有m个输入和n个输出,每一个输出都和所有的输入相连,相连的权重w都是不一样的,同时每一个输出还有一个bias。二、前向全连接假设输入是4,输出是4&#xff0c…

vs 选定内容没有属性页_从智能单品,到全屋智能:2019中国智能家居发展白皮书【附82页PPT】...

2019年,智能家居行业在技术、市场和行业的变革中迎接新的挑战和机遇。一方面,AI、IoT、边缘计算全面赋能智能家居;另一方面,中国的房地产行业正在从上半场的“增量开发”,切换到下半场的“存量经营”、“楼盘精装化”政…

python决策树的应用_机器学习-决策树实战应用

1.下载2.安装:双击3.创建桌面快捷方式安装目录\bin文件夹\:找到gvedit.exe文件右键 发送到桌面快捷方式,如下图:4.配置环境变量将graphviz安装目录下的bin文件夹添加到Path环境变量中:5.验证是否安装并配置成功进入win…

【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题

写在前面:​ 本人是在学习B站黑马程序员SSM框架教程视频的时候在P37集遇到了问题,如果不解决还没办法往下接着听,老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题,全在这篇博客中得到了解决 😢解决上…

python人脸识别源码_Python 抖音机器人,让你找到漂亮小姐姐

本项目作者沉迷于抖音无法自拔,常常花好几个小时在抖音漂亮小姐姐身上。本着高效、直接地找到漂亮小姐姐的核心思想,我用 Python ADB 做了一个 Python 抖音机器人 Douyin-Bot。特性自动翻页颜值检测人脸识别自动点赞自动关注随机防 Ban自动评论原理打开…

thinkphp josn mysql_ThinkPHP:JSON字段类型的使用(ORM)

ThinkPHP5.1版本正式发布已经有一段时间了,我会陆续给大家介绍其中的新特性。今天要给大家介绍的是一个可能很多用户还不了解的一个特性:JSON字段数据支持。不过首先注意一点,本篇内容中描述的JSON字段数据的支持是从V5.1.4版本引入的。由于包…

获取http地址如何从上面抓取图片_用 Python 自动抓取妹子图

目录前言Media Pipeline启用Media Pipeline使用 ImgPipeline抓取妹子图瞎比比与送书后话前言我们在抓取数据的过程中,除了要抓取文本数据之外,当然也会有抓取图片的需求。那我们的 scrapy 能爬取图片吗?答案是,当然的。说来惭愧&a…

MySQL摘要_mysql摘要

2011-04-15(1)mysqld关闭命令:mysqladmin -u root shutdown。注意:windows命令以enter结束不是;,mysql命令行才是(2)mysql终端接入,修改mysql.user表内容,添加授权用户。insert into mysql.user(Host,User,Password,ss…