MySQL(9)主从复制和读写分离

1.理解MySQL主从复制原理。

复制是MySQL提供的一直高可用、高性能的解决方案,一般用来建立大型的应用,总体来说,分为以下三步:
    (1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
    (2)slave将master的binary log events拷贝到它的中继日志(relay log);
    (3)slave重做中继日志中的事件,将改变反映它自己的数据。

2.完成MySQL主从复制。 

=============================================================

1.在主服务器(master)上

启用二进制日志

选择一个唯一的server-id

创建具有复制权限的用户

2.在从服务器(slave)上

启用中继日志(二进制日志可开启,也可不开启)

选择一个唯一的server-id

连接至主服务器,并开始复制

==============================================================

1)设置server-id值并开启binlog参数

[mysqld]

log-bin = mysql-bin

server_id = 1

停止数据库# systemctl stop mysqld

启动数据库#systemctl start mysqld

show variables like '%log_bin%';

可见log-bin 开

2)建立同步账号

mysql> grant replication slave  on *.* to  rep@'192.168.95.%' identified by'123456';

mysql> show  grants   for   rep@'192.168.95.%';

3)锁表设置只读

为后面备份准备,注意生产环境要提前申请停机时间;

mysql> flush  tables with read lock;

提示:如果超过设置时间不操作会自动解锁。

mysql> show variables  like'%timeout%';

测试锁表后是否可以创建数据库:

4)查看主库状态

查看主库状态,即当前日志文件名和二进制日志偏移量

mysql> show  master status;

5)备份数据库数据

# mysqldump -uroot -p -A -B |gzip >   /backup/mysql/mysql_bak.$(date +%F).sql.gz

6)解锁

mysql> unlock  tables;

7)主库备份数据上传到从库

scp mysql_bak.2021-01-26.sql.gz 192.168.83.134:/tmp

从库上设置

1)设置server-id值并关闭binlog参数

停止数据库# systemctl stop mysqld

启动数据库#systemctl start mysqld

2)还原从主库备份数据

# cd /server/backup/

# gzip -d mysql_bak.2015-11-18.sql.gz

# mysql -uroot -p < mysql_bak.2015-11-18.

sql检查还原:

# mysql -uroot -p -e 'show databases;'

3)设定从主库同步

4)启动从库同步开关

mysql> start slave;

检查状态:show  slave status\G

3.完成MySQL读写分离配置

Mycat实现MySQL主从复制读写分离

MyCAT的安装及部署

链接:https://pan.baidu.com/s/16Z7NFKuL2WX8b1ZKpk9AwA
提取码:yang

1>、部署jdk环境MyCAT用Java开发,需要有JAVA运行环境,mycat依赖jdk1.7的环境

rpm -ivh jdk-8u144-linux-x64.rpm

测试 :  java -version

2>、安装Mycat

链接:https://pan.baidu.com/s/1bkDv1WkwXXr2YzBtvCRY8w
提取码:yang

tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

3)添加环境变量

export PATH=$PATH:/usr/local/mycat/bin

[root@localhost mycat]# source /etc/profile.d/mycat.sh (当前生效)

3>、读写分离配置

1)不使用Mycat托管MySQL主从服务器,简单使用如下配置

#注意:配置前备份下配置文件

先做一个备份吧

打开

vim schema.xml

(1)<schema name="TESTDB"checkSQLschema="false"sqlMaxLimit="100"dataNode="dn1">

这里的TESTDB就是我们所宣称的数据库名称,必须和server.xml中的用户指定的数据库名称一致。添加一个dataNode="dn1",是指定了我们这个库只有在dn1上,没有分库。

(2)<dataNode name="dn1"dataHost="localhost1"database="db1" />

这里只需要改database的名字,就是你真是的数据库上的数据库名,可根据自己的数据库名称修改。

(3) <dataHostname="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1"slaveThreshold="100">

balance

1、balance=0不开启读写分离机制,所有读操作都发送到当前可用的writehostle

.2、balance=1全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1->S1,M2->S2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。

3、balance=2所有读操作都随机的在readhost和writehost上分发

writeType负载均衡类型,目前的取值有3种:

1、writeType="0", 所有写操作发送到配置的第一个writeHost。

2、writeType="1",所有写操作都随机的发送到配置的writeHost。

3、writeType="2",不执行写操作。

switchType

1、switchType=-1表示不自动切换

2、switchType=1默认值,自动切换

3、switchType=2基于MySQL 主从同步的状态决定是否切换

datahost其他配置

<dataHost name="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1">

maxCon="1000":最大的并发连接数

minCon="10":mycat在启动之后,会在后端节点上自动开启的连接线程

tempReadHostAvailable="1"

这个一主一从时(1个writehost,1个readhost时),可以开启这个参数,如果2个writehost,2个readhost时

<heartbeat>select user()</heartbeat> 监测心跳

(4)写与读

4>、创建管理用户

grant insert,delete,update,select on db1.* to mycat@'192.168.83.%' identified by '123456';

收回权限

revoke INSERT, UPDATE, DELETE ON school.* from 'mycat'@'192.168.83.%';

配置基本完成

 

 

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

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

相关文章

NoSQL(1)

1、简述redis应用场景。 Redis 概念&#xff1a;Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;即远程字典服务&#xff0c;是用C语言开发的一个开源的高性能键值对&#xff08;key-value&#xff09;数据库。特征&#xff1a; 数据间没有必然的联系内部…

NoSQL(2)

1、string list hash结构中&#xff0c;每个至少完成5个命令&#xff0c;包含插入 修改 删除 查询&#xff0c;list 和hash还需要增加遍历的操作命令 1、 Keys相关的命令操作&#xff1a; &#xff08;1&#xff09; 查看key是否存在&#xff1a; EXISTS name #判断该键是…

NoSQL(3)

1、什么是MongoDB ? MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为…

Qt图形界面编程入门(3)

公有成员和私有成员 从访问权限上分&#xff0c;类的成员又分为&#xff1a;公有成员&#xff08;public&#xff09;、私有成员&#xff08;private&#xff09;和保护成员&#xff08;protected&#xff09;三类。 公有成员用public来说明。这部分成员可以在程序中通过“…

Qt图形界面编程入门(5)

三&#xff0c;继承和多态 继承是定义新类的一种机制&#xff0c;使用这种机制创建新类时只需要声明新类和已创建类之间的差别 对应一个继承关系&#xff0c;创建的新类称为子类&#xff0c;被继承的类称为父类或基类。子类可以使用父类定义的属性和方法&#xff0c;也可以…

TensorFlow深度学习应用开发实战(深度学习简介和开发环境搭建)

一、深度学习的发展及其应用 1.1 深度学习的发展历程 1956年&#xff0c;John McCarthy&#xff08;约翰麦卡锡&#xff09;等人在美国达特茅斯学院&#xff08;Dartmounth College&#xff09;开会探讨如何使用机器模拟人的智能时&#xff0c;提出了“人工智能”这一概念。 …

瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型

一、瀑布模型 1、按照传统的瀑布模型开发软件&#xff0c;有下述几个特点。 ①阶段间具有顺序性和依赖性 阶段间具有顺序性和依赖性&#xff0c;这个特点有两重含义&#xff1a; 1&#xff0c;必须等前一阶段的工作完成之后&#xff0c;才能开始后一阶段的工作&#xff1b;…

Linux基础命令(1)

1.强大好用的Shell Shell是一个命令工具。Shell&#xff08;也称终端或壳&#xff09;充当的是人与内核&#xff08;硬件&#xff09;之间的翻译官&#xff0c;用户把一些命令“告诉”终端&#xff0c;它会调用相应的程序服务去完成某些工作。 现在红帽系统在内的许多主流Lin…

软件工程(Rational统一过程)

Rational统一过程&#xff08;Rational Unified Process,RUP&#xff09;是由Rational软件公司推出的一种完整而且完美的软件过程。 RUP总结了经过多年商业化验证的六条最有效软件开发经验&#xff0c;这些经验被称为“最佳实践”。 1&#xff0c;最佳实践 &#xff08;1&am…

软件工程(敏捷过程和极限编程)

1&#xff0c;敏捷过程 为了使软件开发团队具有高效工作和快速响应变化的能力&#xff0c;17位著名的软件专家于2001年2月联合起草了敏捷软件开发宣言。 敏捷软件开发宣言由下述4个简单的价值观声明组成。 &#xff08;1&#xff09;个体和交互胜过过程和工具 优秀的团队成…

软件工程(可行性研究讲解)

可行性研究 可行性研究的目的&#xff0c;就是用最小的代价在尽可能短的时间内确定问题是否能够解决。&#xff08;只是寻找客户所提需求的解决方案&#xff0c;能干还是不能干的问题。&#xff09; 可行性研究实质上是要进行一次大大压缩简化了的系统分析和设计的过程。 GB…

软件工程(系统流程图讲解)

系统流程图是概括地模型物理系统的工具。 基本符号 系统符号 系统流程图的习惯画法是使信息在图中从顶向下或从左到右流动。 例子 某装配厂有一座存放零件的仓库&#xff0c;仓库中现有的各种零件的数量以及每种零件的库存量临界值等数据记录在库存清单主文件中。当仓库中零…

软件工程(数据流图)

数据流图有4种基本符号&#xff1a; 正方形或&#xff08;立方体&#xff09;表示数据的源点或者终点&#xff1b; 圆角矩形&#xff08;或圆形&#xff09;代表变换数据的处理&#xff1b; 开口矩形&#xff08;或两条平行横县&#xff09;代表数据存储&#xff1b; 箭头表…

Python二级笔记(10)

知识点&#xff1a; 1&#xff0c;线性表的链式存储结构中每个结点都由数据域与指针域两部分组成&#xff0c;增加了存储空间&#xff0c;所以一般要多于顺序存储结构。 2&#xff0c;软件测试是为了发现错误而执行程序的过程&#xff0c;测试要以查找错误为中心。 3&#x…

Qt图形界面编程入门(6)

类的私有继承方式 ①基类公有成员和保护成员都作为私有成员被派生类继承&#xff0c;派生类自身的函数可直接访问他们&#xff0c;但是派生类对象则只能通过本类的公有函数间接地访问它们。 ②基类的私有成员成为派生类中更加封闭的私有成员&#xff0c;派生类内部成员函数也…

Qt图形界面编程入门(7)

派生类的构造函数和析构函数 基类的构造函数和析构函数不能被继承。 在派生类中&#xff0c;如果派生类新增的成员进行初始化&#xff0c;就必须加入新的构造函数。与此同时&#xff0c;对所有从基类继承下来的成员的初始化工作还是由基类的构造函数完成&#xff0c;必须在派…

Python二级笔记(11)

知识点&#xff1a; 1&#xff0c;在栈中&#xff0c;栈顶指针top动态反映了栈中元素的变化情况&#xff0c;在循环队列中&#xff0c;队尾指针和队头指针的动态变化决定队列的长度&#xff0c;在链式存储结构中.无论是循环链表还是线性链表&#xff0c;插入和删除元素时&…

Python二级笔记(12)

知识点&#xff1a; 1&#xff0c;机器周期的同步标准是指CPU访问存储器一次所需要的时间 2&#xff0c;int(&#xff09;函数可以将整数字符串转换成整数,也可以将浮点数转化为整数&#xff0c;但是不能将其他字符串转换成整数。 3&#xff0c;当max(函数的参数是字典时&am…

Python二级笔记(13)

知识点&#xff1a; 1&#xff0c;机器数&#xff0c;不管是正数还是负数&#xff0c;其补码的符号位取反即是偏移码。 2&#xff0c;循环队列是队列的一种顺序存储结构 3&#xff0c; break语句会跳出break所在的最内层循环; try中 的语句出错时会被捕获异常,执行except下的…

Python二级笔记(14)

知识点&#xff1a; 1&#xff0c;在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发不重复地访问到表中其他所有的结点。 单向链表只有从头指针开始&#xff0c;沿各结点的指针扫描链表中的所有结点。 双向链表从任何一一个结点位置出发就可以访问到表中其他所有结…