使用docker一键部署MySql数据库只需要3分钟

上周六,后台有个朋友留言,想搜索MySQL相关的docker部署文档,没找到,好嘛,既然没有我就写下。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

目录结构如下

请看我用dockerfile构建

FROM docker.io/centos:latest

MAINTAINER dockercore

RUN yum clean all

RUN yum install -y yum-plugin-fastestmirror yum-utils epel-release

RUN yum update -y

# utils

RUN yum install -y git hostname sudo less iproute psmisc net-tools \

bash unzip which tar passwd ed m4 patch rsync wget curl tcpdump telnet \

tar bzip2 unzip strace supervisor openssl openssh openssh-server \

openssh-clients util-linux inotify-tools

# dev

RUN yum install -y gcc-c++ libtool make gdb mariadb-devel snappy-devel \

boost-devel lz4-devel zlib-devel libcurl-devel libevent-devel \

libesmtp-devel libuuid-devel libcsv-devel cyrus-sasl-devel \

bzip2-devel libpqxx-devel libxml2-devel libxslt-devel libxslt-python \

libpng-devel jemalloc-devel fontconfig-devel pcre-devel

# deps

RUN yum install -y redis sqlite mariadb mariadb-server postgresql

# python

RUN yum install -y python-pip python-devel python-lxml python-setuptools

RUN mkdir /var/run/sshd

RUN ssh-keygen -t rsa -q -f /etc/ssh/ssh_host_rsa_key -P ""

RUN ssh-keygen -t dsa -q -f /etc/ssh/ssh_host_dsa_key -P ""

RUN ssh-keygen -t rsa -q -f /root/.ssh/id_rsa -P ""

RUN cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys

RUN echo 'root:123456' | chpasswd

RUN sed -i 's/.*session.*required.*pam_loginuid.so.*/session optional pam_loginuid.so/g' /etc/pam.d/sshd

RUN echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local

RUN localedef -i en_US -f UTF-8 en_US.UTF-8

RUN cp /usr/lib64/mysql/libmysqlclient* /usr/lib64/

RUN rm -rf etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN echo "bind '\"\e[A\":history-search-backward'" >> /root/.bashrc

RUN echo "bind '\"\e[B\":history-search-forward'" >> /root/.bashrc

RUN echo "export HISTTIMEFORMAT='%F %T '" >> /root/.bashrc

EXPOSE 22

RUN chmod u+s /usr/bin/ping

EXPOSE 3306

WORKDIR /usr/local/mysql

VOLUME ["/var/lib/mysql"]

VOLUME ["/etc/my.cnf.d"]

RUN mkdir -p /init

VOLUME ["/init"]

RUN yum clean all

ADD container-files /

RUN chmod +x /config/bootstrap.sh

RUN chmod +x -f /config/init/*.sh; exit 0

ENTRYPOINT ["/config/bootstrap.sh"]

docker-compose的书写格式如下 docker-compose.yml

version: '2'

services:

mariadb:

build: .

image: zailing/MySQL

container_name: MySQL

hostname: MySQL

privileged: true

read_only: false

tty: false

network_mode: "bridge"

ulimits:

nofile:

soft: 102400

hard: 102400

ports:

- "127.0.0.1:2238:22"

- "3306:3306"

volumes:

- /opt/docker/MySQL/data:/var/lib/mysql

- /opt/docker/MySQL/init:/init

- /opt/docker/MySQL/conf:/etc/my.cnf.d

environment:

- MYSQL_ROOT_PASSWORD=123456

最后 docker-compose up -d 启动实例,既可以完成部署。

MySQL物理文件组成详解

1. 逻辑结构

第一层:服务层(为客户端服务,做请求连接处理,授权认证,安全)

第二层:核心层(查询解析,分析,优化,缓存,提供内建函数,存储过程,视图) 第三层:存储引擎层(做存取数据)

2.日志文件

1)错误日志:Error Log

记录了MyQLServer运行过程中所有较为严重的警告和错误信息,以及MySQLServer 每次启动和关闭的详细信息。在默认情况下,系统记录错误日志

2)二进制日志Binary Log & Binary Log Index

name]”打开了记录的功能之后,MySQL会将所有修改数据

库数据的query以二进制形式记录到日志文件中。当然,日志中并不仅限于query

语句这么简单,还包括每一条query所执行的时间,所消耗的资源,以及相关的事务信息

所以binlog是事务安全的

3)更新日志:update log

其功能和 binlog 基本类似,从版本5.0 开始,MySQL 已经不再支持更新日志

4)查询日志:query log

记录了所有的 query,包括所有的 select,体积比较大,开启后对性能也有较大的影响, 所以请大家慎用该功能。 一般只用于跟踪某些特殊的sql 性能问题才会短暂打开该功能。

5)慢查询日志:slow query log

记录了语句执行的时刻,执行所消耗的时间,执行用户,连接主机等相关信息。分析满查询日志的工具程序mysqlslowdump, 用来帮助数据库管理人员解决可 能存在的性能问题

6)Innodb 的在线redo 日志:innodb redo log

Innodb是一个事务安全的存储引擎,其事务安全性主要就是通过在线redo

日志和记录在表空间中的undo信息来保证的。redo日志中记录了Innodb 所做的所有物理变更和事务信息,通过redo日志和undo信息,Innodb 保证了在任何情况下的事务安全性。

3.数据文件

简述:在MySQL中每一个数据库都会在定义好(或者默认)的数据目录下存在一个以

数据库名字命名的文件夹,用来存放该数据库中各种表数据文件。

1、“.frm”文件

与表相关的元数据(meta)信息都存放在“.frm”文件中,包括表结构的定

义信息等。不论是什么存储引擎,每一个表都会有一个以表名命名的“.frm”文

件。

2、“.MYD”文件

“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM

表都会有一个“.MYD”文件与之对应,同样存放于所属数据库的文件夹下,

和“.frm”文件在一起。

3、“.MYI”文件

“.MYI”文件也是专属于MyISAM 存储引擎的,主要存放MyISAM 表的索引相

关信息。

4、“.ibd”文件和ibdata 文件

这两种文件都是存放Innodb 数据的文件,之所以有两种文件来存放Innodb

的数据(包括索引),是因为Innodb 的数据存储方式能够通过配置来决定是使用

共享表空间存放存储数据,还是独享表空间存放存储数据。

由于知识点太多整理成导图-以下MySQL的核心技术导图

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180423G1VPBX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券