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

news/2024/7/8 3:49:32

详解搭建搭建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://lihuaxi.xjx100.cn/news/1280151.html

相关文章

解析PostgreSQL触发器记录数据库操作的SQL语句

引言 在数据库操作中&#xff0c;跟踪和记录执行的 SQL 语句对于调试和审计非常重要。本篇博客将介绍如何使用 PostgreSQL 触发器来记录数据库操作的 SQL 语句&#xff0c;并提供一个解决方案。 问题背景 在许多应用程序中&#xff0c;我们经常需要了解数据库中执行的 SQL 语…

【Java入门】方法及方法重载

方法及方法重载 方法的定义、调用及其注意事项 方法&#xff1a;是将具有独立功能的代码块组织成为一个整体&#xff0c;使其具有特殊功能的代码集 1、定义格式: 修饰符 返回值类型 方法名(参数){ 方法体; 返回值; } 参数的种类:形式参数和实际参数 形参:方法声明的不具有数…

chatgpt赋能python:Python要点:从入门到精通

Python要点&#xff1a;从入门到精通 Python是一门高级编程语言&#xff0c;是一种解释型、面向对象、动态数据类型的语言。它的设计思想是“代码易读易写”&#xff0c;在数据科学、人工智能、自动化测试、Web开发等领域广泛应用。本文将从入门到精通的角度来介绍Python的要点…

h2database BTree 设计实现与查询优化思考 | 京东云技术团队

h2database 是使用Java 编写的开源数据库&#xff0c;兼容ANSI-SQL89。既实现了常规基于 BTree 的存储引擎&#xff0c;又支持日志结构存储引擎。功能非常丰富&#xff08;死锁检测机制、事务特性、MVCC、运维工具等&#xff09;&#xff0c;数据库学习非常好的案例。 本文理论…

机器学习4:基本术语

机器学习涉及很多专业术语&#xff0c;为了避免混淆概念&#xff0c;我们在学习中&#xff0c;首先必须统一语言&#xff1a;即充分理解专业术语&#xff0c;并采用专业术语来描述机器学习相关的内容。本节将介绍几种基本的机器学习术语。 目录 1.标签 2.特征 3.示例 4.模…

树莓派4B移植5G模块驱动(RG200U-CN)

1、查看Linux内核版本 uname -r2、根据内核版本在Github上下载Linux内核源码&#xff08;最好再Github上确定一下有没有这个分支&#xff09; git clone --depth1 https://github.com/raspberrypi/linux --branch rpi-5.15.y3、下载依赖库 sudo apt-get updatesudo apt-get …

Linux磁盘分区和文件系统的关系

一、Linux磁盘相关命令及作用&#xff1a; 1. df命令&#xff1a;用于显示文件系统的磁盘空间使用情况。 2. du命令&#xff1a;用于查看文件或目录的磁盘使用情况。 3. fdisk命令&#xff1a;用于磁盘分区表的创建和管理。 4. mkfs命令&#xff1a;用于创建文件系统。 5. moun…

【css】实现单独一区域滚动,不影响整体滚动

来源&#xff1a;css实现单独一区域滚动&#xff0c;不影响整体滚动&#xff0c;两种方法 方法 第一种&#xff1a;就该区域高度固定&#xff0c;然后overflow-auto 第二种&#xff1a;使用属性overscroll-behavior: contain; .overfolw{position: absolute;width: 100%;ov…