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 将数据存储为…

Python二级笔记(1)

操作题 1&#xff0c;宽度为30字符&#xff0c;星号字符填充&#xff0c;居中对齐。如果输入字符串超30位&#xff0c;则全部输出。 例如:键盘输入字符串q为‘abcd’&#xff0c;屏幕输出abcd 代码&#xff1a; s input(请输入一个字符串&#xff1a;) print({:*^30}.form…

Python二级笔记(2)

知识点&#xff1a; 1&#xff0c;链表可以是线性结构也可以是非线性结构 线性表的链式存储结构称为线性链表&#xff1b;链表上一种物理存储单元上非连续&#xff0c;非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的&#xff0c;链表可以说…

Python二级笔记(3)

知识点&#xff1a; 1&#xff0c;排序可以在不同的存储结构上实现&#xff0c;但快速排序法适于顺序存储的线性表&#xff0c;不适用于链式存储的线性表。 堆栈序适用于线性结构&#xff0c;不适用于非线性结构 2&#xff0c;基本路径测试根据软件过程性描述中的控制流确定程…

软件工程学简述

软件危机 软件危机是指计算机软件的开发和维护过程中所遇到的一系列严重问题。&#xff08;考试中名词解释或者选择题为主&#xff09; 软件危机的典型表现 &#xff08;1&#xff09;对软件开发成本和进度的估计常常很不准确。 &#xff08;2&#xff09;用户对“已完成的…

Python二级笔记(4)

知识点&#xff1a; 1&#xff0c;冒泡排序、快速排序、简单插入排序、简单选择排序在最坏情况下比较次数均为n(n-1)/2&#xff0c;堆排序在最坏情况下比较次数为nlog(2↓)n,在最坏情况下希尔排序需要比较的次数是n(↑r)&#xff08;1<r<2&#xff09;。 2&#xff0c;…

Python二级笔记(5)

知识点&#xff1a; 1&#xff0c;树的度&#xff0c;及树中存在的最大度数&#xff1b;如树的度为3&#xff0c;即树中只存在度为0&#xff0c;1&#xff0c;2&#xff0c;3的结点。 2&#xff0c;设循环队列的存储空间为Q&#xff08;1:m&#xff09;,初始状态为空。在循环…

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

一、类和对象 1&#xff0c;面向过程程序设计&#xff08;自顶向下设计&#xff09; 分析出解决问题所需的步骤&#xff0c;然后用函数把这些步骤一一实现&#xff0c;使用的时候一个一个调用 过程式设计对于比较复杂的问题&#xff0c;或是在开发中需求变化比较多的时候&am…

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

二&#xff0c;指针和引用 共同点&#xff1a;它们都代表其他变量占据的某一块内存区&#xff0c;通过指针或引用都可以对他们代表的其他变量进行操作。 以下语句利用指针对变量赋值&#xff1a; int m; int *p; //指针定义 p &m; //将m的内存地址赋给p *p 5;…

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

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

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

构造函数和析构函数 构造函数是一个与类同名的特殊的公有成员函数。 创建类对象时构造函数会被调用&#xff0c;且只调用一次/ 构造函数无返回类型。 默认构造函数格式&#xff1a; 类名&#xff08;&#xff09;{.......} Account(){ //无返回类型&#xff0c;无参数I…

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

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

tensorflow安装教程

https://note.youdao.com/ynoteshare1/index.html?iddddc63e6a2dfb70605ae9753bcc71a60&typenote 如果失效请下载文件查看&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/15FZETB3rzcpH-LOOpmpjTQ 提取码&#xff1a;6jfm 如果安装包找不到请点击链接提取&am…

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

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

路由与交换技术(铺垫内容)

一、OSI参考模型 层次 结构 功能 数据 地址 设备 7 应用层 用户接口 原始文件 主机名 主机 6 表示层 压缩&a…

Python二级笔记(6)

一、知识点 1&#xff0c;continue语句用于中断本次循环的执行&#xff0c;继续执行下一轮循环的条件&#xff0c;表示跳出当前循环&#xff1b;Python中的for、while循环都有一个可选的else语句&#xff0c;如果break语句终止循环&#xff0c;那么else语句将不会执行。 2&am…

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

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

Linux基础命令(1)

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