从零开始学docker(四)-安装mysql及主从配置(一)

mysql

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

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

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

​

mysql架构图

引擎

MySQL中的存储引擎层主要负责数据的写入和读取,与底层的文件进行交互。值得一提的是,MySQL中的存储引擎是插件式的,服务器中的查询执行引擎通过相关的接口与存储引擎进行通信,同时,接口屏蔽了不同存储引擎之间的差异。MySQL中,最常用的存储引擎就是InnoDB 和MyISAM。

mysql支持的引擎

查询数据库使用引擎命令:

sql 复制代码
show ENGINES;

查询存储引擎

sql 复制代码
mysql> show variables like '%storage_engine';
+---------------------------------+-----------+
| Variable_name                   | Value     |
+---------------------------------+-----------+
| default_storage_engine          | InnoDB    |
| default_tmp_storage_engine      | InnoDB    |
| internal_tmp_mem_storage_engine | TempTable |
+---------------------------------+-----------+
InnoDB与MyISAM的区别
特性 InnoDB MyISAM
事务安全 支持 无
存储限制 64TB 有
空间使用 高 低
内存使用 高 低
插入数据的速度 低 高
对外键的支持 支持 无

mysql安装

在docker容器中安装mysql数据库。

mysql挂载文件夹

在/usr/local/先创建software文件夹,再在software下创建mysql文件夹,文件结构如下

创建配置目录

shell 复制代码
 mkdir -p /usr/local/software/mysql

切换文件夹到mysql,并创建三个子文件夹,子文件夹中创建 conf, data 子文件夹

shell 复制代码
[root@localhost ~]# cd /usr/local/software/mysql
[root@localhost mysql]# pwd
/usr/local/software/mysql
[root@localhost mysql]# mkdir -p 3306/conf 3306/data
[root@localhost mysql]# mkdir -p 3310/conf 3310/data
[root@localhost mysql]# mkdir -p 3311/conf 3311/data
[root@localhost mysql]# ll
总用量 0
drwxr-xr-x. 4 root root 30 7月   2 11:11 3306
drwxr-xr-x. 4 root root 30 7月   2 11:08 3310
drwxr-xr-x. 4 root root 30 7月   2 11:09 3311

拷贝my.cnf文件到conf文件夹下

查询拉取mysql镜像

查询镜像

docker search mysql

拉取mysql镜像到本地(linux)

docker pull 镜像名称:版本号

复制代码
docker pull mysql

查询镜像检查是否已下载到本地

docker image ls

创建运行mysql主(master)容器

创建容器并运行
序列 参数 解释
1 -i 以交互模式运行容器
2 -t 为容器重新分配一个伪输入终端
3 --name 容器名称
4 --privileged 设置容器公开权限(默认为true)
5 -p :映射端口 容器内置端口(mysql默认端口为3306)
6 --network 自定义的docker网络名称
7 --ip 自定义网络中的ip地址
8 -v linux挂载文件夹/文件和容器内路径的映射
9 -e 容器的环境变量(设置mysql默认用户名&密码)
10 -d 后台运行容器,并返回容器ID

tips: ff_docket_net是之前自定义的docker网络。

并定义当前容器的ip是172.18.0.2(ip地址可以安装自定义的网络自行分配)。

shell 复制代码
docker run -it \
--name mysql_3306 \
--privileged \
-p 3306:3306 \
--network ff_docket_net \
--ip 172.18.0.2 \
-v /usr/local/software/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/software/mysql/3306/data:/var/lib/mysql \
-v /usr/local/software/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
进入容器

进入容器实质上也是进入了一个linux环境。

docker exec

  • -it:以交互模式运行容器 ,为容器重新分配一个伪输入终端。
  • bash: bash(GNU Bourne-Again Shell)是最常用的一种shell(运行在终端的互动程序)。
shell 复制代码
 docker exec -it mysql_3306 bash
容器中运行mysql客户端

登录mysql客户端: mysql -u 用户名 -p密码

如果登录成功,则docker安装mysql成功。

查看容器内部ip

shell 复制代码
[root@localhost conf]# docker inspect mysql_3306 |grep IPA
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAMConfig": {
                    "IPAddress": "172.18.12.2",
退出容器,防火墙开放端口
退出容器

容器内: exit

shell 复制代码
root@1b32ebb973d1:/# exit
开放指定端口

firewall-cmd --zone=public --add-port=端口号/tcp --permanent

--zone: public 公开端口

--add-port: 端口号/协议名称

--permanent: 永久开放

shell 复制代码
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重新加载防火墙

firewall-cmd --reload

shell 复制代码
 firewall-cmd --reload 
查看开放的端口号

firewall-cmd --

shell 复制代码
[root@localhost conf]# firewall-cmd --zone=public --list-ports 
3306/tcp
相关推荐
蛋蛋的就会顺顺的5 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
mister_guo6 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
需要8266 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡6 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
Lost_the_wind8 小时前
MySQL学习笔记五
mysql
伯恩bourne8 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_8 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs9 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲9 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友