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

news2024/11/16 5:31:11

简介:

本文使用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.coloradmin.cn/o/2151075.html

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

相关文章

Lichee NanoKVM基本使用环境

Lichee NanoKVM基本使用环境 本文章主要记录一些自己在初期的使用,以及自己的一些经验 ,非常感谢sipeed NanoKVM官方使用教程 外观(博主自己的是lite版本,非常感谢sipeed) Lichee NanoKVM 是基于 LicheeRV Nano 的 I…

专为GOA TFT-LCD面板设计的16ch水平移位器-iML7272A

GOA是Gate on Array的简写,简单可以理解为gate IC集成在玻璃上了,面板就可以不用gate ic了,窄边框面板大多数都用了GOA技术。随着窄边框设计的日益流行,面板设计的周边空间被逐渐压缩,在传统的GOA电路设计中&#xff0…

Python学习——【3.1】函数

文章目录 【3.1】函数一、函数的定义二、函数的参数三、函数的返回值(一)函数返回值的定义(二)None类型 四、函数的说明文档五、函数的嵌套调用六、函数中变量的作用域(一)局部变量(二&#xff…

(数组) LeetCode 1184. 公交站间的距离

原题链接 一. 题目描述 环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i 1) % n 的车站之间的距离。 环线上的公交车都可以按顺时针和逆时针的方向行驶。 …

解决:The play() request was interrupted by a call to pause().报错

前言: 最近在公司中实现进入页面之后点击单词直接播放音频的时候,发现音频并不会播放声音,并且控制台报错: 研究之后找到了解决方案,与小伙伴们进行分享 原因: 首先看这句话的意思: 在调用 …

【C++】C++ STL探索:Priority Queue与仿函数的深入解析

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与Queue 这篇文…

中国数据中心服务器CPU行业发展概述

2024中国服务器CPU行业概览:信创带动服务器CPU国产化 AA体系是一种基于ARM指令系统和Android操作系统的体系结构,主要用于移动设备。与Wintel体系不同,AA体系中CPU厂商对芯片或系统厂商进行指令系统或IP核授权,操作系统厂商提供基…

Ansbile-变量

文章目录 一、Ansible的常量(内置的变量)有哪些???????????????&#xff1…

八、explicit关键字在C++中的用法

使用方法:修饰单参构造函数 作用:explicit修饰构造函数,禁止类型转换 使用Date d2 19; 这样的方式来进行d2对象的实例化。 在程序上是可以进行下去的,但不符合语法、也不合逻辑。 class Date { public:Date(int day)…

sqlite数据库设计工具

下载 开发环境 VS2022 + Qt5.14.2 CMake修改 add_subdirectory(sqlite3-cmake) include_directories(${CMAKE_SOURCE_DIR}/sqlite3-cmake/src) target_link_libraries(${PROJECT_NAME} sqlite3) 效果 参考 https://github.com/sqlitebrowser/sqlitebrowser

Java之封装

文章目录 1.封装1.1 什么是封装1.2 访问限定符1.3 包1.3.1 什么是包1.3.2 导包1.3.3 自定义包 2. static2.1 static 修饰成员变量2.2 static 修饰成员方法2.3 static成员变量初始化 3. 代码快3.1 普通代码块3.2 实例代码块3.3 静态代码块 4. 对象的打印 1.封装 1.1 什么是封装…

【JPCS出版】第四届电气工程与计算机技术国际学术会议(ICEECT 2024,9月27-29)

会议信息 会议官网:www.iceect.com 2024 4th International Conference on Electrical Engineering and Computer Technologywww.iceect.com 时间地点:2024年9月27日-29日 | 线上(ZOOM) 最终截稿时间:9月23日 主办…

【GVINS】

【GVINS】 1. GVINS的系统特点2. GVINS的融合导航存在问题3. GVINS的信号的组成4. GVINS的信号的组成 原理推导知乎 1. GVINS的系统特点 概述了一种名为GVINS的系统,它旨在解决视觉-惯性里程计(VIO)在长时间运行时出现的漂移问题。GVINS通过…

neo4j导入csv数据

neo4j数据可视化实践 手动输入数据 - 官方democsv数据导入准备数据数据处理导入步骤① 导入疾病表格② 导入药物表格③导入疾病-药物关系表格 爬虫的csv文件 手动输入数据 - 官方demo 点击之后,按照左边10张图中的代码,复制粘贴熟悉语法 效果如下 csv数据…

(undone) 学习语音学中关于 i-vector 和 x-vector

来源:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber8461375 (这是一篇跟 X-vector 有关的论文) 这里有更适合初学者的两个资料: 1.https://www.youtube.com/watch?vR3rzN6JYm38 (MIT教授的youtube视频) 2.https://people.c…

JavaScript高级——组合继承

1、借用构造函数继承(假的) (1)套路: ① 定义父类型构造函数 ② 定义子类型构造函数 ③ 在子类型构造函数中调用父类型构造 (2)关键:在子类型构造函数中通用 call(&…

VS2019配置C++版本的GDAL

VS2019配置GDAL教程 【特别注意】 vs2019编译好的GDAL库是可以在VS2022上面使用的,我这边做项目已经测试过没有问题,所以vs2022使用vs2019编译的gdal没有问题。 【编译版本介绍】 由于GDAL在vs2019源码流程有点复杂,因此我们在这不做讲解…

CSP-J2024年全真模拟题 阅读程序篇2

因为明天考试,这回给大家准备了超详细的解析~ 22.程序中 n 和 m 只有输入正整数,程序的输出值才可能是 YES A.对B.错 23.程序中用到了递归函数 bool fun(int n) A.对B.错 24.若输入 n 和 m 都是素数,程序的输出值…

vue MVC设计模式与MVVM设计模式

使用Vue框架开发前端项目,最大的优势就是再也不用进行复杂的DOM操作了,我们只要关心数据的变化即可,Vue框架会帮我们把复杂的DOM进行渲染,这背后都要归功于他的设计思想,即MVVM设计模式。 了解MVVM设计模式之前,有必要先了解一下MVC设计模式,MVVM模式是在MVC模式基础上…

【博弈论 斐波那契博弈】 HRPA

HRPA 这道题就是一个斐波那契博弈的经典模型: 有一堆个数为n的石子,第一个人第一次不能全部取完,每次一个人取石子的个数都应当大于0,且小于等于上一个人取的石子个数的两倍。 问是否有先手必胜策略。 如果有,第一个人…