实现mysql的主从复制、实现MySQL的读写分离与负载均衡

实验环境

(注明)以下的所有关于yum和rpm以及tar的软件需要自己准备,没有的话可以私信博主

实验目标:

1.实现mysql主从复制

2.实现mysql读写分离与负载均衡

实验一、搭建mysql主从复制

1.建立时间同步环境,在主节点上搭建时间同步服务器

1)安装NTP(udp 123)

[root@centos2 ~]# yum -y install ntp(需要提前配置yum仓库)

2)配置NTP

[root@centos2 ~]# vim /etc/ntp.conf

server 127.127.1.0   //手工写 需要同步的上层服务器(使用本地时钟)

fudge 127.127.1.0 stratum 8  //手工写 同步上层服务器的stratum,大小不能超过或等于16

3)重启服务

[root@centos2 ~]# systemctl  restart  ntpd

2.在从节点上进行时间同步

[root@centos3 ~]# yum  -y  install  ntpdate

[root@centos3 ~]# /usr/sbin/ntpdate  192.168.1.2

3.关闭每台服务器防火墙

4.安装mysql过程略

5.启动mysql

#systemctl   restart  mysqld

6.配置mysql主服务器

1)在/etc/my.cnf中修改或增加下面内容

server_id  =  11  //修改

log_bin=master-bin    //修改  定义bin-log的文件名   (默认保存在数据目录下)

log-slave-updates=true  //增加 slave更新是否记入日志

2)重启mysql服务

[root@centos2 ~]# systemctl  restart mysqld

3)登录mysql程序,给从服务器授权复制权限

[root@centos2 ~]# mysql -u root -p

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

mysql> flush  privileges;

mysql> show  master  status;

+-------------------+----------+--------------+------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| master-bin.000001 |      342 |              |                  |

+-------------------+----------+--------------+------------------+

file列显示日志名,position列显示偏移量

7.配置两台从服务器

1)在第一台从服务器/etc/my.cnf中修改或增加下面内容

server-id  =  22  //修改

relay_log=relay-log-bin //增加 定义中继日志文件名称和路径(默认保存在数据目录下)

relay-log-index=slave-relay-bin.index  //增加 定义中继日志索引文件名(记录很多的中继日志文件)默认情况,中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序 列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪索引文件中目前正使用的中继日志。 默认中继日志索引文件名为host_name-relay-bin.index。默认情况,在从服务器的数据目录中创建这些文件。

2)重启mysql服务

[root@centos3 ~]# systemctl  restart mysqld

3)第二台从服务器只是server-id不同,其他都和第一台一样

server-id  =  33

4)分别登录两台mysql从服务器,配置同步

#mysql  -u root  -p

mysql>change  master to master_host='192.168.1.2',master_user='myslave',

master_password='123456',master_log_file='master-bin.000001',master_log_pos=410;

5)在两台mysql从服务器上启动同步

mysql> start  slave;

6)分别在两台mysql从服务器上查看slave状态,确保以下两个至为YES

mysql> show slave status \G;

  Slave_IO_Running: Yes (I/O线程处于运行状态)

  Slave_SQL_Running: Yes (sql线程处于运行状态)

7)验证主从复制效果

①在主、从服务器上登录mysql

[root@centos2 ~]# mysql -u root -p

②在主服务器上新建数据库db_test

mysql> create database db_tese;

③在两台从服务器上查看数据库

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db_test           |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.02 sec)

实验二、构建mysql读写分离

1.在主机amoeba上安装java环境

[root@centos1 ~]# cp /mnt/jdk-6u14-linux-x64.bin /usr/local/(需要提前准备好软件,这里的路径需要按照你实际的)

[root@centos1 ~]# chmod +x /usr/local/jdk-6u14-linux-x64.bin

[root@centos1 local]# cd /usr/local/

[root@centos1 local]# ./jdk-6u14-linux-x64.bin  //根据提示按回车和yes即可

[root@centos1 local]# vim  /etc/profile

export  JAVA_HOME=/usr/local/jdk1.6  //指向jdk的安装路径

export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$PATH:$HOME/bin

export AMOEBA_HOME=/usr/local/amoeba/

export PATH=$PATH:$AMOEBA_HOME/bin

[root@centos1 local]# mv jdk1.6.0_14/  /usr/local/jdk1.6

[root@centos1 local]# source /etc/profile

[root@centos1 local]# java -version

java version "1.7.0_45"

OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)

OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

说明:CLASSPATH指定java类搜索路径,要使用已经编写好java的类,前提当然是能够找到它们,JVM就是通过CLASSPATH来寻找类的。

java环境已经成功

2.安装并配置amoeba软件

[root@centos1 local]# mkdir /usr/local/amoeba

[root@centos1 local]# tar zxf  /mnt/amoeba-mysql-binary-2.2.0.tar.gz  -C  /usr/local/amoeba

[root@centos1 local]# chmod -R 755 /usr/local/amoeba/

[root@centos1 local]# /usr/local/amoeba/bin/amoeba

amoeba start|stop看到此提示代表amoeba安装成功

3.配置amoeba读写分离,两个slave读负载均衡

①master、slave1和slave2中开放权限给amoeba访问

mysql> grant all on *.* to 'test'@'192.168.1.%' identified by '123.com';

②编辑amoeba.xml配置文件

[root@centos1 local]# vim  /usr/local/amoeba/conf/amoeba.xml

30 <property name="user">amoeba</property>

32 <property name="password">123456</property>

115 <property name="defaultPool">master</property>

117<!--    去掉此行

118 <property name="writePool">master</property>(注意去掉上下行的注释)

119 <property name="readPool">slaves</property>

120 -->去掉此行

③编辑dbServer.xml配置文件

[root@centos1 local]# vim  /usr/local/amoeba/conf/dbServers.xml

26<property name="user">test</property>

28<!--  mysql password  删除此行

29<property name="password">123.com</property>(注意去掉注释此上下注释)

30-->删除此行

45 <dbServer name="master"  parent="abstractServer">

46<factoryConfig>

47 <!-- mysql ip -->

48 <property name="ipAddress">192.168.1.2</property>

49 </factoryConfig>

50 </dbServer>

52 <dbServer name="slave1"  parent="abstractServer">

53 <factoryConfig>

54 <!-- mysql ip -->

55<property name="ipAddress">192.168.1.3</property>

56</factoryConfig>

57</dbServer>

58<dbServer name="slave2"  parent="abstractServer">

59<factoryConfig>

60<!-- mysql ip -->

61<property name="ipAddress">192.168.1.4</property>

62</factoryConfig>

63</dbServer>

65<dbServer name="slaves" virtual="true">

66<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

67 <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->

68 <property name="loadbalance">1</property>

70<!-- Separated by commas,such as: server1,server2,server1 -->

71<property name="poolNames">slave1,slave2</property>

72</poolConfig>

73</dbServer>

④配置无误后,可以启动amoeba软件,默认端口为tcp8066

[root@centos1 local]# /usr/local/amoeba/bin/amoeba start &

4.测试

①在client主机上

  1. #yum  -y  install  mariadb
  2. 然后通过代理访问mysql
  3. [root@centos1 ~]# mysql -u amoeba -p123456 -h 192.168.1.1 -P8066  (-P为大写)

②在master上创建一个表,同步到各个从服务器上,然后关掉各从服务器的slave功能,再插入区别语句

mysql> use db_test;

mysql> create table zang(id int(10),name varchar(10),address varchar(20));

③分别在两台从服务器上

mysql>stop slave;

④然后在主服务器上插入数据

mysql> insert into zang values('1','zhang','this_is_master');

⑤从服务器同步了表,手动插入其他内容

slave1:

mysql> use db_test;

mysql> insert into zang values('2','zhang','this_is_slave1');

slave2:

mysql> use db_test;

mysql> insert into zang values('2','zhang','this_is_slave2');

⑥测试读操作

在client主机上第一次查询的结果如下:

mysql> use db_test;

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    3 | zhang | this_is_slave1 |

+------+-------+----------------+

1 row in set (0.03 sec)

第二次查询结果如下:

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    2 | zhang | this_is_slave2 |

+------+-------+----------------+

1 row in set (0.02 sec)

第三次查询的结果如下:

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    3 | zhang | this_is_slave1 |

+------+-------+----------------+

1 row in set (0.03 sec)

测试写操作.

mysql> insert into zang values('4','zhang','write_test');

但是在客户机上查询不到

最终只能在主服务器上才能看到这条语句内容,说明写操作在master服务器上

mysql> select * from zang;

+------+-------+----------------+

| id   | name  | address        |

+------+-------+----------------+

|    1 | zhang | this_is_master |

|    4 | zhang | write_test     |

+------+-------+----------------+

2 rows in set (0.03 sec)

mysql>

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

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

相关文章

C++BuilderXE 如何让listView按文件名数字排序而非字母排序

int m_nDataColSort0; bool IsAsctrue; void __fastcall TForm1::RzListView4Compare(TObject *Sender, TListItem *Item1, TListItem *Item2, int Data, int &Compare) { if(m_nDataColSort0) { //按列表第二列排序 //CompareCompareText(Item1->SubItems-…

【MySQL精通之路】全文搜索-自然语言全文搜索

1.使用方法 默认情况下&#xff0c;或者使用IN NATURAL LANGUAGE MODE修饰符&#xff0c;MATCH&#xff08;&#xff09;函数对文本集合的字符串执行自然语言搜索。 1.1 集合 集合是FULLTEXT索引中包含的一个或多个列的集合。 1.2 搜索字符串 搜索字符串作为AGINST&#x…

高效定时器设计方案——层级时间轮

层级时间轮实现高性能定时器 此篇介绍时间轮&#xff0c;它的时间复杂度是最优的&#xff0c;插入、查找&#xff08;最小&#xff09;、删除都是O&#xff08;1&#xff09;&#xff0c;很恐怖的性能 这里示例一个三层时间轮&#xff0c;模拟时钟表盘的运作方式&#xff0c;…

力扣爆刷第142天之二叉树五连刷(构造树、搜索树)

力扣爆刷第142天之二叉树五连刷&#xff08;构造树、搜索树&#xff09; 文章目录 力扣爆刷第142天之二叉树五连刷&#xff08;构造树、搜索树&#xff09;一、106. 从中序与后序遍历序列构造二叉树二、654. 最大二叉树三、617. 合并二叉树四、700. 二叉搜索树中的搜索五、98. …

卷积神经网络(CNN)详细介绍及其原理详解

卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是深度学习中非常重要的一类神经网络&#xff0c;主要用于图像识别、图像分类、物体检测等计算机视觉任务。本文将详细介绍卷积神经网络的基本概念、结构组成及其工作原理&#xff0c;并…

每日一题Reverse Card (Easy Version)

文章目录 题名&#xff1a;题意&#xff1a;题解&#xff1a;代码&#xff1a; 题名&#xff1a; Reverse Card (Easy Version) 题意&#xff1a; 给定 n n n&#xff0c; m m m&#xff0c;存在 1 < a < n 1<a<n 1<a<n&#xff0c; 1 < b < m …

什么是网关鉴权及其在Spring Cloud Gateway中的实现

在现代微服务架构中&#xff0c;网关扮演着非常重要的角色&#xff0c;它是系统和外部世界之间的入口&#xff0c;负责路由请求、流量控制以及安全保护等任务。其中&#xff0c;网关鉴权是保障系统安全的重要环节之一。本文将深入介绍什么是网关鉴权&#xff0c;以及如何通过过…

BCD编码(8421)介绍

概念 BCD (Binary-Coded Decimal) 是一种二进制的数字编码形式&#xff0c;其特点每个十进制数位用4个二进制位来表示。 在网络IO中&#xff0c;你传输一个数字类型最少需要一字节&#xff0c;传输两个数字类型最少需要两字节&#xff0c;但是当你使用BCD编码后传输&#xff…

防静电液的这些用处你知道多少

防静电液又叫抗静电剂&#xff0c;是工业上常用来消除静电的化学用品&#xff0c;一般是液体状态&#xff0c;它的用途很广泛。 防静电液适用于对静电有控制要求的电器、仪器桌面、台面、塑料制品、包装品、存储盒、托盘、毛毯、织物等任何物品表面。 应用举例如消除各种塑胶材…

微服务中的鉴权怎么做?

大家好&#xff0c;我是苍何呀。 现在出去找工作&#xff0c;简历上不写上微服务的技术&#xff0c;仿佛自己跟不上时代了&#xff0c;面试官更是喜欢盯着微服务项目来提问。 但其实虽说微服务是主流&#xff0c;随着云原生架构的发展&#xff0c;微服务也是趋势&#xff0c;…

图论-最短路算法

1. Floyd算法 作用&#xff1a;用于求解多源最短路&#xff0c;可以求解出任意两点的最短路 利用动态规划只需三重循环即可&#xff08;动态规划可以把问题求解分为多个阶段&#xff09;定义dp[k][i][j]表示点i到点j的路径&#xff08;除去起点终点&#xff09;中最大编号不超…

算法题【面试准备】

算法题【面试准备】 前言推荐算法题NC72二叉树的镜像NC8:二叉树根节点到叶子节点和为指定值的路径NC9二叉树中是否存在节点和为指定值的路径NC14二叉树的之字形层序遍历[NC15 求二叉树的层序遍历](https://www.nowcoder.com/study/live/689/2/69)NC37:合并区间[NC111 最大数](h…

AI模型发展之路:开源还是闭源?

AI模型发展之路&#xff1a;开源还是闭源&#xff1f; 开源路径优势&#xff1a;发展前景&#xff1a; 闭源路径优势&#xff1a;发展前景&#xff1a; 一、自动化内容生成文章生成技术原理应用场景 视频生成技术原理应用场景 音频生成技术原理应用场景 二、内容分发与推广智能…

leetcode725-Split Linked List in Parts

题目 给你一个头结点为 head 的单链表和一个整数 k &#xff0c;请你设计一个算法将链表分隔为 k 个连续的部分。 每部分的长度应该尽可能的相等&#xff1a;任意两部分的长度差距不能超过 1 。这可能会导致有些部分为 null 。 这 k 个部分应该按照在链表中出现的顺序排列&…

数据库的约束 not null, unique, default, primary key, foreign key, check

约束可以理解成 数据库提供的一种针对数据的合法性进行验证的机制, 在创建表的时候使用 1. 约束类型 NOT NULL - 指示某列不能存储 NULL 值, 表里的这个内容是必填项UNIQUE - 保证某列的每行必须有唯一的值, 不能重复 每次插入/修改时, 都要先触发查询, 如果当前插入/修改的…

原来Rstudio还可以这么使用,又方便了一些

在别人的电子书&#xff0c;你的电子书&#xff0c;都在bookdown中我们讲述了bookdown用于自动化文档生成。里面涉及到一个文件Rproj用于项目管理。 本身是一个很简单的文件&#xff0c;里面的内容一般不需要修改&#xff0c;只是放置在每个项目目录下即可。 比如我们有个内容…

C语言-牛客-实现四舍五入

欢迎来到Harper.Lee的学习小世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 本篇博客总结C语言刷题的相关笔记~~~~ #牛客–实现四舍五入 题目描述&#xff1a;随机输入浮点数&#xff0c;输出四舍五入后的整数…

数据链路层简单介绍

mac地址&#xff08;物理地址&#xff09; mac地址和ip地址&#xff0c;目的都是为了区分网络上的不同设备的&#xff0c;在最开始的时候&#xff0c;mac地址和ip地址是两伙人&#xff0c;独立各自提出的&#xff0c;ip地址是4个字节&#xff08;早都不够用了&#xff09;&…

OFDM 802.11a的FPGA实现(二十一)发射主控模块MCU(含代码)

目录 1.前言 2.主控逻辑 3.Matlab 4.verilog 5.ModelSim 6.ModelSim仿真结构与Matlab自动化对比 完整工程链接&#xff08;含verilog和Matlab代码&#xff09;&#xff1a; https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzkxNjM0NDk2Nw&actiongetalbum&album…

【sass嵌套规则 (Nested Rules)】

Sass的嵌套规则&#xff08;Nested Rules&#xff09;是一个非常重要的功能&#xff0c;它允许你在Sass文件中嵌套CSS规则集&#xff0c;从而以更直观、更结构化的方式编写样式。下面我将详细解释Sass嵌套规则的概念、作用、使用场景以及示例代码。 定义和用途 Sass嵌套规则允…