Docker中配置MySql环境

news2025/3/10 21:26:17

目录

一、简单安装

1. 首先从Docker Hub中拉取镜像

2. 启动尝试创建MySQL容器,并设置挂载卷。

3. 查看mysql8这个容器是否启动成功

4. 如果已经成功启动,进入容器中简单测试

4.1 进入容器

4.2 登录mysql中 

4.3 进行简单添加查找测试

二、主从复制安装

2.1 主服务创建配置

1. 主从服务容器创建,并且配置

2. 创建配置文件并设置参数

3. 重启容器使得配置生效

4. 进入容器内,进行主服务中进行设置

4.1 进入容器

4.2 创建数据同步用户,并给同步用户授权

4.3 查看所有用户的权限

4.4 查看MySQL主服务器的当前状态,包括二进制日志文件和位置

2.2 从服务创建配置

1. 从服务容器创建,并且配置

2. 创建配置文件并设置参数

3. 重启容器使得配置生效

4. 进入容器内,进行从服务中进行设置

4.1 进入容器

4.2 配置从服务器,指定主服务器

4.3 启动 MySQL 主从复制

4.4 查看 MySQL 主从复制状态

2.3 安装中的遇到的问题

2.4 配置完成,进行简单测试

1. 在主服务器中创建并添加数据

2. 在从服务器中查询数据,是否同步

3. 测试结果


一、简单安装

1. 首先从Docker Hub中拉取镜像

这里我要安装的是mysql8版本。

docker pull mysql:8.0.27

2. 启动尝试创建MySQL容器,并设置挂载卷。

docker run -p 3306:3306 \
           --name mysql8 \
           --privileged=true \
           -v /app/mysql8/log:/var/log/mysql \
           -v /app/mysql8/data:/var/lib/mysql \
           -v /app/mysql8/conf:/etc/mysql/conf.d \
           -v /app/mysql8/files:/var/lib/mysql-files \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -d mysql:8.0.27
  • --name mysql8: 为容器指定一个名称,这里是 mysql8
  • --privileged=true: 赋予容器更多的权限。在一般情况下,尽量避免使用 --privileged,因为它会赋予容器更多的权限,可能会带来一些安全风险。
  • -v /app/mysql8/log:/var/log/mysql: 将主机上的 /app/mysql8/log 目录映射到容器内的 /var/log/mysql,用于存储MySQL的日志文件。
  • -v /app/mysql8/data:/var/lib/mysql: 将主机上的 /app/mysql8/data 目录映射到容器内的 /var/lib/mysql,用于持久化存储MySQL的数据。
  • -v /app/mysql8/conf:/etc/mysql/conf.d: 将主机上的 /app/mysql8/conf 目录映射到容器内的 /etc/mysql/conf.d,用于提供自定义的MySQL配置文件。
  • -v /app/mysql8/files:/var/lib/mysql-files: 将主机上的 /app/mysql8/files 目录映射到容器内的 /var/lib/mysql-files,用于存储MySQL的文件。
  • -e MYSQL_ROOT_PASSWORD=123456: 设置MySQL root用户的密码为 123456
  • -d: 后台运行容器。

3. 查看mysql8这个容器是否启动成功

docker ps

4. 如果已经成功启动,进入容器中简单测试

4.1 进入容器

docker exec -it mysql8 /bin/bash

4.2 登录mysql中 

mysql -uroot -p123456

4.3 进行简单添加查找测试

CREATE DATABASE mydatabase;

USE mydatabase;

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

INSERT INTO users (username, email) VALUES
('john_doe', 'john@example.com'),
('jane_smith', 'jane@example.com'),
('bob_jones', 'bob@example.com');

SELECT * FROM users; 

二、主从复制安装

2.1 主服务创建配置

1. 主从服务容器创建,并且配置

ps:这里也默认使用mysql8版本进行安装。

docker run -p 3307:3306 \
           --name mysql-master \
           --privileged=true \
           -v /app/mysql-master/log:/var/log/mysql \
           -v /app/mysql-master/data:/var/lib/mysql \
           -v /app/mysql-master/conf:/etc/mysql/conf.d \
		   -v /app/mysql-master/files:/var/lib/mysql-files \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -d mysql:8.0.27
  • docker run: 启动一个新的Docker容器。
  • -p 3307:3306: 将主机的3307端口映射到容器的3306端口,这样可以通过主机的3307端口访问MySQL服务。
  • --name mysql-master: 为容器指定一个名称,这里是 mysql-master
  • --privileged=true: 赋予容器更高的权限。注意,一般情况下最好避免使用 --privileged,因为它可能会引入一些潜在的安全风险。
  • -v /app/mysql-master/log:/var/log/mysql: 将主机上的 /app/mysql-master/log 目录映射到容器内的 /var/log/mysql,用于存储MySQL的日志文件。
  • -v /app/mysql-master/data:/var/lib/mysql: 将主机上的 /app/mysql-master/data 目录映射到容器内的 /var/lib/mysql,用于持久化存储MySQL的数据。
  • -v /app/mysql-master/conf:/etc/mysql/conf.d: 将主机上的 /app/mysql-master/conf 目录映射到容器内的 /etc/mysql/conf.d,用于提供自定义的MySQL配置文件。
  • -v /app/mysql-master/files:/var/lib/mysql-files: 将主机上的 /app/mysql-master/files 目录映射到容器内的 /var/lib/mysql-files,用于存储MySQL的文件。
  • -e MYSQL_ROOT_PASSWORD=123456: 设置MySQL root用户的密码为 123456
  • -d: 以后台模式运行容器。
  • mysql:8.0.27: 使用的MySQL镜像的标签,这里是MySQL 8.0.27版本

2. 创建配置文件并设置参数

vim /app/mysql-master/conf/my.cnf
[mysqld]
## 设置server_id, 同一个局域网中需要唯一
server_id=1001
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!

3. 重启容器使得配置生效

docker restart mysql-master

4. 进入容器内,进行主服务中进行设置

4.1 进入容器
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
4.2 创建数据同步用户,并给同步用户授权
create user 'slave'@'%' identified by '123456';
grant replication slave, replication client on *.* to 'slave'@'%';
flush privileges;

4.3 查看所有用户的权限
SELECT user, host, authentication_string, Grant_priv, Super_priv, Create_priv, Insert_priv, Update_priv, Delete_priv, Select_priv FROM mysql.user;

 得到这样得结果

4.4 查看MySQL主服务器的当前状态,包括二进制日志文件和位置
show master status;

参数说明:

File(文件)

表示当前正在写入的二进制日志文件的名称

Position(位置)

表示在二进制日志文件中的当前写入位置

Binlog_Do_DB

一个逗号分隔的数据库列表,表示正在复制的二进制日志事件应用于哪些数据库

Binlog_Ignore_DB

一个逗号分隔的数据库列表,表示正在复制的二进制日志事件不应用于哪些数据库

Executed_Gtid_Set

表示已经执行的 GTID(全局事务标识符)集合。在MySQL的 GTID 复制中

 

2.2 从服务创建配置

1. 从服务容器创建,并且配置

docker run -p 3308:3306 \
           --name mysql-slave \
           --privileged=true \
           -v /app/mysql-slave/log:/var/log/mysql \
           -v /app/mysql-slave/data:/var/lib/mysql \
           -v /app/mysql-slave/conf:/etc/mysql/conf.d \
		   -v /app/mysql-master/files:/var/lib/mysql-files \
           -e MYSQL_ROOT_PASSWORD=123456 \
           -d mysql:8.0.27

2. 创建配置文件并设置参数

vim /app/mysql-slave/conf/my.cnf
[mysqld]
## 设置server_id, 同一个局域网内需要唯一
server_id=1002
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
slave_skip_errors=1062
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置只读(具有super权限的用户除外)
read_only=1

ps:在编写配置的时候,参数后不要留有空格,避免不必要的错误!!!

3. 重启容器使得配置生效

docker restart mysql-slave

4. 进入容器内,进行从服务中进行设置

4.1 进入容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -p123456
4.2 配置从服务器,指定主服务器

我这里使用的是 CentOS7,查看服务器地址

ifconfig

CHANGE MASTER TO
  MASTER_HOST = '192.168.153.133',       -- 主服务器的 IP 地址
  MASTER_USER = 'slave',                  -- 用于连接主服务器的用户名
  MASTER_PASSWORD = '123456',             -- 用于连接主服务器的密码
  MASTER_PORT = 3307,                     -- 主服务器的端口号
  MASTER_LOG_FILE = 'binlog.000011',      -- 主服务器的二进制日志文件
  MASTER_LOG_POS = 1193,                  -- 主服务器的二进制日志位置
  MASTER_CONNECT_RETRY = 30,              -- 如果连接失败,重试的时间间隔(秒)
  GET_MASTER_PUBLIC_KEY = 1;              -- 启用 SSL 模式,1 表示启用
4.3 启动 MySQL 主从复制
start slave;
 4.4 查看 MySQL 主从复制状态
# \G 可以将横向的结果集表格转换成纵向展示。
# slave status的字段比较多,纵向展示比友好
show slave status \G;

主要查看 Slave_IO_Running 和 Slave_SQL_Running是否为 Yes 状态。

ps:如果在安装中遇到问题可以查看下面这篇文章  ↓↓↓ ↓↓↓ 

2.3 安装中的遇到的问题

如果在安装过程中遇到问题,可以查看这篇文章,这是我遇到的一些问题和解决方案。

Docker中安装MySql的遇到的问题icon-default.png?t=N7T8http://t.csdnimg.cn/ujsL1

2.4 配置完成,进行简单测试

1. 在主服务器中创建并添加数据

CREATE DATABASE IF NOT EXISTS mydatabase;

USE mydatabase;

CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);


INSERT INTO users (username, email) VALUES
    ('alice_white', 'alice@example.com'),
    ('charlie_brown', 'charlie@example.com'),
    ('emma_jones', 'emma@example.com');

select * from users;

2. 在从服务器中查询数据,是否同步

show databases;

use mydatabase;

select * from users;

3. 测试结果

主从服务器数据同步 

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

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

相关文章

Linux实验记录:使用Apache的虚拟主机功能

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 正文: 目录 前言: 正文&…

行业报告 | 工业机器人发展研报

原创 | 文 BFT机器人 工业机器人是一种能够自动执行任务的机器装置,是靠自身动力和控制能力来实现各种功能的一种机器。在工业生产过程中,可以大幅提高生产效率和产品质量。 随着科技的不断进步,工业机器人已经成为现代制造业的重要组成部分…

【Unity3D小技巧】Unity3D中UI控制解决方案

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 在开发中总是会控制UI界面,如何优雅的控制UI界面是…

亚马逊精品广告推广怎么做?亚马逊怎么看精品广告推广?站斧浏览器

亚马逊精品广告推广怎么做? 对于想要在亚马逊平台上进行精品广告推广的商家来说,以下是一些常见的操作步骤和注意事项。 首先,商家需要在亚马逊广告平台注册并创建广告账户。亚马逊广告平台提供了专门的自助式广告管理工具,商家可以通过该…

数据结构-图的最小生成树

最小生成树介绍 最小生成树(Minimum Cost Spanning Tree)是代价最小的连通网的生成树,即该生成树上的边的权值和最小 最小生成树的性质: 必须使用且仅使用连通网中的n-1条边来联结网络中的n个顶点; 不能使用产生回路的边; 各…

linux vim 异常退出 异常处理 交换文件

交换文件 *.swp 格式 同时是隐藏的 如在vim一个文件, 在没有正常退出, 如直接断开连接 在次编辑这个文件 会出现下图的错误 解决方案: 直接删除这个交换文件即可 rm -fr .zen.txt.swp

css3 属性 backface-visibility 的实践应用

backface-visibility 是一个用于控制元素在面对屏幕不同方向时的可见性的CSS3特性。它有两个可能的值: visible:当元素不面向屏幕(即背面朝向用户)时,元素的内容是可以被看到的。hidden:当元素不面向屏幕…

【计算机网络】Socket的SO_REUSEADDR选项与TIME_WAIT

SO_REUSEADDR用于设置套接字的地址重用。当一个套接字关闭后,它的端口可能会在一段时间内处于TIME_WAIT状态,此时无法立即再次绑定相同的地址和端口。使用SO_REUSEADDR选项可以允许新的套接字立即绑定到相同的地址和端口,即使之前的套接字仍处…

如何使用Linux Archcraft结合内网穿透实现SSH远程连接

📑前言 本文主要是使用Linux Archcraft结合内网穿透实现SSH远程连接的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 &#…

过年了,程序员们,请多关照自己!休息是为了走得更远!

文章目录 过年了,程序员们,请多关照自己!一、理解“卷”背后的代价二、休息是为了走得更远三、关注健康,远离“过劳”四、平衡工作与生活,追求全面发展 过年了,程序员们,请多关照自己&#xff0…

input框前面名字长短不一时,让上下input框对齐方法

没设置之前 设置之后&#xff1a; 代码如下&#xff1a; <style>div{width: 500px;}label {display: block; /* 设置 label 元素为块级元素 */text-align: right; /* 设置文本右对齐 */margin-bottom: 10px; /* 设置标签之间的间距 */} </style> </head><…

Aigtek射频功率放大器有哪些具体应用

射频功率放大器是一种用于增加射频信号功率的电子器件。它在众多领域中有着广泛的具体应用&#xff0c;下面安泰电子将详细介绍几个主要的应用领域。 无线通信&#xff1a;射频功率放大器在无线通信系统中扮演着重要的角色。在移动通信领域&#xff0c;如蜂窝网络和卫星通信系统…

Solidworks 与 MATLAB 联合仿真

本文主要讲解了“MATLAB与SolidWorks的联合仿真怎么实现”&#xff0c;文中的讲解内容简单清晰&#xff0c;易于学习与理解&#xff0c;下面请大家跟着小编的思路慢慢深入&#xff0c;一起来研究和学习“MATLAB与SolidWorks的联合仿真怎么实现”吧&#xff01; 下载插件。 1、…

linux免密登录的实现

ssh免密登录使用方便&#xff0c;关键没有了口令验证反倒规避了暴力破解或者被探测的风险。配置得当&#xff0c;使用ssh免密登录更加安全。在生产环境中应用和数据库服务器之间互相设置后使用方便&#xff0c;并且在第三方人员配置使用时不用告知对方密码。 第一步、ssh登录发…

Python itertools模块:生成迭代器(实例分析)

itertools 模块中主要包含了一些用于生成迭代器的函数。在 Python 的交互式解释器中先导入 itertools 模块&#xff0c;然后输入 [e for e in dir(itertools) if not e.startswith(_)] 命令&#xff0c;即可看到该模块所包含的全部属性和函数&#xff1a; >>> [e for …

RabbitMQ控制台的基本使用

启动RabbitMQ后&#xff0c;浏览器 http://localhost:15672 打开RabbitMQ的控制台页面后&#xff0c;登录默认账户guest。 一. 添加队列 控制台选择队列&#xff0c;然后选择添加队列&#xff0c;队列类型默认经典类型&#xff0c;然后输入队列名称&#xff0c;最后添加队列。…

JSP和JSTL板块:第三节 JSP四大域对象 来自【汤米尼克的JAVAEE全套教程专栏】

JSP和JSTL板块&#xff1a;第三节 JSP四大域对象 一、page范围二、request范围三、session范围四、application范围 在服务器和客户端之间、各个网页之间、哪怕同一个网页之内&#xff0c;总是需要传递各种参数值&#xff0c;这时JSP的内置对象就是传递这些参数的载具。内置对象…

JeecgBoot jmreport/loadTableData RCE漏洞复现(CVE-2023-41544)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

虫情监测设备能够自动识别病虫害

TH-CQ3S虫情监测设备的工作原理主要是通过高清摄像头拍摄农田的实时图像&#xff0c;利用图像识别技术对图像中的病虫害进行自动识别。一旦发现病虫害&#xff0c;设备会自动发出警报&#xff0c;并通过手机APP通知农民。农民可以根据设备提供的预测预报&#xff0c;及时采取防…

API攻击是什么?如何做好防范

API 攻击是针对应用程序接口的一种攻击手段&#xff0c;近年来逐渐成为网络安全领域的热点话题。攻击者主要针对应用程序接口中的漏洞或者错误进行API攻击&#xff0c;从而达到窃取敏感数据、进行恶意操作、破坏系统正常运行等恶意目的。 什么是API攻击&#xff1f; API 攻击是…