当前位置: 首页 > news >正文

mysql8-基于docker搭建主从同步

一、环境信息

  • 系统版本:CentOS Linux release 7.9.2009 (Core)
    • cat /etc/centos-release
  • Docker版本:Docker version 20.10.6, build 370c289
    • docker --version
  • Docker-compose版本:Docker Compose version v2.10.2
    • docker-compose --version
  • MySQL版本:8
    • mysql> select version()
  • 主机两台 或者 单台部署两个容器

二、主从复制说明

1、简单了解下binlog

  • binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。
  • binlog日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。
  • binlog有三种格式:statement基于sql语句复制、row基于行数据变更的复制、mixed混合前两种格式的复制。

2、主从复制原理

  1. Master将改变记录到二进制日志(binary log)中
  2. Slave将Master的二进制日志事件(binary log events)拷贝到它的中继日志(relay log)
  3. Slave重做中继日志(Relay Log)中的事件,将Master上的改变反映到它自己的数据库中
  4. 这些是由从库在做,所以是异步的数据同步

3、主从复制应用场景

  1. 主从服务器互为备份,加强数据库架构的健壮性
  2. 主从服务器读写分离,分担网站压力,从服务器只处理用户的查询请求
  3. 将从服务器,按照业务拆分,分担压力

三、master主节点配置

1、目录结构

.
├── docker-compose.yml
└── mysql└── conf│   └── my.cnf└── data└── log

需要 docker-compose.ymlmy.cnf 两个文件

2、my.cnf配置文件

创建文件夹

mkdir -p mysql/conf

配置文件

cat >> mysql/conf/my.cnf <<EOF# @Author: Johnny
# master[mysqld]# [必须]服务器唯一ID
server-id=888# [必须]启用二进制日志
log-bin=mysql-bin # 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql# 确保binlog日志写入后与硬盘同步
sync_binlog = 1# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all     # default
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock!includedir /etc/mysql/conf.d/EOF

3、docker-compose.yml


# @Author: Johnnyversion: '3'
services:mysql:container_name: mysql-masterimage: mysql:8restart: alwaysvolumes:- $PWD/mysql/log:/var/log/mysql  - $PWD/mysql/conf/my.cnf:/etc/my.cnf- $PWD/mysql/data:/var/lib/mysqlports:- '3306:3306'command: ['--explicit_defaults_for_timestamp=true','--character-set-server=utf8mb4','--collation-server=utf8mb4_general_ci','--max_connections=3000']environment:MYSQL_ROOT_PASSWORD: "shield"

将上面的内容准备好后,安装:

docker-compose up -d

4、配置主从同步账号和权限

进入容器

docker exec -it mysql-master bash

登录mysql

mysql -uroot -pshield

执行sql

# 查看配置的服务ID,显示的应该是配置的ID
mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 888   |
| server_id_bits | 32    |
+----------------+-------+# 看master信息 File 和 Position 从服务上要用
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+# 创建同步账户并开启权限,只是同步账号
mysql> create user 'sync'@'%' identified by '123456';
mysql> grant replication slave,replication client on *.* to 'sync'@'%';# 刷新信息生效
mysql> flush privileges;

5、配置用户的的密码正常访问

mysql8默认的加密插件caching_sha2_password,所以直接使用上面的密码无法进行链接

详情可参考这篇文章

解决办法


mysql> use mysql;mysql> update user set host='%' where user='root';mysql> alter user 'root'@'%' identified with mysql_native_password by'用户密码';# 刷新权限
mysql> FLUSH PRIVILEGES;

四、slave从节点配置(备份节点)

如果是一台主机安装2个mysql,注意更新 docker-compose.yml 中的端口,避免端口冲突

1、目录结构

.
├── docker-compose.yml
└── mysql└── conf│   └── my.cnf└── data└── log

需要 docker-compose.ymlmy.cnf 两个文件

2、my.cnf配置文件

创建文件夹

mkdir -p mysql/conf

配置文件

cat >> mysql/conf/my.cnf <<EOFcat >> mysql/conf/my.cnf <<EOF# @Author: Johnny
# slave[mysqld]
# [必须]服务器唯一ID
server-id=999# [必须]启用二进制日志
log-bin=mysql-bin # 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql# 确保binlog日志写入后与硬盘同步
sync_binlog = 1# 跳过所有的错误,继续执行复制操作
slave-skip-errors = all     # relay_log配置中继日志
relay_log=mysql-relay-bin  # log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  # default 
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock!includedir /etc/mysql/conf.d/EOF

3、docker-compose.yml


# @Author: Johnnyversion: '3'
services:mysql:container_name: mysql-slaveimage: mysql:8restart: alwaysvolumes:- $PWD/mysql/log:/var/log/mysql  - $PWD/mysql/conf/my.cnf:/etc/my.cnf- $PWD/mysql/data:/var/lib/mysqlports:- '3306:3306'command: ['--explicit_defaults_for_timestamp=true','--character-set-server=utf8mb4','--collation-server=utf8mb4_general_ci','--max_connections=3000']environment:MYSQL_ROOT_PASSWORD: "shield"

将上面的内容准备好后,安装:

docker-compose up -d

4、链接master节点

docker exec -it mysql-slave bash
mysql -uroot -pshield

执行sql

#查看server_id是否生效
mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 999   |
| server_id_bits | 32    |
+----------------+-------+# 连接主mysql服务 master_log_file 和 master_log_pos的值要填写主master里查出来的值 注意这里使用的docker-compose 内部服务的端口和ip,实际应该为真实的master_host,参数看后面的介绍
mysql> change master to master_host='mysql-master',master_user='sync',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=154,master_connect_retry=30;######################################################
###  连接主mysql参数说明:
###  master_port:Master的端口号,指的是容器的端口号
###  master_user:用于数据同步的用户
###  master_password:用于同步的用户的密码
###  master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
###  master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
###  master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
####################################################### 开启slave
mysql> start slave;mysql> show slave status \G   
*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: mysql-masterMaster_User: syncMaster_Port: 3306Connect_Retry: 30Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 1166Relay_Log_File: mysql-relay-bin.000002Relay_Log_Pos: 1334Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 1166Relay_Log_Space: 1543Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 888Master_UUID: 05f48dfa-4afd-11ee-821c-0242ac170002Master_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace: 
1 row in set, 1 warning (0.01 sec)

看到下列信息代表链接成功

Slave_IO_Running:Yes;
Slave_SQL_Running:Yes;

相关文章:

mysql8-基于docker搭建主从同步

一、环境信息 系统版本&#xff1a;CentOS Linux release 7.9.2009 (Core) cat /etc/centos-release Docker版本&#xff1a;Docker version 20.10.6, build 370c289 docker --version Docker-compose版本&#xff1a;Docker Compose version v2.10.2 docker-compose --versio…...

智能水表远程控制系统:引领节水新时代

随着科技的不断发展&#xff0c;物联网技术逐渐融入到我们的日常生活中。其中&#xff0c;智能水表远程控制系统成为一项重要创新&#xff0c;对于提高水资源利用率、实现绿色节水具有重要意义。下面小编就来为大家介绍下智能水表远程控制系统吧! 一、智能水表远程控制系统定义…...

【FusionInsight 迁移】HBase从C50迁移到6.5.1(03)6.5.1上准备Loader

【FusionInsight 迁移】HBase从C50迁移到6.5.1&#xff08;03&#xff09;6.5.1上准备Loader HBase从C50迁移到6.5.1&#xff08;03&#xff09;6.5.1上准备Loader登录新集群FusionInsight 6.5.1的Manager准备Loader服务准备Loader Role准备Loader User HBase从C50迁移到6.5.1&…...

redis多线程操作

今天更新一个redis多线程操作&#xff0c; 可直接搬运 import redis, os, threading, queue import pandas as pd# 创建一个任务队列 task_queue queue.Queue()def read_excel(folder_path):total_list []for filepath, dirnames, filenames in os.walk(folder_path):for fi…...

OpenCV(十七):拉普拉斯图像金字塔

1.拉普拉斯图像金字塔原理 拉普拉斯图像金字塔是一种多尺度图像表示方法&#xff0c;通过对高斯金字塔进行差分运算得到。它能够提供图像在不同尺度上的细节信息&#xff0c;常用于图像处理任务如图像增强、边缘检测等。 下面是拉普拉斯图像金字塔的原理和步骤&#xff1a; 构…...

OpenCL编程指南-10.2使用C++包装器API的矢量相加示例

选择OpenCL平台并创建一个上下文 建立OpenCL的第一步是选择一个平台。第2章介绍过&#xff0c;OpenCL使用了ICD模型&#xff0c;其中可以有多个OpenCL实现在一个系统上并存。类似于HelloWorld示例&#xff0c;这个矢量相加程序展示了选择OpenCL平台的一种最简单的方法&#xf…...

mysql数据库,字符串使用双引号““导致报错,使用单引号‘‘不报错,Unknown column ‘user-test‘ in ‘where clause‘

文章目录 一、完整报错二、报错数据三、报错原因四、解决方式1、更改执行sql2、更改sql数据校验模式&#xff08;改为默认校验&#xff09; 一、完整报错 > 1054 - Unknown column user-test in where clause二、报错数据 SELECT * FROM config_info WHERE config_info.da…...

[华为云云服务器评测] 华为云耀云服务器 Java、node环境配置

系列文章目录 第一章 [linux实战] 华为云耀云服务器L实例 Java、node环境配置 文章目录 系列文章目录前言一、任务拆解二、修改密码三、配置安全规则四、远程登录并更新apt五、安装、配置JDK环境5.1、安装openjdk,选择8版本5.2、检查jdk配置 六、安装、配置git6.1、安装git6.2…...

中企绕道突破封锁,防不胜防 | 百能云芯

韩国的财经媒体Business Korea最新报道指出&#xff0c;尽管美方在《通胀削减法案》&#xff08;IRA&#xff09;的补贴中排除了中国&#xff0c;但中国企业正通过多种方式积极应对美国在半导体和电动汽车电池领域的封锁&#xff0c;这包括建立合资企业、设立生产基地以及开展技…...

动手实践:从栈帧看字节码是如何在 JVM 中进行流转的

Java全能学习面试指南&#xff1a;https://www.javaxiaobear.cn/ 前面我们提到&#xff0c;类的初始化发生在类加载阶段&#xff0c;那对象都有哪些创建方式呢&#xff1f;除了我们常用的 new&#xff0c;还有下面这些方式&#xff1a; 使用 Class 的 newInstance 方法。使用…...

PEX装机

目录 一、PXE是什么&#xff1f; 二、PXE的组件&#xff1a; vsftpd/httpd/nfs tftp dhcp 三、配置vsftpd 四、配置tftp 1.安装tftp-server 2.启动tftp 五、准备pxelinx.0文件、引导文件、内核文件 1.准备pxelinux.0文件 2.准备引导文件、内核文件 六、配置dhcp …...

异地远程访问内网BUG管理系统【Cpolar内网穿透】

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…...

论文笔记:一分类及其在大数据中的潜在应用综述

0 概述 论文&#xff1a;A literature review on one‑class classification and its potential applications in big data 发表&#xff1a;Journal of Big Data 在严重不平衡的数据集中&#xff0c;使用传统的二分类或多分类通常会导致对具有大量实例的类的偏见。在这种情况…...

下单时如何保证数据一致性?

原创 哪吒 哪吒编程 2023-09-07 08:03 发表于辽宁 收录于合集#Redis11个 &#xff08;给哪吒编程加星标&#xff0c;提高Java技能&#xff09; 大家好&#xff0c;我是哪吒。 在前几篇文章中&#xff0c;提到了Redis实现排行榜、Redis数据缓存策略&#xff0c;让我们对Redis…...

【C++ Core Guidelines解析】深入理解现代C++的特性和原理

文章目录 &#x1f468;‍⚖️《C Core Guidelines解析》的主要观点&#x1f468;‍&#x1f3eb;《C Core Guidelines解析》的主要内容&#x1f468;‍&#x1f4bb;作者介绍 &#x1f338;&#x1f338;&#x1f338;&#x1f337;&#x1f337;&#x1f337;&#x1f490;&a…...

Go语言高阶:Reflection反射与Files操作 详细示例教程

目录标题 一、Reflection反射1. What is reflection? 什么是反射2. Inspect a variable and find its type 检查变量并找到它的类型3. Reflect.Type and reflect.Value 反射类型和值4. Reflect.Kind 查看底层种类5. NumField() and Field() methods 字段数量和索引值方法6. In…...

谷歌seo技术流

很多外贸企业和独立站都想从Google获得免费的流量&#xff0c;也就是SEO流量&#xff0c;但是在做SEO的过程中&#xff0c;总会面临这样或那样的问题。米贸搜谷歌推广将这些问题总结如下&#xff1a; 既然SEO看起来似乎很难&#xff0c;但还是有很多电商公司愿意投资SEO&#x…...

ReactiveUI MVVM框架(1)-Collections

ReactiveUI MVVM框架&#xff08;1&#xff09;-Collections ReactiveUI使用动态数据&#xff08;DynamicData&#xff09;用于集合的操作。 当对动态数据集合进行更改时&#xff0c;会产生更改通知&#xff0c;通知表示为ChangeSet&#xff0c;里面包含了更改信息&#xff0…...

【微服务】五. Nacos服务注册

Nacos服务注册 5.1 Nacos服务分级存储模型Nacos服务分级存储模型&#xff1a;服务集群属性&#xff1a;总结&#xff1a; 5.2 根据集群负载均衡总结 5.3 Nacos服务实例的权重设置总结&#xff1a; 5.6 环境隔离namespace总结 5.7 Nacos和Eureka的对比总结 5.1 Nacos服务分级存储…...

Lnmp架构-Redis

网站&#xff1a;www.redis.cn redis 部署 make的时候需要gcc和make 如果在纯净的环境下需要执行此命令 [rootserver3 redis-6.2.4]# yum install make gcc -y 注释一下这几行 vim /etc/redis/6739.conf 2.Redis主从复制 设置 11 是master 12 13 是slave 在12 上 其他节…...

Python 二进制数据处理与转换

不得不说&#xff0c;Python能火是有原因的&#xff0c;物联网开发中常用的数据处理方式&#xff0c;Python都有内置的函数或方法&#xff0c;相当方便&#xff0c;官方文档见二进制序列类型&#xff0c;下面是一些示例代码 string Hello World! # 字符串转二进制数据 data …...

【LeetCode】297.二叉树的序列化与反序列化

题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化…...

Java HashSet

HashSet 基于 HashMap 来实现的&#xff0c;是一个不允许有重复元素的集合。 HashSet 允许有 null 值。 HashSet 是无序的&#xff0c;即不会记录插入的顺序。 HashSet 不是线程安全的&#xff0c; 如果多个线程尝试同时修改 HashSet&#xff0c;则最终结果是不确定的。 您必…...

在iPhone上构建自定义数据采集完整指南

在iPhone上构建自定义数据采集工具可以帮助我们更好地满足特定需求&#xff0c;提高数据采集的灵活性和准确性。本文将为您提供一份完整的指南和示例代码&#xff0c;教您如何在iPhone上构建自定义数据采集工具。 自定义数据采集工具的核心组件 a、数据模型 数据模型是数据采…...

Android MediaRecorder录音

1. 简介 在android中录制音频有两种方式&#xff0c;MediaRecorder和AudioRecord。两者的区别如下&#xff1a; MediaRecorder 简单方便&#xff0c;不需要理会中间录制过程&#xff0c;结束录制后可以直接得到音频文件进行播放&#xff1b;录制的音频文件是经过压缩的&#…...

软件提示vcruntime140_1.dll丢失的解决方法,以及丢失的原因总结

在运行某些程序时&#xff0c;可能会出现“vcruntime140_1.dll 丢失”的错误提示。这是因为 vcruntime140_1.dll 是 Visual C Redistributable 的一部分&#xff0c;它通常被安装在 Windows 操作系统上。如果该文件丢失或无法找到&#xff0c;可能会导致程序无法正常运行。在我…...

Datax抽取mysql的bit类型数据

背景&#xff1a;使用datax抽取mysql的一张表&#xff0c;里面有两个bit类型的字段&#xff0c;抽取出来显示如下&#xff1a; 需要在抽取reader里面进行处理配置 最终生成的datax的json文件reader的配置会转换为具体的数值 最终查询效果&#xff1a;...

git 后悔药

前言 自上而下&#xff0c;撤销可以分为从远程库撤销&#xff0c;从本地库撤销&#xff0c;从暂存库撤销。 例子&#xff1a;代码已经提交了三个记录到远程库&#xff0c;分别对应了记录1&#xff0c;内容1&#xff0c;记录2&#xff0c;内容2&#xff0c;记录3&#xff0c;内…...

vue-cli搭建一个新项目及基础配置

vue-cli搭建一个新项目及基础配置 一、安装步骤二、main.js配置三、router下的index.js 一、安装步骤 1.安装node环境&#xff1a;下载地址&#xff1a;Node.js 2.安装脚手架&#xff1a;npm install -g vue/cli 3.创建vue项目&#xff1a;vue create 项目名 4.进入项目&…...

【C++】 C++11(右值引用,移动语义,bind,包装器,lambda,线程库)

文章目录 1. C11简介2. 统一的列表初始化2.1 &#xff5b;&#xff5d;初始化2.2 std::initializer_list 3. 声明3.1 auto3.2 decltype3.3 auto与decltype区别3.4 nullptr 4. 右值引用和移动语义4.1 左值引用和右值引用4.2 左值引用与右值引用比较4.3 右值引用使用场景和意义4.…...

网站开发备案/长沙好的seo外包公司

1、反射 为何要关注元数据&#xff1f;------反射服务 在.net中&#xff0c;通过反射可以得到一个给定的.dll或.exe程序集所包含的所有类型的列表&#xff0c;列表包括给定类型定义的方法、字段、属性和事件&#xff0c;反射即反向获得。 如何使用System.Reflection命名空间编程…...

驻马店营销型网站建设/北京有限公司

分析MySQL数据类型的长度 mysql有几种数据类型可以限制类型的"长度"&#xff0c;有CHAR(Length)、VARCHAR(Length)、TINYINT(Length)、SMALLINT(Length)、MEDIUMINT(Length)、INT(Length)、BIGINT(Length)、FLOAT(Length, Decimals)、DOUBLE(Length, Decimals)和DECI…...

门户网站建设研究/情感式软文广告

CONF_DONE信号是一个双向信号并且是Open-Drain。在配置过程中和配置之前作为输出&#xff0c;且为低电平。配置完成之后CONF_DONE作为输入脚&#xff0c;因为Open-Drain&#xff0c;所以必须由外部拉高&#xff0c;但二极管压降比较大&#xff0c;很可能造成CONF_DONE不能拉高。…...

安徽省建设监理协会新网站/广州专业seo公司

在虚拟机CentOS 7上安装部署ftp服务器&#xff0c;主机win10上访问 1.安装 安装包vsftpd-3.0.2-25.el7.x86_64.rpm放入/usr/src/路径下 [rootlocalhost ~]# cd /usr/src [rootlocalhost src]# yum install -y vsftpd-3.0.2-25.el7.x86_64.rpm 2.创建用户及设置目录 创建主目…...

玉环市建设工程检测中心网站/网络营销主要有哪些特点

单行注释&#xff1a; CTRL / 当行取消注释&#xff08;一样的&#xff09;&#xff1a; CTRL / 多行注释&#xff1a; CTRL SHIFT / 多行取消注释&#xff08;斜杠换成反斜杠&#xff09;&#xff1a; CTRL SHIFT \ 转载于:https://www.cnblogs.com/lijins/p/100994…...

wordpress网址更换/杭州网站制作排名

哲学家就餐问题问题描述哲学家就餐问题(Dining philosophers problem)可以这样表述&#xff0c;假设有五位哲学家围坐在一张圆形餐桌旁&#xff0c;做以下两件事情之一&#xff1a;吃饭&#xff0c;或者思考。吃东西的时候&#xff0c;他们就停止思考&#xff0c;思考的时候也停…...