十、MySQL主从架构配置

一、资源配置

主库:192.168.134.132

从库:192.168.134.133

从库:192.168.134.134

二、主从同步基本原理:

        master用户写入数据,会生成event记录到binary log中,slave会从master读取binlog来进行数据同步;

1、具体步骤:

  1. master将数据改变记录到二进制binlog中;
  2. slave上执行start slave 命令后,slave会创建一个IO线程,用来连接master,请求master中的binlog;
  3. 当slave连接master时,master会创建一个log dump线程,用于发送binlog内容。在读取binlog的内容的操作中,会对主节点上的binlog加锁,当读取完成并且发送给从服务器后解锁;
  4. IO线程接受主节点发送过来的更新后,保存到中继日志relay log 中;
  5. slave的sql线程,读取relay log日志,并解析成具体的操作,从而实现主从操作一致,最终数据一致。

2、数据库是靠什么同步的?

        主从复制,默认是通过pos复制(postion),就是说在日志文档里,将用户的每一项操作都进行了编号(pos),每一个event都有一个起始号,一个终止编号,配置主从复制时候,从节点要输入master的log_pos值,就是这个原因,要求它从哪个pos开始同步数据库里的数据,这也是传统的复制技术。

        MySQL5.6以后,增加了GTID复制 GTID就类似pos的一个作用,不过它是整个mysql复制结构全局通用的,就是说在整个mysql冗余架构中,它们的日志文件里时间的GTID值是一致的。

3、pos与GTID的区别?

        两者都是日志文件里事件的一个标志,如果将整个mysql集群看作一个整体,pos就是局部的,GTID就是全局的。

三、配置一主两从

(1)为主库和从库创建复制账户, 分别在主从库上执行如下命令:

mysql -uroot -p
mysql> create user 'repl'@'%' identified by '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%';
mysql> ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

(2)配置主库:

        开启主库的二进制日志功能、 定义主库的 server-id,并设置mysql Binlog日志保留时长配置&删除方法

        vim /etc/my.cnf

        在[mysqld]标签下添加如下内容:

log-bin=mysql-bin
server_id =1# 主从同步时,需要同步的数据库,多个数据库写多行binlog_do_db配置
# binlog_do_db=test_db
# binlog_do_db=test_db2
#主从同步时,不需要同步的数据库,多个数据库写多行binlog_ignore_db配置
# binlog_ignore_db=mysql
# binlog_ignore_db=information_schema
# binlog_ignore_db=sys
# binlog_ignore_db=performance_schema
#做双主时,每台数据库都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突;解决方案是让每个数据库的自增主键不连续;
#参数auto_increment_increment表示自增值,一般有n台主库,自增值就采用n;#auto_increment_offset表示起始序号,一般offset不超过自增值,且各主库的自增值不一样.
# auto_increment_increment = 2
# auto_increment_offset = 1
2.1 设置mysql Binlog日志保留时长配置&删除方法
当开启mysql数据库主从时,会产生大量如mysql-bin.00000*log 的文件,这会大大耗费磁盘空间
binlog日志文件只对 增删改有记录,查询操作是没有记录的
二进制日志文件,MySql8.0默认已经开启,低版本的MySql需要通过配置文件开启,并配置MySql日志格式,Linux系统:my.cnf1、查看是否开启binlog
mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON          on=启用,off=未启用 |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
| sql_log_bin                     | ON                             |
-------------------------------------<永久有效>方式 - 配置文件 -mysql 8.0 以下版本适用,因为在8.0开始expire_logs_days 废弃 启用binlog_expire_logs_seconds设置binlog自动清除日志时间 ;方式 1:
先关闭mysql主从,
在/etc/my.cnf文件中的[mysqld]模块下, 新增如下参数:
expire_logs_days=7
这样设置将永久有效,但需重启mysqld服务才会生效.
说明:0-表示永不过期, 单位为天。
重启后, 再手工将(/var/lib/mysql/)目录下的N天前的"mysql-bin.000数字" 文件删除.方式 2:不用重启数据库
登录到mysql数据库中,执行:
set global expire_logs_days=7;
这样设置后, 后续的文件将按该策略进行滚动删除;
但如果删除之前的文件(如删除7天前的mysql-bin binlog 文件), 还需执行如下操作:
mysql> PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);- - - - - - -MySQL 8.0 以上版本,
查看当前数据库日志binlog保存时效 以秒为单位  默认为2592000 30天,
-- 14400   4小时;86400  1天;259200  3天;
mysql> show variables like "%binlog_expire_logs_seconds%";
+----------------------------+---------+
| Variable_name              | Value   |
+----------------------------+---------+
| binlog_expire_logs_seconds | 2592000 |
+----------------------------+---------+
1 row in set (0.00 sec)    
先关闭主从,修改配置文件my.cnf
添加
binlog_expire_logs_seconds=259200
重启数据库生效,或者通过命令修改,再此不做演示。

(3)重启主库mysql服务并登录

service mysqld restartmysql -uroot -p
mysql> show master status;

 

(4)配置从库 

vim /etc/my.cnf
在[mysqld]标签下添加如下内容:
server_id=2
relay_log=/var/lib/mysql/mysql-relay-bin
read_only=1
重启从库mysql服务
service mysqld restart因为从库为了保证数据的一致性,从库是不允许写数据的,建议在从库执行
set global read_only= 1;   //设置为只读,但是root  超级用户是可以的
set global read_only=0;  --命令来将服务器设置为可写模式。
set global super_read_omly =1; //超级用户也无法进行 写的操作
4.1、设置mysql 从库 中继日志relay log 日志保留时长
1、查看日志相关参数
mysql> show variables like '%relay%';
+---------------------------+--------------------------------------+
| Variable_name             | Value                                |
+---------------------------+--------------------------------------+
| max_relay_log_size        | 0                                    |
| relay_log                 | /var/lib/mysql/mysql-relay-bin       |
| relay_log_basename        | /var/lib/mysql/mysql-relay-bin       |
| relay_log_index           | /var/lib/mysql/mysql-relay-bin.index |
| relay_log_info_file       | relay-log.info                       |
| relay_log_info_repository | TABLE                                |
| relay_log_purge           | OFF                                  |
| relay_log_recovery        | OFF                                  |
| relay_log_space_limit     | 0                                    |
| sync_relay_log            | 10000                                |
| sync_relay_log_info       | 10000                                |
+---------------------------+--------------------------------------+2、参数详解max_relay_log_size #标记relay log允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小。relay_log  #定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录(datadir),文件名默认为host_name-relay-bin.nnnnnn。relay_log_basename #
relay_log_index #同relay_log,定义relay_log的位置和名称;一般和relay-log在同一目录。relay_log_info_file #设置relay-log.info的位置和名称(relay-log.info记录MASTER的binary_log的恢复位置和relay_log的位置)relay_log_purge  #是否自动清空不再需要中继日志时。默认值为1(启用)。relay_log_recovery #当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为1时,可在slave从库上开启该功能,建议开启。relay_log_space_limit  #防止中继日志写满磁盘,这里设置中继日志最大限额。注意,但此设置存在主库崩溃,从库中继日志不全的情况,不到万不得已,不推荐使用!sync_relay_log #这个参数和sync_binlog是一样的,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。sync_relay_log_info:#这个参数和sync_relay_log参数一样,3、设置,可以通过命令或者配置文件的方式设置自动清空不在需要的中继日志3.1 通过命令设置  1:表示开启,0:表示关闭set global relay_log_purge=1;
flush logs;3.2 通过修改my.cnf配置文件,永久生效
# 设置保留最近5个历史日志文件
relay_log_purge=ON
relay_log_purge_reuse=5
修改完,重启数据库生效

(5)启动复制:

        登陆从库 mysql 服务,使用 change master to 语句来启动复制,即告诉从库如何连接到主库。

mysql -uroot -p
先关闭从库的slave服务
mysql> stop slave;
执行 change master to 语句:
change master to master_host='192.168.134.132',master_user='repl',master_password='123456',master_log_file='mysql-bin.000087',
master_log_pos=155;(取决于master的 Position)
检查复制是否正确执行:
mysql> show slave status\G;

 Slave_IO_State、 Slave_IO_Running、 Slave_SQL_Running 这三列显示

当前备库复制尚未运行。

运行如下命令开始复制

mysql> start slave;
mysql> show slave status\G;

 

注意:两个yes则表示成功配置主从复制,Connection和No都是配置有问题

四、MySQL主从测试 

主从数据同步验证

登录主库

mysql -uroot -pmysql> show databases;mysql> create database db_test;

登录从库查看
mysql -uroot -p
mysql> show databases;

测试完成!写的很糙,如有问题,请及时与我联系。 

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

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

相关文章

Java安全 反序列化(1) URLDNS链原理分析

Java安全 反序列化(1) URLDNS链原理分析 文章目录 Java安全 反序列化(1) URLDNS链原理分析前置知识应用分析payload1.新建HashMap类2.新建URL类3.获取URL 的 Class对象4.通过反射访问URL内部变量5.通过反射为URL中类赋值6.调用HashMap#put方法传入key和value7.再次通过反射为UR…

铝壳电阻的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点4,工艺流程4.1,原材料准备4.2,点胶4.3,高温烘烤4.4,组合4.5,焊接4.6,表面处理4.7,电气性能测试5,选型参数5.1,阻值(Resis

ocp考试是中文还是英文?ocp认证好考吗

ocp认证是中文还是英文考试ocp认证的考试常用语种是英文&#xff0c;除开英文之外还有日语等语种&#xff0c;但是目前没有中文(12c的时候有过中文考试)&#xff0c;所以考生最好具有一定的英语水平再报名参加考试&#xff0c;ocp认证考试的形式为机试&#xff0c;考试的题型全…

面向未来的前沿人工智能监管

策制定者应该为未来十年人工智能系统更加强大的世界做好准备。这些发展可能会在人工智能科学没有根本性突破的情况下发生&#xff0c;只需扩展当今的技术以在更多数据和计算上训练更大的模型即可。 用于训练前沿人工智能模型的计算量在未来十年可能会显着增加。到 2020 年代末…

kafka什么情况下会认为发送失败进而去重试

在Kafka中&#xff0c;发送消息的过程是异步的&#xff0c;即消息后不会立即得到发送结果。Kafka会将消息添加到发送缓冲区&#xff0c;并立即返回一个成功的响应。因此&#xff0c;Kafka并不会直接知道消息是否成功发送到了目标主题的分区。 Kafka在以下情况下会认为发送失败…

03.生命周期和工程化开发入门

一、Vue生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09;什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a;就是一个Vue实例从创建 到 销毁 的整个过程。 生命…

【Linux】日常使用命令(三)

文章目录 **cal 命令****date 命令****bc 命令****Linux下玩小游戏**&#xff1a; cal 命令 功能描述: cal 命令用于显示日历。 常用选项: -3&#xff1a;显示前一个月、当前月和下一个月的日历。-y&#xff1a;显示整年的日历。 常用示例: # 示例 1: 显示当前月的日历 cal# …

MyBatis3源码深度解析(十四)SqlSession的创建与执行(一)Configuration与SqlSession的创建过程

文章目录 第五章 SqlSssion的创建过程前言5.1 XPath方法解析XML文件5.1.1 XPath的基本用法5.1.2 MyBatis使用XPathParser工具类 5.2 Configuration实例创建过程5.3 SqlSession实例创建过程 第五章 SqlSssion的创建过程 前言 MyBatis的核心组件之一SqlSession对象&#xff0c;…

python知识点总结(四)

这里写目录标题 1、Django 中的缓存是怎么用的&#xff1f;2、现有2元、3元、5元共三种面额的货币&#xff0c;如果需要找零99元&#xff0c;一共有多少种找零的方式?3、代码执行结果4、下面的代码执行结果为&#xff1a;5、说一下Python中变量的作用域。6、闭包7、python2与p…

css属性选择器总结

属性选择器 属性选择器在 CSS2 中就已经被引入&#xff0c;并且在 CSS3 及更高版本中仍然被广泛使用&#xff0c;因为它们提供了一种灵活且强大的方式来选择具有特定属性的元素。 [attr]&#xff1a; 是一个属性选择器&#xff0c;用于选择具有指定属性的所有元素&#xff0c;…

发票OCR-国税可进行的发票查验种类-接口文档

发票查验内容包括发票种类名称、发票代码、发票号码、金额、销售方名称、购买方名称等信息。可以在国家税务总局全国增值税发票查验平台上进行查验&#xff0c;也可以进入发票所属省、直辖市税务局官方网站的“我要查询-发票查询”模块进行查验&#xff0c;企业也可以通过发…

二叉树遍历(牛客网)

描述 编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。 例如如下的先序遍历字符串&#xff1a; ABC##DE#G##F### 其中“#”表示的是空格&#xff0c;空格字符代表空树。建立起此二叉树…

LeetCode_29_中等_两数相除

文章目录 1. 题目2. 思路及代码实现详解&#xff08;Python&#xff09;2.1 位运算与二分查找 1. 题目 给你两个整数&#xff0c;被除数 d i v i d e n d dividend dividend 和除数 d i v i s o r divisor divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算…

20240318uniapp怎么引用组件

在script中增加 import index from "/pages/index/index.vue" 把index直接整个作为一个组件引入 然后注册组件 在export default中增加 components: {index:index }, 注册了index组件&#xff0c;内容为import的index 然后就可以在template里使用 <index&…

机器人可反向驱动能力与力控架构

反向驱动性是电机传动系统的机械特性&#xff0c;它描述了运动是否可以轻松反转 。特别是&#xff0c;反向驱动能力取决于两个因素&#xff1a;传动运动效率和整体执行器机械阻抗。反向运动中传动装置的低运动效率意味着所施加的外力的大部分被运动反作用力抵消。然而&#xff…

Ubuntu 搭建gitlab服务器,及使用repo管理

一、GitLab安装与配置 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。 1、安装Ubuntu系统&#xff08;这个教程很多&#xff0c;就不展开了&#xff09;。 2、安装gitlab社区版本&#xff0c;有需…

arm32机器的ubuntu1804的源突然不能update了

换成x86的官方源不行: Hit:1 http://archive.canonical.com/ubuntu bionic InRelease Get:2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB] Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB] Get:4 http://archive.ubuntu.com/ubu…

GAMES101 学习 2

Lecture 7&#xff1a;Shading 1(lllumination,Shading and Graphics Pipeline) Visibility / occlusion 解决可见性和遮挡的问题 可见性&#xff0c;Z-buffering Z-Buffer 深度缓存 Idea&#xff1a; Store current min. z-value for each sample (pixel)Needs an additi…

python学习3:unittest测试框架初学习

python内置测试框架 unittest&#xff08;xUnit家族成员 参考JUnit&#xff09;doctest&#xff1a; 假设被测试目标: def add(a,b):c a breturn c创建一个"test_同名"的文件夹 基本用法 1 创建测试用例 1 定义TestCase的子类 2 定义test_开头的方法 3 在方法…

vue-resource发送请求

导入依赖 终端输入 npm i vue-resource 使用插件 在main.js中应用插件 import Vue from "vue"; import App from "./App.vue" //引入插件 import vueResource from "vue-resource"; //使用插件 Vue.use(vueResource)new Vue({el:#app,render:h…