Docker中配置MySql环境
目录
一、简单安装
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 TOMASTER_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的遇到的问题http://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. 测试结果
主从服务器数据同步
相关文章:

Docker中配置MySql环境
目录 一、简单安装 1. 首先从Docker Hub中拉取镜像 2. 启动尝试创建MySQL容器,并设置挂载卷。 3. 查看mysql8这个容器是否启动成功 4. 如果已经成功启动,进入容器中简单测试 4.1 进入容器 4.2 登录mysql中 4.3 进行简单添加查找测试 二、主从复…...

智慧文旅:驱动文化与旅游融合发展的新动力
随着科技的快速发展和人们生活水平的提高,文化和旅游的融合成为了时代发展的必然趋势。智慧文旅作为这一趋势的引领者,通过先进的信息技术手段,推动文化与旅游的深度融合,为产业的发展注入新的活力。本文将深入探讨智慧文旅如何成…...

wordpress怎么做产品展示站?推荐使用MOK主题和ent主题
大多数WordPress站点都是个人博客网站,主要以文章性质的图文为主。不过部分站长想要用WordPress搭建一个产品展示站,应该怎么做呢? 其实,WordPress可以用来建立各种各样的博客网站,包括个人博客、企业网站、商城、影视…...

8、应急响应-战前溯源反制主机蜜罐系统HFishHIDSElkeidWazuh
用途:个人学习笔记,欢迎指正 目录 背景: 一、潮源反制-平台部署-蜜罐-Hfish 二、溯源反制-平台部署-HIDS-Wazuh 三、溯源反制-平台部署-HlDS-Elkeid-hub 背景: 攻击者对服务器存在着各种威胁行为,作为安全人员&am…...

LeetCode:283. 移动零
283. 移动零 1)题目2)代码方法一:两层for循环方法二:使用双指针 3)结果方法一结果方法二结果 1)题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的…...

游戏开发丨基于Panda3D的迷宫小球游戏
文章目录 写在前面Panda3D程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于panda3d的迷宫中的小球游戏 所需环境 pythonpycharm或anacondapanda3d 下载地址 https://download.csdn.net/download/m0_68111267/88792121 Panda3D Panda3D是一种开放源代码…...

微信小程序 安卓/IOS兼容问题
一、背景 在开发微信小程序时,不同的手机型号会出现兼容问题,特此记录一下 二、安卓/IOS兼容问题总结 2.1、new Date()时间转换格式时,IOS不兼容 问题:在安卓中时间格式2024-1-31 10:10:10,但是在iOS中是不支持 &q…...

结构体--共用体--枚举 之难点——链表 奋力学习嵌入式的第十六天
结构体 注意: 1.结构体类型 可以定义在 函数里里面 但是此时作用域就被限定在该函数中 2.结构体定义形式 //形式一 限定一类型 后定义变量 struct stu { ... }; struct stu s; //形式二 定义类型的同时 定义变量 struct stu { ... }s1,s2,*s3,s4[10]; struc…...
猜凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这…...

python-自动化篇-运维-实现读取日志文件最后一行的时间
文章目录 1. 使用Python打开日志文件2.python读取文件最后一行两种方式3.读取当前时间,进行两者相减,超时报警4.将内容推送到企业微信5. 关闭日志文件整体代码 1. 使用Python打开日志文件 在开始实时读取日志文件之前,我们首先需要打开一个日…...

QT SQL
QT SQL模块提供数据库编程的支持,支持多种常见的数据库:MySQL\Oracle\MS SQL Server\SQLite等。SQL模块包含多个类,可以实现:数据库连接、SQL语句执行、数据获取与界面显示 等功能。数据 与 界面间用Model\View架构。 一、 二、Q…...
C++(20):通过concept及nlohmann将数据转换为字符串
nlohmann可以自动兼容将C++的很多原生类型转换为json,甚至自定义类型也不需要太复杂的操作就可以转换为json,可以利用这一点将数据转换为string: #include <nlohmann/json.hpp> #include <string> #include <vector> #include <tuple> #include <…...

Transformer 自然语言处理(四)
原文:Natural Language Processing with Transformers 译者:飞龙 协议:CC BY-NC-SA 4.0 第十章:从头开始训练变换器 在本书的开头段落中,我们提到了一个名为 GitHub Copilot 的复杂应用,它使用类似 GPT 的…...

BRAIN :帕金森病中与痴呆相关的动态功能连接改变
fMRI成像手段由于其在高空间分辨率的优势获得了疾病研究的青睐,越来越多的疾病研究使用fMRI手段来通过找到特异的神经标记物从而提升临床治疗的诊断效力以及准确率。但是,功能磁共振受到其时间分辨率相对较低这一缺点的影响,在对疾病时间特异…...
harmony os系统
因为实验室配的是Windows电脑,最近在搜索marginnote有没有windows的版本,不然好多功能相似的软件在使用不能信息同步是挺麻烦的。搜索结果当然还是没有对应版本。那我退而求其次,看看怎么在Windows上使用marginnote,结果大家意见基…...

2024美赛数学建模A题思路源码——七鳃鳗性别比例和生态系统关系
赛题目的:分析一个物种根据资源可用性改变其性别比例的能力的利弊。开发一个模型,分析对生态系统中由此产生的相互作用。 问题一.七鳃鳗性别比例对生态系统的影响 问题分析 建立一个简化版的模型,来探讨以下问题: 1.我们假设七鳃鳗种群的增长遵循Logistic生长模型,其中食…...
C语言的基础学习
C语言的变量 ## C语言中的变量 在C语言中,变量是对程序中数据所占内存空间的一种抽象定义。定义变量时,用户定义变量的名、变量的类型,这些都是变量的操作属性。不仅可以通过变量名访问该变量,系统还通过该标识符确定变量在内存中的位置 [❷](https://www.dotcpp.com/cour…...

PostGIS教程学习二十二:使用触发器追踪历史编辑操作
PostGIS教程学习二十二:使用触发器追踪历史编辑操作 生产环境下数据库的一个常见要求是能够跟踪用户编辑数据的历史:数据在两个日期之间是如何变化的,是谁操作的,以及它们哪些内容变化了?一些GIS系统通过在客户端接口…...

【PTA浙大版《C语言程序设计(第4版)》编程题】练习7-4 找出不是两个数组共有的元素(附测试点)
目录 输入格式: 输出格式: 输入样例: 输出样例: 代码呈现 测试点 给定两个整型数组,本题要求找出不是两者共有的元素。 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数&a…...
C++面试:数据库不同存储引擎的区别以及如何选择
目录 基础 具体选择原则 Mysql如何选择 创建表时指定存储引擎 修改现有表的存储引擎 查看表的存储引擎 注意事项 总结 在数据库管理系统中,不同的存储引擎提供了不同的存储机制、索引技术、锁定水平和其他功能。以MySQL为例,它支持多种存储引擎&…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...