【数据库七】搭建MySQL主从复制和读写分离详解

news2024/12/23 17:12:05

详解搭建搭建MySQL主从复制和读写分离

  • 1.案例实施:搭建MySQL主从复制
    • 1.1 主节点数据库(CentOS 7-5)
    • 1.2 从节点数据库(CentOS 7-6)
    • 1.3 从节点数据库(CentOS 7-7)
    • 1.4 验证MySQL主从复制
  • 2.案例实施:搭建MySQL读写分离
    • 2.1 Amoeba服务器(CentOS 7-4)
    • 2.2 客户端(CentOS 7-3)
    • 2.3 主节点数据库(CentOS 7-5)
    • 2.4 从节点数据库(CentOS 7-6)
    • 2.5 验证MySQL读写分离和负载均衡
    • 2.6 从节点数据库(CentOS 7-7)

接上文MySQL主从复制和读写分离知识点讲解

1.案例实施:搭建MySQL主从复制

在这里插入图片描述

1.1 主节点数据库(CentOS 7-5)

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)搭建时间同步服务器

rpm -q ntp ntpdate
vim /etc/ntp.conf
restrict default nomodify
server ntp.aliyun.com

ntpdate ntp.aliyun.com  #查看aliyun时间同步服务器
systemctl restart ntpd   #重启ntp时间服务
ntpq -p

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)修改/etc/my.cnf文件,开启二进制日志

vim /etc/my.cnf
server-id = 1  #设置主服务器的id号为1
log-bin=mysql-bin
binlog_format=mixed

systemctl restart mysqld

在这里插入图片描述
(3)添加允许从服务器复制的用户名和密码

mysql -uroot -p123
grant replication slave on *.* to 'myslave'@'%' identified by '123';
flush privileges;
show master status;

在这里插入图片描述

1.2 从节点数据库(CentOS 7-6)

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)设置计划性任务,使从服务器与主服务器保持时间同步

ntpdate 192.168.80.50    #连接主服务器的IP地址
crontab -e   #在从服务器上执行计划性任务,每30分钟向主服务器进行一次时间同步
*/30 * * * * /usr/sbin/ntpdate 192.168.80.50

systemctl restart crond   #重启计划性服务
crontab -l   #查看计划性任务

在这里插入图片描述

(2)修改/etc/my.cnf配置文件,开启从服务器的中继日志

vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index

systemctl restart mysqld

在这里插入图片描述
(3)设置从服务器连接复制主服务器的二进制日志数据

mysql -uroot -p123
change master to master_host='192.168.80.50',master_port=3306,master_user='myslave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=592;
start slave;
show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.80.50
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 592
               Relay_Log_File: relay-log-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes  #查看到I/O进程和SQL进程都为Yes,表示主从服务器同步复制成功
            Slave_SQL_Running: Yes

在这里插入图片描述

1.3 从节点数据库(CentOS 7-7)

实验步骤操作同CentOS 7-6完全一样,此处省略!!!

1.4 验证MySQL主从复制

(1)在主服务器中添加数据记录

在这里插入图片描述
(2)在从服务器中查看数据记录是否同步发生更改
在这里插入图片描述
在这里插入图片描述

2.案例实施:搭建MySQL读写分离

在这里插入图片描述
强调说明: 该“案例实施:搭建MySQL读写分离”,是在“案例实施:搭建MySQL主从复制”的基础上进行的,因此此处省略MySQL主从复制的步骤!!!

2.1 Amoeba服务器(CentOS 7-4)

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)安装 Java 环境

cd /opt/
rz -E
amoeba-mysql-binary-2.2.0.tar.gz  jdk-6u14-linux-x64.bin
cp /opt/jdk-6-u14linux-x64.bin /usr/local/
cd /usr/local/
chmod +x /usr/local/jdk-6u14-linux-x64
./jdk-6u14-linux-x64.bin
//按yes,按enter

(2)安装Amoeba软件

cd /opt/
mkdir /opt/amoeba
tar xf amoeba-mysql-binary-2.2.0.tar.gz -C amoeba 
mv /opt/amoeba /usr/local/
chmod -R 755 /usr/local/amoeba/

(3)将Amoeba服务的路径加入到系统环境变量中

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6.0_14
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$AMOEBA_HOME/bin

source /etc/profile
java -version

在这里插入图片描述
在这里插入图片描述
(4)开启Amoeba服务

cd /usr/local/amoeba/bin
./amoeba

在这里插入图片描述
(5)配置Amoeba读写分离,两个Slave 读负载均衡

修改amoeba.xml配置文件,定义客户端连接Amoeba服务器的用户名和密码;

cp /usr/local/amoeba/conf/amoeba.xml /usr/local/amoeba/conf/amoeba.xml.bak
vim /usr/local/amoeba/conf/amoeba.xml
  <property name="user">admin</property>     #在30行左右定义客户端连接amoeba服务器的用户名
  <property name="password">123</property>    #在32行左右定义客户端连接amoeba服务器的密码

  <property name="writePool">master</property>      #取消该行注释,在118行左右设置写服务器池名master
  <property name="readPool">slaves</property>       #取消该行注释,在119行左右设置读服务器池名slaves

在这里插入图片描述

在这里插入图片描述
修改dbServers.xml配置文件,定义Amoeba服务器连接主从数据库的用户名和密码;

cp /usr/local/amoeba/conf/dbServers.xml /usr/local/amoeba/conf/dbServers.xml.bak
vim /usr/local/amoeba/conf/dbServers.xml
###22行-24行内容需要注释
   <!-- mysql schema 
   <property name="schema">test</property>
   -->
   
  <property name="user">myamoeba</property>    #在27行左右定义amoeba服务器连接主从数据库的用户名
  <property name="password">123</property>     #在30行左右定义amoeba服务器连接主从数据库的密码

 <dbServer name="master"  parent="abstractServer">    #在46行左右设置写服务器池名master
 <property name="ipAddress">192.168.80.50</property>   #在49行左右设置写服务器池的IP地址

  <dbServer name="slave1"  parent="abstractServer">    #在53行左右设置从节点名slave1
  <property name="ipAddress">192.168.80.60</property>   #在56行左右设置从节点名的IP地址

  <dbServer name="slave2"  parent="abstractServer">    #在60行左右设置从节点名slave2
  <property name="ipAddress">192.168.80.70</property>   #在63行左右设置从节点名的IP地址


  <dbServer name="slaves" virtual="true">    #在67行左右设置读服务器池名slaves
  <property name="poolNames">slave1,slave2</property>   #在73行左右添加从节点的名称

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(6)启动Amoeba软件,并通过端口验证是否开启

cd /usr/local/amoeba/bin
./amoeba start &
netstat -lntp | grep 8066

在这里插入图片描述

2.2 客户端(CentOS 7-3)

(1)关闭防火墙,并禁止开机自启

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(2)安装并启动mariadb数据库

yum install -y mariadb mariadb-server
systemctl start mariadb
netstat -lntp | grep 3306

在这里插入图片描述
(3)登录Amoeba服务器代理访问mysql

mysql -u admin -p123 -h 192.168.80.40 -P 8066   

通过amoeba服务器代理访问mysql ,在通过客户端连接mysql后写入的数据只有主服务会记录,然后同步给从服务器
在这里插入图片描述

2.3 主节点数据库(CentOS 7-5)

(1)开放权限给Amoeba用户(myamoeba) 访问

grant all on *.* to 'myamoeba'@'192.168.80.%' identified by '123';
flush privileges;

2.4 从节点数据库(CentOS 7-6)

(1)开放权限给Amoeba用户(myamoeba) 访问

grant all on *.* to 'myamoeba'@'192.168.80.%' identified by '123';
flush privileges;

2.5 验证MySQL读写分离和负载均衡

查看并确定目前主从复制,以及Amoeba服务器代理运行成功;

select * from location;

在这里插入图片描述
测试读写分离;

###关闭两个从节点数据库
stop slave;

###在客户端中新添加两条数据记录
insert into location values('hhh','gggg');
insert into location values('cgy','hjue');


###在所有主机数据库中查看结果
select * from location;

###两个从节点数据库开启主从复制
start slave;
select * from location;

在这里插入图片描述

测试负载均衡;

###在节点数据库1中添加一条数据记录
insert into location values('LYU','LYU');

###在节点数据库2中添加另一条数据记录
insert into location values('HESW','HESW');

###在客户端反复执行select命令查看
select * from location;


在这里插入图片描述
在这里插入图片描述

2.6 从节点数据库(CentOS 7-7)

两个从节点服务器的操作步骤完全一样,同从节点数据库(CentOS 7-6),此处省略!!!

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

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

相关文章

Scala的foldLeft与foldRight详解

foldLeft与foldRight是特质TraversableOnce定义的高阶函数&#xff0c;直译过来为向左折叠和向右折叠。具体实现如下摘出的代码所示&#xff1a; trait TraversableOnce[A] extends Any with GenTraversableOnce[A] {deprecated("Use foldLeft instead of /:", &quo…

lesson7-1 Zigbee协议栈的使用

目录 协议栈的使用 协议栈的安装和协议栈工程创建 协议栈工程配置 选项卡选择 用户代码编写注意 信道选择及PANID分配 协议栈的使用 协议栈的安装和协议栈工程创建 首先进行协议栈的安装 如何创建自己的协议栈工程&#xff1a; &#xff08;1&#xff09;先把整个协议…

ansible实训-Day1(Liunx基础问题总结及ansible安装环境前置部署)

一、前言 该篇是对本学期Ansible实训第一天内容的原理性总结&#xff0c;主要包括Liunx相关问题等基础性的问题总结以及ansible安装环境的前置部署。 二、Liunx是什么 Linux是一种自由和开放源代码的Unix操作系统&#xff0c;最初由芬兰人Linus Torvalds于1991年创建。与其他许…

hot20-旋转图像

leetcode原题链接&#xff1a;旋转图像 题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&am…

OpenCV 学习笔记(C++)(1.4W字)

一切图像皆Mat OpenCV中图像对象的创建与复制 Mat基本结构 Mat对象数据组成&#xff1a;头部和数据部分&#xff0c;头部存储图像的属性&#xff08;大小、宽高、图像类型&#xff1a;浮点数类型、字节类型、16位整型、32位整型、双精度浮点型&#xff0c;通道数量和获取途径…

【半监督图像分类 2022 CVPR 】Semi-ViT

【半监督图像分类 2022 CVPR 】Semi-ViT 论文题目&#xff1a;Semi-supervised Vision Transformers at Scale 中文题目&#xff1a; 论文链接&#xff1a;https://arxiv.org/abs/2208.05688 论文代码&#xff1a;https://github.com/amazon-science/semi-vit 发表时间&#xf…

数据结构07:查找[C++][平衡二叉排序树AVL]

图源&#xff1a;文心一言 考研笔记整理1w字&#xff0c;小白友好、代码可跑&#xff0c;请小伙伴放心食用~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、写BUG、画导图、画配图~&#x1f9e9;&#x1f9e9; 参考用书&#xff1a;王道考研《2024年 数据结构考研复习…

Linux 超级漂亮的 Shell

先来一张美图 zsh 介绍 1 Linux shell Linux/Unix 提供了很多种 Shell&#xff0c;为毛要这么多 Shell&#xff1f; 难道用来炒着吃么&#xff1f;那我问你&#xff0c;你同类型的衣服怎么有那么多件&#xff1f;花色&#xff0c;质地还不一样。写程序比买衣服复杂多了&#xf…

在vite+vue3中使用less

目录标题 一、首先&#xff0c;安装插件二、在 vite.config.js中配置三、最后在模版里声明css类型 一、首先&#xff0c;安装插件 npm install less npm install less-loader二、在 vite.config.js中配置 css: {preprocessorOptions: {less: {math: "always", // 括…

VS里拉取时候,变成变基中,变成分离分支状态,git 头指针分离于 baf67ff

分离头指针&#xff08;detached HEAD&#xff09; 通常&#xff0c;我们工作在某一个分支上&#xff0c;比如 master 分支。这个时候 master 指针和 HEAD 指针是一起前进的&#xff0c;每做一次提交&#xff0c;这两个指针就会一起向前挪一步。但是在某种情况下&#xff08;例…

docker搭建达梦数据库

搭建达梦数据库 搭建达梦数据库 拉取镜像 # 拉取镜像 docker pull registry.cn-shanghai.aliyuncs.com/techerwang/dbhub:jem_dm8 或去官网下载 https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html我是选择了去官网下载 然后上传到linux服务器 do…

Selenium教程__按钮的点击、文本框的输入和清除操作(3)

from selenium import webdriverdriver webdriver.Chrome() driver.maximize_window() driver.get("https://www.baidu.com")# 定位元素 input_box driver.find_element_by_id("kw") search_btn driver.find_element_by_id("su")# sen_keys&a…

pycharm修改文件大小限制

场景&#xff1a; 方法&#xff1a; 打开pycharm 安装目录下的idea.properties 增加配置项&#xff1a;idea.max.intellisense.filesize99999

电脑word如何转化为pdf格式,其实非常简单!

作为一名在职场工作多年的资深达人&#xff0c;我们都知道工作中常常需要转换各种文件格式&#xff0c;其中最常见的就是Word文档和PDF文档。有时候根据领导、客户或甲方的要求&#xff0c;我们需要进行格式转换&#xff0c;尤其是将Word转换为PDF格式。PDF格式的文件不仅方便阅…

Spring基础知识(四)

目录 1.Spring包含的模块主要有什么 2.Core Container的作用 3.Data Access/Integration模块的作用 4.AOP模块的作用 5.Spring Web模块的作用 6.Test模块的作用 7.如何将一个类声明为Bean 8.Component和Bean的区别 9.能够注入Bean的注解有什么 10.Resource注解 1.Spr…

【Java】Java 中格式化字符串:String.format() 方法

本文仅供学习参考&#xff01; 相关文章地址&#xff1a; https://www.cnblogs.com/Dhouse/p/7776780.html https://www.javatpoint.com/java-string-format https://www.geeksforgeeks.org/java-string-format-method-with-examples/ 前言 虽然System.out.println()适合调试和…

5 STM32复位和时钟控制

STM32的复位功能 系统复位&#xff1a; 系统复位将复位除时钟控制寄存器CSR中的复位标志和备份区域中的寄存器以外的所有寄存器为它们的复位数值。&#xff08;按键复位和软件复位属于系统复位&#xff09; 电源复位&#xff1a; 电源复位将复位除了备份区域外的所有寄存器。…

【Flink】DataStream API使用之转换算子(Transformation)

转换算子&#xff08;Transformation&#xff09; 数据源读入数据之后&#xff0c;就是各种转换算子的操作&#xff0c;将一个或者多个DataSream转换为新的DataSteam&#xff0c;并且Flink可以针对一条流进行转换处理&#xff0c;也可以进行分流或者河流等多流转换操作&#xf…

sql with子语句的理解

在用sqlite时&#xff0c;用到了with子语句&#xff0c;记录下对其的理解 目的&#xff1a;在1个字段中找到真正包含的数据&#xff0c;一般用于like&#xff0c;但该字段可能是复杂的字符串数组。 例子数据&#xff0c;如&#xff1a; 【E2806894200050010B93C473,123456】…

软件分享:Cpu-Z电脑CPU检测工具介绍(附下载)

目录 一、软件介绍 二、功能介绍 三、使用方法 1、通过 CPU-Z 查看 CPU 信息 2、缓存信息 3、主板信息 4、内存信息 5、内存规格信息&#xff08;SPD&#xff09; CPU是计算机中负责读取指令&#xff0c;对指令译码&#xff0c;并执行指令的核心部件。CPU自产生以来&am…