实现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-…

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

卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是深度学习中非常重要的一类神经网络&#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;中最大编号不超…

数据库的约束 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…

Spring6笔记(五):国际化、数据校验、提前编译

九、国际化&#xff1a;i18n 9.1 i18n概述 9.2 Java国际化 9.3 Spring6国际化 十、数据校验&#xff1a;Validation 10.1 Spring Validation 概述 10.2 实验一&#xff1a;通过 validator 接口实现 10.3 实验三&#xff1a;Bean Validation 注解 10.4 实验四&#xff1a;实现…

鸿蒙 DevEcoStudio:通知栏通知实现

【使用notificationManager实现通知栏功能】 【普通通知、长文本通知、多行通知、图片通知】 import notificationManager from ohos.notificationManager import image from ohos.multimedia.image Entry Component struct Index {State message: string Hello World// 将图…

html5 笔记01

01 表单类型和属性 input的type属性 单行文本框: typetext 电子邮箱 : typeemail 地址路径 : type url 定义用于输入数字的字段: typenumber 手机号码: typetel 搜索框 : typesearch 定义颜色选择器 : typecolor 滑块控件 : typerange 定义日期 :typedate 定义输入时间的控件…

04-Json/Ajax/Vue的知识

1. Json结构 1.1 Json概述 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式&#xff0c;实现数据前后端交互。 它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。 JSON采用完全独立于程序语言的文本格式。这些特性使JSON成为理想的数据交换…

英码科技算能系列边缘计算盒子再添新成员!搭载TPU处理器BM1688CV186AH,功耗更低、接口更丰富

在数据呈现指数级增长的今天&#xff0c;越来越多的领域和细分场景对实时、高效的数据处理和分析的需求日益增长&#xff0c;对智能算力的需求也不断增强。为应对新的市场趋势&#xff0c;英码科技凭借自身的硬件研发优势&#xff0c;携手算能相继推出了基于BM1684的边缘计算盒…

5.23.1 深度学习在乳腺癌成像中的应用

乳腺成像在早期发现乳腺癌以及在治疗期间监测和评估乳腺癌方面发挥着重要作用。最常用的乳腺成像方式是数字乳房X线摄影、数字乳腺断层合成、超声和磁共振成像。 传统的 CAD 系统基于传统的机器学习 (ML) 技术&#xff1b;预定义&#xff08;手工制作&#xff09;的特征是系统…

【堡垒机小知识】堡垒机和接口机的重要区别分析

在企业IT架构管理中&#xff0c;接口机和堡垒机各自扮演着不可或缺的角色。但不少IT小伙伴对于两者不是很了解&#xff0c;不知道两者之间有什么区别&#xff0c;今天我们就来一起分析一下。 堡垒机和接口机的重要区别分析 1、功能区别 接口机主要用于数据库层面的数据交换和…

Linux多线程系列2: 模拟封装简易语言级线程库,线程互斥和锁,线程同步和条件变量,线程其他知识点

Linux多线程系列2: 模拟封装简易语言级线程库,线程互斥和互斥锁,线程同步和条件变量,线程其他知识点 1.前言 一.模拟C11线程库自己封装简易语言级线程库1.实现框架2.迅速把构造等等函数写完3.start和work1.尝试一2.尝试二3.最终版本4.给出代码 二.模拟实现多线程(为编写线程池做…

Unity数据持久化2——XML

简介&#xff1a; 基础知识 XML文件格式 XML基本语法 XML属性 练习&#xff1a; C#读取存储XML XML文件存放位置 读取XML文件 练习&#xff1a; 存储修改XML文件 练习&#xff1a; 总结 实践小项目 必备知识点 必备知识点——C#中XML序列化 必备知识点——C#中XML反序列化 必备…