mysql 互为主备 宕机 数据丢失_Devops部署-mysql主备多从搭建

​双主多从架构原理介绍

IP端口账号密码服务名
10.1.1.23306root/syncabc123!数据库A
10.1.1.33306root/syncabc123!数据库B
10.1.1.43306root/syncabc123!数据库C

1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;

2.masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;

3.两台主库之间做高可用,可以采用MyCAT中间件暴露一个统一的服务给client,同时当2主任意一台宕机时,还能提供服务。宕掉的机器重启恢复之后,数据可以同步得到;

4.所有提供服务的从服务器与masterB进行主从同步(双主多从);

d08f35028afe126beb787c4483640fcc.png

#创建目录 mkdir -p /home/docker-compose/mysql cd /home/docker-compose/mysql/ && mkdir data conf vi docker-compose.yml

version: '3.1'
services:mysql:restart: alwaysimage: mysql:5.7container_name: mysqlports:- 3306:3306environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: abc123!  ##密码command:--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1--max_allowed_packet=128M--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"volumes:- ./data:/var/lib/mysql- ./conf:/etc/mysql/mysql.conf.d

进入目录

cd /home/docker-compose/mysql/conf

编写MySQL配置文件

vi mysqld.cnf

主节点1配置

[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir    = /var/lib/mysql
default-time-zone='+8:00'
symbolic-links=0
server-id = 40
log-bin = mysql-bin
enforce_gtid_consistency = ON
gtid_mode = ON
auto_increment_increment=1
auto_increment_offset=1
log-slave-updates
sync_binlog=1
max_connections=1000
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_page_size=32K
innodb_log_file_size=148M

主节点2配置

[mysqld]
pid-file    = /var/run/mysqld/mysqld.pid
socket    = /var/run/mysqld/mysqld.sock
datadir    = /var/lib/mysql
default-time-zone='+8:00'
symbolic-links=0
server-id = 66
log-bin = mysql-bin
enforce_gtid_consistency = ON
gtid_mode = ON
auto_increment_increment=2
auto_increment_offset=2
log-slave-updates
sync_binlog=1
max_connections=1000
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_page_size=32K
innodb_log_file_size=148

启动mysql

docker-compose up -d 
docker-compose down //直接删除容器
docker-compose stop //不删除容器
docker-compose start //直接启动

进入容器:

docker exec -it mysql /bin/bash
mysql -uroot -pabc123!

设置2个主节点的主从关系

查看10.1.1.2的日志信息:

File: mysql-bin.000005

Position: 1495

mysql> show master status G;
*************************** 1. row ***************************File: mysql-bin.000005Position: 1495Binlog_Do_DB: Binlog_Ignore_DB: 
Executed_Gtid_Set: c83eb7e9-2556-11eb-b4ad-0242ac120002:20-21,
d52d0074-2556-11eb-93b5-0242ac120002:1-20
1 row in set (0.00 sec)ERROR: 
No query specifiedmysql> 

查看10.1.1.3的日志信息:

File: mysql-bin.000004

Position: 1796

mysql> show master status G;
*************************** 1. row ***************************File: mysql-bin.000004Position: 1796Binlog_Do_DB: Binlog_Ignore_DB: 
Executed_Gtid_Set: c83eb7e9-2556-11eb-b4ad-0242ac120002:1-21,
d52d0074-2556-11eb-93b5-0242ac120002:20
1 row in set (0.00 sec)ERROR: 
No query specifiedmysql> 

在两个节点执行

create user 'sync'@'%' identified by 'password';
grant replication slave on *.* to sync;##Mysql复制错误error_code: 1045 Access denied for usergrant replication slave on *.* to 'sync'@'%' identified by 'password';flush privileges; //刷新MySQL的系统权限相关表,否则会无法用账号链接

修改master_host与master_log_file与master_log_pos三个值

#节点设置 需要同步的节点(主库节点)

#在10.1.1.2设置

FLUSH TABLES WITH READ LOCK;
change master to master_host='10.1.1.3',master_port=3306,master_user='sync',master_password='password',master_log_file='mysql-bin.000004',master_log_pos=1796;
UNLOCK TABLES;

#在10.1.1.3设置

FLUSH TABLES WITH READ LOCK;
change master to master_host='10.1.1.2',master_port=3306,master_user='sync',master_password='password',master_log_file='mysql-bin.000005',master_log_pos=1495;
UNLOCK TABLES;

开启主从复制 :

start slave;

检查

mysql> show slave status G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.1.1.3Master_User: syncMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000004Read_Master_Log_Pos: 1796Relay_Log_File: a389ed970e74-relay-bin.000005Relay_Log_Pos: 822Relay_Master_Log_File: mysql-bin.000004Slave_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: 

以下三项为正常

Slave_IO_State: Waiting for master to send event

Slave_IO_Running: Yes

Slave_SQL_Running: Yes


未完待续

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

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

相关文章

sourcetree mac 免登录_「vscode remote ssh 免登录」mac

如果你只知道传统的ssh操作,或者sftp/ftp上传下载操作,那可能有点太low了。强烈推荐你使用 vscode remote ssh。举个栗子来形象比喻一下:钥匙开门 和 指纹开门 的区别。已经用 vscode remote ssh 功能有很久了,这种体验真的太棒了…

signature=9e6873686326b073f8f457fa0e6c2f70,Signature required

摘要:Model comprehension and effective use and reuse of complex subsystems are problems currently encountered in the automotive industry. To address these problems we present a technique for extracting, presenting, and making use of signatures f…

python中汉字与变量不可同时出现_Python语言应用培训课(选择练习)

第一部分1、多选题:Python在金融中的运用包括( )选项:A:绩效分析B:风险分析C:程序化交易D:量化分析答案: 【绩效分析;风险分析;程序化交易;量化分析】第二部分1、判断题:python语言支持中文字符作为变量名称,但具有语法意义的符号…

python find函数 和index的区别_find方法和index方法的区别

Python find(): find 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否…

html5图像映射坐标怎么看,如何将AxesImage中的坐标映射到已保存图像文件中的坐标?...

这是尝试从matplotlib获取精确像素值的更令人困惑的部分之一. Matplotlib将绘制精确像素值的渲染器与绘制图形和轴的画布分开.基本上,最初创建(但尚未显示)图形时存在的渲染器不一定与显示图形或将其保存到文件时使用的渲染器相同.你正在做的是正确的,但是它使用的是初始渲染器…

vue获取元素距离页面顶部的距离_VUE实时监听元素距离顶部高度的操作

效果图如下所示.html今日热门今日热销.jsmounted(){window.addEventListener(scroll,this.handleScrollx,true)},methods: {handleScrollx() {console.log(滚动高度,window.pageYOffset)console.log(距离顶部高度,this.$refs.pronbit.getBoundingClientRect().top)},}补充知识&…

鸿蒙首饰用什么合成,天下HD鸿蒙炼炉是什么?鸿蒙炼炉讲解

在玩天下HD的时候各位又是否知道鸿蒙炼炉是什么呢?其实鸿蒙炼炉是游戏之中一个很重要的系统,而对于这个系统本次小编就给各位带来了鸿蒙炼炉讲解。或许各位都有用到天下HD的鸿蒙炼炉系统,但是各位又是否了解鸿蒙炼炉系统是怎么样的呢&#xf…

如何区分网线是几类的_小移课堂 | 网线这样选,网速才能嗖嗖的!

在家宅到长蘑菇的日子里最亲近的,除了家人,就是WiFi想必大家碰上网速不好的时候都会很抓狂为什么家里的网络明明签约的是千兆可网速一直上不去?网线,是卡住网速的关键因素!问网线不是通用的吗?还要用专门的网线吗&…

navicat premium 链接postgresql 无法加载表_PostgreSQL 每周新闻 2020311

PostgreSQL 每周新闻 2020-3-11英文原文地址:https://postgresweekly.com/issues/346Postgres子事务和性能本文展示了过度使用子事务对性能的影响,以及如何诊断在您的数据库里是否有这样的问题。Laurenz AlbePostgreSQL匿名器0.6:假名化和改进…

python无法打开_如何解决Windows命令行无法运行python文件?

我在使用windows的命令行运行python文件,但是每次出现的都是这种情况我设置了Path,D:Python,后来又设置了个PythonPath,添加了Lib和DLLS的路径,但是没用。 我觉得还是设置环境变量的问题,请问大家有什么办法…

iis7设置html支持asp,Win7下启用IIS7配置ASP运行环境的详细方法

第一次在windows7下配置IIS,虽然有丰富的xp下配置IIS的经验,但还是会遇到不少的问题。特别是对入门者来说,搞清一些东西还是挺费时间的。其实win7下的IIS7配置过程是非常简单的。下面让seo博客来详细的介绍一下win7下配置IIS7环境运行ASP网站…

java 手写阻塞队列_Java阻塞队列的实现

阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新…

python语句解释_深入理解python with 语句

深入理解python with 语句 python中with 语句作为try/finally 编码范式的一种替代, 适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的”清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等 1…

js怎么设置z index.html,HTML5 Canvas set z-index

j0kEli Stone提出了一个问题:HTML5 Canvas set z-index,或许与您遇到的问题类似。回答者markE给出了该问题的处理方式:Yes..kind of yes. You can use compositing to "draw behind" existing pixels.ctx.globalCompositeOperation…

python搭建分布式集群_Spark完全分布式集群搭建【Spark2.4.4+Hadoop3.2.1】

一.安装Linux需要:3台CentOS7虚拟机注意:虚拟机的网络设置为NAT模式,NAT模式可以在断网的情况下连接上虚拟机而桥架模式不行!二.设置静态IP跳转目录到:修改IP设置:备注:执行scp命令拷贝设置文件…

ajax post提交数据_详解Ajax异步加载

前言:作为资深球迷,提起Ajax,第一反应想到的是阿贾克斯,那个曾培养出伊布,范德法特,苏亚雷斯,亨特拉尔等一众球星的荷甲著名球队。很显然,我们今天说的Ajax,跟足球没有任…

win10改计算机用户名,win10系统修改本地账号用户名的操作方法

很多小伙伴都遇到过对win10系统修改本地账号用户名进行设置的困惑吧,一些朋友看过网上对win10系统修改本地账号用户名设置的零散处理方法,并没有完完全全明白win10系统修改本地账号用户名的操作方法非常简单,只需要1、首先打开Win10控制面板&…

2020 ccf推荐中文期刊_CCF推荐国际学术期刊

中国计算机学会推荐国际学术期刊(计算机系统与高性能计算)一、A类序号刊物简称刊物全称出版社网址1TOCSACM Transactions on Computer SystemsACM2TOCIEEE Transactions on ComputersIEEE3TPDSIEEE Transactions on Parallel and DistributedSystemsIEEE二、B类序号刊物简称刊物…

假设以带头结点的循环链表表示队列_关于反转链表,看这一篇就够了!

本期例题:LeetCode 206 - Reverse Linked List[1](Easy)反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL反转链表这道题是我在阿里的面试中遇到的题目。它本身也是单链表…

1650显卡学计算机,适合老电脑升级?GTX1650显卡开箱,性价比依然不高!

原标题:适合老电脑升级?GTX1650显卡开箱,性价比依然不高!新一代的NV显卡高端版本基本上全部和大家见面,例如RTX2080ti、RTX2070等等。而中端的RTX2060和GTX1660ti也陆续被玩家接受,剩下入门级的显卡英伟达取…