实现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.rhkb.cn/news/328878.html

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

相关文章

Linux-笔记 开发板Uboot命令使用

将之前自学的知识整理了一下笔记&#xff0c;以便回忆 信息查询命令 1、help/?&#xff1a;查看所支持命令 > ? md md - memory displayUsage: md [.b, .w, .l] address [# of objects]2、bdinfo&#xff1a;查询板子信息 > bdinfo arch_number 0x00000000 boot_p…

C#知识|上位机子窗体嵌入主窗体方法(实例)

哈喽,你好啊,我是雷工! 上位机开发中,经常会需要将子窗体嵌入到主窗体, 本节练习C#中在主窗体的某个容器中打开子窗体的方法。 01 需求说明 本节练习将【账号管理】子窗体在主窗体的panelMain容器中打开。 账号管理子窗体如下: 主窗体的panelMain容器位置如图: 02 实现…

四川古力未来科技抖音小店:科技赋能,购物新体验!

在当下这个数字化飞速发展的时代&#xff0c;电商行业早已成为了人们日常生活中不可或缺的一部分。而抖音小店作为电商领域的一匹黑马&#xff0c;正以其独特的优势和魅力&#xff0c;吸引着越来越多的消费者。今天&#xff0c;我们就来一起探讨一下四川古力未来科技抖音小店的…

免费视频格式在线转换网站,推荐这5款!

在数字化时代&#xff0c;视频已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着各种设备和平台的不断涌现&#xff0c;视频格式繁多&#xff0c;常常会出现不兼容的情况。为了解决这一问题&#xff0c;视频格式在线转换网站应运而生&#xff0c;成为了我们应…

微软宣布GPT-4o模型,可在 Azure OpenAI上使用

5月14日&#xff0c;微软在官网宣布&#xff0c;OpenAI最新发布的多模态模型GPT-4o&#xff0c;可以在 Azure OpenAI 云服务中使用。 据悉&#xff0c;GPT-4o支持跨文本、视频、音频多模态推理&#xff0c;例如&#xff0c;通过GPT-4o打造一个AI助手&#xff0c;用于辅导孩子解…

【Python】语句与众所周知【自我维护版】

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 本篇博客是在之前的基础上进行的维护 目录 条…

Kibana使用

一、什么是Kibana   Kibana 是一个开源的分析和可视化平台&#xff0c;Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析&#xff0c;并在各种图表、表格和地图中可视化数据。 Kibana使用&#xff1a…

前端学习第一课

AJAX 事先说明&#xff0c;这只是记录&#xff0c;并不是从零到一的教学内容&#xff0c;如果想要学习的话&#xff0c;可以跳过本文章了 ok&#xff0c;转回正题&#xff0c;正如上面所说&#xff0c;这只是记录。其实我是有一定的前端基础的&#xff0c;也做过涉及相关的开发…

力扣82题删除排序链表中的重复元素

82题删除排序链表中的重复元素 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 题目分析 这个题需要返回已排序链表&#xff0c;我们需要考虑一种情况就是头结点为重复元素&…

学习C语言的重要性以及如何学好

配套视频&#xff1a;https://www.bilibili.com/video/BV1kw4m1Q7AV/?spm_id_from333.999.0.0 一、C语言在互联网领域重要的开源项目 https://github.com/mysql/mysql-server 数据库开源项目【互联网重型开源项目】 编程语言&#xff1a;C/C/ASM 部分汇编代码 开源项目核心…

【汇编】算术指令

一、加法指令 &#xff08;一&#xff09;各加法指令的格式及操作 加法指令可做字或字节运算 &#xff08;1&#xff09;加法指令 ADD 格式&#xff1a;ADD DST,SRC执行的操作&#xff1a;(DST) ← (SRC)(DST) &#xff08;2&#xff09;带进位加法指令 ADC 格式&#xf…

除自身以外数组的乘积[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个整数数组nums&#xff0c;返回数组answer&#xff0c;其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法&#xff…

【SQL】SQL常见面试题总结(2)

目录 1、增删改操作1.1、插入记录&#xff08;一&#xff09;1.2、插入记录&#xff08;二&#xff09;1.3、插入记录&#xff08;三&#xff09;1.4、更新记录&#xff08;一&#xff09;1.5、更新记录&#xff08;二&#xff09;1.6、删除记录&#xff08;一&#xff09;1.7、…

Spring初学入门(跟学笔记)

一、Spring概述 Spring是一款主流的Java EE轻量级开源框架。 Spring的核心模块&#xff1a;IoC&#xff08;控制反转&#xff0c;指把创建对象过程交给Spring管理 &#xff09;、AOP&#xff08;面向切面编程&#xff0c;在不修改源代码的基础上增强代码功能&#xff09; 二、…

常用五款文件加密软件|好用加密软件工具分享

随着信息化时代的到来&#xff0c;数据安全问题日益凸显&#xff0c;加密软件应运而生&#xff0c;成为了保护数据安全的重要手段。在市场上&#xff0c;众多加密软件层出不穷&#xff0c;各有千秋。本文将介绍几款常用的加密软件&#xff0c;分析它们的优缺点&#xff0c;以帮…

使用JasperReport工具,生成报表模版,及通过JavaBean传参,常见问题及建议

1.下载JasperReport工具 下载地址:社区版 - Jaspersoft 社区 邮箱:lorettepatri.ckoa5434gmail.com 密码:Zx123456. 2.工具使用方法注意 1.一次参数需要在左下角Parameters中新建,直接拖转右上角的TextField不会自动新建参数,到头来还是要在Parameters中新建 2.循环参数需…

Kexp 动态展示 k8s 资源对象依赖关系

kexp[1] 旨在以可视化的方式帮助用户理解和探索 Kubernetes 的能力。 适用场景&#xff1a; 学习和探索 Kubernetes 的功能。 应用开发&#xff0c;提供每个应用的对象图预设。 控制器和操作器的开发&#xff0c;支持动态对象图。 即将推出类似 Postman 的 Kubernetes API …

如何组织 Vue 项目

介绍 在启动 Vue 项目时&#xff0c;思考项目结构至关重要。主要考虑因素是预期项目的规模。在本篇博文中&#xff0c;我将探讨适用于不同规模 Vue 项目的各种结构。这个考虑与康威定律相吻合&#xff1a; “设计系统的组织受限于产生这些组织沟通结构的设计。” - 梅尔康威 基…

linux防火墙的操作

linux防火墙的操作 前言1查看防火墙状态2暂时关闭防火墙3永久关闭防火墙4开启防火墙5开启指定端口6关闭指定端口7立即生效8查看开放的端口 前言 systemctl是管理linux中服务的命令&#xff0c;可以对服务进行启动、停止、重启、查看状态等操作 firewall-cmd是linux中专门用于控…

shell脚本之sort,uniq,tr,cut,sphit,paste,ecal与正则表达式

sort命令 uniq命令 tr命令 cut命令 sphit命令 paste命令 ecal命令 正则表达式 sort命令 sort命令---以行为单位对文件内容进行排序&#xff0c;也可以根据不同的数据类型来排序 比较原则是从首字符向后&#xff0c;依次按ASCII码值进行比较&#xff0c;最后将他们按升序…