Docker安装mysql并配置主从,超详细

简介:

本文使用docker安装mysql,并创建master节点,slave节点用于实现主从。废话不多说,直接开始。

1.docker下载镜像,这里我以5.7版本为例。

docker pull mysql:5.7

2.在宿主机上新建如下目录,进行文件挂载。目录名称,路径可随意更改,我这里这是提供进行参考。

    mysql-master  master节点目录

        conf      mysql配置文件

        data      mysql数据

        log       mysql日志

    mysql-slave

        conf      mysql配置文件

        data      mysql数据

        log       mysql日志

文件夹示例图如下

准备在conf目录下新建配置文件my.cnf

配置文件内容如下:

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=1

## 指定不需要同步的数据库名称

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权限的用户除外) 0:可读写,1:只读

read_only=0

3.运行镜像,生成mysql的master节点

docker run --name mysql-master -p 3307:3306 -v D:/docker_share/mysql-master/log:/var/log/mysql -v D:/docker_share/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

4.单独挂载配置文件

上面一步没有挂载配置文件,因为在实际操作中我发现mysql的配置文件默认存在/etc目录下,而etc目录下存在很多文件,我并不想挂载这个目录,所以这一步单独拿出来,只挂载指定文件

docker cp D:/docker_share/mysql-master/conf/my.cnf 容器id:/etc/my.cnf

5.重启mysql-master

docker restart mysql-master

6.登录mysql-master

## 进入容器

docker exec -it mysql-master /bin/bash

## 登录mysql

mysql -uroot -p123456

为容器实例内创建数据同步用户

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

进行授权

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

查看状态

show master status;

如果没有出现上图,出现的是Empty,则是因为配置文件中没有开启binlog。

7.到此,master节点部署完成

8.运行镜像,生成mysql的slave节点

docker run --name mysql-slave -p 3308:3306 -v D:/docker_share/mysql-slave/log:/var/log/mysql -v D:/docker_share/mysql-slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

挂载配置文件

docker cp D:/docker_share/mysql-slave/conf/my.cnf 容器id:/etc/my.cnf

配置文件: 需要注意,server_id需要唯一,read_only=1

[mysqld]

## 设置server_id,同一局域网中需要唯一

server_id=2

## 指定不需要同步的数据库名称

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权限的用户除外) 0:可读写,1:只读

read_only=1

9.重启mysql-slave

docker restart mysql-slave

10.登录mysql-slave

## 进入容器

docker exec -it mysql-slave /bin/bash

## 登录mysql

mysql -uroot -p123456

执行【主从复制命令】

change master to master_host='ip地址', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-slave1-bin.000001', master_log_pos=617, master_connect_retry=30;

主从复制命令参数说明

master host:主数据库的lP地址;

master port:主数据库的运行端口;

master user:在主数据库创建的用于同步数据的用户账号;

master_password:在主数据库创建的用于同步数据的用户密码:

master_Iog_ile:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;

master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;

master_connect_retry:连接失败重试的时间间隔,单位为秒。

11.启动同步并查看数据库主从同步状态

## 启动同步命令

start slave;

## 查看数据库主从同步状态

show slave status \G;

两个参数都为yes,才表示正常。如果Slave_IO_Running一直显示Connecting,说明无法连接到master节点,可以参考这篇文章:Slave_IO_Running:Connecting ;_slaveiorunning为connecting-CSDN博客

如果Slave_SQL_Running:No,可以查看一下类似下图中的Error提示,具体情况具体分析。

12.进行验证

可以使用navcate等工具在master节点新建数据库,数据表,增加数据。mysql-slave节点会自动同步。这里需要注意,mysql-slave节点不建议手动新建任何数据表,首先slave节点本来就是从库,而且如果新建的表在主库中存在,同步就会报错。

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

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

相关文章

STM32F407单片机编程入门(十四) 内部RTC实时时钟详解及实战含源码

文章目录 一.概要二.RTC基本介绍三.STM32单片机RTC内部结构图四.CubeMX配置一个RTC时间例程五.CubeMX工程源代码下载六.小结 一.概要 RTC(Real-Time Clock)是一种用于追踪和记录实际时间的时钟系统。在STM32中,RTC通常用于提供实时时钟和日期…

cnn机器学习时python版本不兼容报错

在使用python执行CNN算法时,发生如下报错: A module that was compiled using NumPy 1.x cannot be run in NumPy 2.1.1 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may …

MySQL 中的全文索引:强大的文本搜索利器

《MySQL 中的全文索引:强大的文本搜索利器》 在 MySQL 数据库中,全文索引是一种非常有用的功能,它可以帮助我们快速地在大量文本数据中进行搜索。那么,什么是 MySQL 中的全文索引呢?它又是如何工作的呢?让…

wordpress迁移到别的服务器

wordpress论坛网站搭建 于2023/11/16写的该文章 一-配置环境 配置LNMP(linuxnginxmysqlphpphpmyadmin)环境或者LAMP(apache) 可以选择集成了这些软件的套件 下载链接:https://www.xp.cn/download.html 手动下载这…

传输层 IV(TCP协议——流量控制、拥塞控制)【★★★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。 一、TCP 流量控制(★★) 1. 利用滑动窗口实现流量控制 一般说来,我们总是希望数据传输得更快一些。但如果发送方把数据发送得…

Linux 一些快捷键使用操作技巧

ctrl c : 强制停止 如图仅输入tail命令时程序会卡住,这时就需要强制停止 ctrl d : 退出或者登出 history : 查看历史输入命令 !命令 :自动执行上一次匹配前缀的命令 (注意不要用这个命令执行太过久远的,容易执行错误…

设置VsCode搜索时排除文件,文件列表中隐藏文件

按照《VsCode gdb gdbserver远程调试C程序》中介绍的方法,配置好VsCode后,打开一个C/C工程,发现左侧的面板会显示编译时生成的中间文件(比如.d和.o文件)。我们可以通过设置隐藏掉一些我们不需要打开的文件以简洁面板…

C++基础(8.继承_多态)

目录 继承: 继承的概念: 继承的定义: 基类和派生类对象赋值转换 : 继承中的作用域: 派生类的默认成员函数: 例题: ​编辑​编辑​编辑 继承与友元: 继承与静态成员&#xff1…

【C++】C++入门概念(二)

引用 概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 比如:李逵,在家称为"铁牛",江湖上人称"黑旋…

汇川AM600 与 codesys opc server 通讯并建立 OPCserver 的方法

AM600 与 codesys opc server 通讯并建立 OPCserver 的方法 AM600 OPC Server 架构 1、程序后台“应用中”添加 symbols config 2、 选择作为 OPCsever 跟 PLC 通讯数据 点击 ACCERSS rights 下的箭头选择权限 安装目录下:打开“OPCConfig”

re题(38)BUUCTF-[FlareOn6]Overlong

BUUCTF在线评测 (buuoj.cn) 运行一下.exe文件 查壳是32位的文件,放到ida反汇编 对unk_402008前28位进行一个操作,我们看到运行.exe文件的窗口正好是28个字符,而unk_402008中不止28个数据,所以猜测MessageBoxA(&#x…

MySQL --表的约束

文章目录 1.空属性2.默认值3.列描述4.zerofill5.主键6.自增长7.唯一键8.外键9.综合案例-阅读 1.空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空…

AI客服对决:智能客服PK赛揭示企业级AI应用未来

如今的AI对抗场景,简直成了颇具娱乐性的“观赏项目”。围观群众们不仅看得津津有味,时不时还会发出阵阵笑声。 最近,一场别开生面的AI客服挑战赛引发了热议:一位使用“花开富贵”阿姨人设的Agent甩出一条链接,结果对面…

如何在命令执行超时时自动终止该命令

问题 问题 《Command line command to auto-kill a command after a certain amount of time》 中的回答提出了一种从 bash 命令行中为长时间运行的命令设置超时的方法: ( /path/to/slow command with options ) & sleep 5 ; kill $!但是有可能某个“耗时长”…

python绘制弦图-科研作图

一、背景 弦图以其直观、精美的展示方式受到越来越多人的关注,它不仅能够有效展示两个变量之间的联系,还能同时展现多个变量间的复杂互动,本文将通过Python语言中的pycirclize库,带你深入了解如何绘制弦图。 弦图是一种圆…

CQRS模型解析

简介 CQRS中文意思为命令于查询职责分离,我们可以将其了解成读写分离的思想。分为两个部分 业务侧和数据侧,业务侧主要执行的就是数据的写操作,而数据侧主要执行的就是数据的读操作。当然两侧的数据库可以是不同的。目前最为常用的CQRS思想方…

强大的重命名工具 | Bulk Rename Utility v4.0 便携版

软件简介 Bulk Rename Utility是一款功能强大且易于使用的文件批量重命名工具。它不仅体积小巧,而且完全免费,提供了友好的用户界面。该软件允许用户对文件或文件夹进行批量重命名,支持递归操作,即包含子文件夹的重命名。 软件特…

镜像导入、标签设置与应用、探针测试

一、镜像导入 1、master主机下载镜像并打包 [rootk8s-master ~]# docker pull nginx:1.20.0[rootk8s-master ~]# docker pull nginx:1.21.0[rootk8s-master ~]# docker pull nginx:1.25.0[rootk8s-master ~]# docker pull busybox:latest[rootk8s-master ~]# docker save -o n…

FreeRTOS下UART的封装

FreeRTOS下UART的封装_哔哩哔哩_bilibili Git使用的一个BUG: 当出现这个问题是因为git本身的安全证书路径有问题,我们需要重新指定路径 P1:UART程序层次

蓝桥杯嵌入式的学习总结

一. 前言 嵌入式竞赛实训平台(CT117E-M4) 是北京国信长天科技有限公司设计,生产的一款 “ 蓝桥杯全国软件与信息技术专业人才大赛-嵌入式设计与开发科目 “ 专用竞赛平台,平台以STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提…