IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> mysql主从复制集群搭建及原理 -> 正文阅读

[系统运维]mysql主从复制集群搭建及原理

在centos7中安装了5.6版本的mysql——两台机器

配置master主节点

编辑文件my.cnf:vim /etc/my.cnf

#server-id表示该mysql节点在集群中的唯一标识
server-id=11
#开启binlog
#指定文件名
log_bin=master_bin
#binlog日志文件
log_bin-index=master_bin.index
skip-name-resolve

?重启mysql服务:systemctl restart mysqld,查看master状态:show master status;

?配置从节点slave

vim /etc/my.cnf

server-id=48
#打开从服务的relay-log日志。
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
#打开从服务二进制日志 
log-bin=mysql-bin
#使得更新的数据写进二进制日志中 
log-slave-updates=1
#将binlog格式配置为row防止出现错误
binlog_format=row

重启mysql服务:systemctl restart mysqld。进入mysql设置主从同步执行以下命令,这里设置了主节点的ip,端口,用户名,密码以及binlog文件名和位置。

CHANGE MASTER TO MASTER_HOST='192.168.43.11', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='master_bin.000001', MASTER_LOG_POS=194;

查看slave状态:show slave status \G

?

注意:第一个红色框圈起来的表示同步master的binlog日志以及从哪个位置开始同步,它必须master中binlog文件名和日志位置一样;第二个红色框表示slave的读写线程和sql执行线程工作状态,如果为no则不可以工作,需要检查设置主从同步的命令是否正确或者存在其他问题。

测试

到此为止mysql主从复制集群就搭建完成了,可以通过创建数据库mdemo和表user进行测试。这里博主已经创建好了,然后再master插入一条数据试试。

insert into user values(1,'james',22);

master

slave

?

一般地,如果在主从过程中遇到从节点sql执行失败问题

可以通过以下命令解决问题

stop slave;  #停止同步
set global sql_slave_skip_counter=1;   #跳过执行错误的行
start slave;  #开始同步

?我这里是因为master删除表数据,slave不存在该数据,需要在slave中补回这条数据,然后做以上命令解决问题。

全库同步或者部分同步

以上完成的就是主从全库同步,而我们实际业务可能需要同步部分重要的数据库。例如配置只同步mdemo这个库

master节点:vim /ect/my.cnf

#需要同步的数据库
binlog-do-db=mdemo
#只保留7天的binlog日志
expire-logs-days=7
#不备份的数据库 
binlog-ignore-db=information_schema 
binlog-ignore-db=performation_schema 
binlog-ignore-db=sys

slave节点:

#如果salve库名称与master库名相同,使用本配置 
replicate-do-db=mdemo 
#如果master库名[mastdemo]与salve库名[mastdemo01]不同,使用以下配置[需要做映射] 
#replicate-rewrite-db = mdemo -> mdemo01
#还可以指定同步的表,默认全部同步
#replicate-wild-do-table=mdemo.user

配置完成后重启mysql,查看master 状态,Binlog_Do_DB和Binlog_ignore_DB分别表示同步的db和忽略的db。

GTID同步

GTID即全局事务ID,GTID同步也是基于binlog日志实现,在5.6中引入的同步方式。其原理是通过基于一个全局事务ID来标识同步进度,而全局事务ID全局唯一并且趋势递增,它保证master中提交执行的事务在主从集群中生成全局唯一的ID。GTID可以保证主节点上执行的事务在从节点中只执行一次,可以防止因为偏移量的问题导致数据不一致。

配置GTID同步

master

gtid_mode=on
enforce_gtid_consistency=on
log_bin=on
server_id=1
binlog_format=row

slave

gtid_mode=on 
enforce_gtid_consistency=on 
log_slave_updates=1 
server_id=2

重启mysql,并进入slave节点执行以下命令即可

stop slave;
CHANGE MASTER TO MASTER_HOST='192.168.43.11', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='on.000009', MASTER_LOG_POS=194;
start slave;

mysql主从复制原理

相信大家都知道mysql主从复制主要通过binlog日志来实现的,具体来说,master节点将提交的更新事务记录到binlog中,slave通过IO线程去master节点读取binlog日志到relaylog,然后sql线程会回放relaylog,将更新操作同步到slave数据库中。

另外,我们可以通过binlog来恢复丢失的数据或者拓展新的slave,具体通过msyqldump命令将全局数据导出到sql文件,

mysqldump -uroot -p --all-databases > all.sql

?然后执行以下命令导入数据

mysql -uroot -p < all.sql

半同步复制

异步复制是在更新完master节点数据后就响应客户端,不在等待任何slave节点的同步更新数据,这样可能出现master没有写入binlog日志就宕机了,从而导致数据丢失,这是mysql默认的同步方式;半同步复制就是master更新完数据并且至少一个slave节点更新完数据后再响应客户端,如果master在给定的时间还没有收到任何来自slave的更新数据响应,则会变为异步复制不在等待slave更新操作响应就直接响应客户端

搭建半同步复制集群

master通过两个命令就可以实现

#通过拓展库安装半同步复制模块,并指定名称
install plugin rpl_semi_sync_master soname 'semisync_master.so';
#开启半同步复制
set global rpl_semi_sync_master_enabled=ON;
#查看半同步复制模块是否开启成功
show global variables like 'rpl_semi%';

slave

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled = on;
stop slave;
start slave;
show global variables like 'rpl_semi%';

高可用架构

MMM,MHA,MGR

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:57:31  更:2022-04-09 18:57:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:02:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码