CentOS7 部署 MySQL 主从复制,读写分离

2)在两台 Slave 上向 Master 同步时间

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

[root@Slave1 ~]# /usr/sbin/ntpdate 192.168.1.1

2)主服务器配置

[root@Master ~]# vim /etc/my.cnf # 修改 MySQL 主配置文件

在 [mysqld] 下面添加:

server-id=1

log-bin=master-bin # 主服务器日志文件

log-slave-updates=true # 从服务器更新二进制文件

[root@Master ~]# /etc/init.d/mysqld restart # 重启 MySQL 数据库

  • 注意:如果 MySQL 重启较慢,可以使用 kill 终止掉 MySQL 进程号,再启用。

登陆 MySQL 给从服务器权限

[root@Master ~]# mysql -u root -p123

mysql> grant replication slave on . to ‘myslave’@‘%’ identified by ‘123’;

mysql> flush privileges; # 刷新权限

mysql> show master status; # 查看 Master 状态

在这里插入图片描述

3)从服务器配置

两台从服务器操作稍有不同

[root@Slave1 ~]# vim /etc/my.cnf

在 [mysqld] 下添加:

server-id=2 # Slave2 将 2 改为 3 即可

relay-log=relay-log-bin # 将主服务器上同步日志文件记录到本地

relay-log-index=slave-relay-bin.index # 定义 relay-log 的位置和名称

[root@Slave1 ~]# /etc/init.d/mysqld restart # 重启 MySQL 服务

[root@Slave1 ~]# mysql -u root -p123

mysql> change master to

master_host=‘192.168.1.1’,

master_user=‘myslave’,

master_password=‘123’,

master_log_file=‘master-bin.000001’,

master_log_pos=400;

mysql> start slave; # 启用从服务器同步功能

mysql> show slave status\G; # 查看从服务器状态

在这里插入图片描述

易错点

当在主 MySQL 开启日志,并在从 MySQL 开启日志后,进行同步时;明明没有报错但还是同步失败

  • 原因是从在向主同步时,File 的及 Position 的值给的不对。

在这里插入图片描述

解决方案:
  • 先关闭 Slave,在重新向主服务器同步一下,将对的值写入即可。

在这里插入图片描述

4)验证数据库是否同步

  1. 在主 MySQL 创建库。

mysql> create database ceshi;

mysql> show databases;

在这里插入图片描述

2. 分别在两个从服务器进行查看,同步过来说明主从复制成功。

mysql> show databases;

三、MySQL读写分离

==============================================================================

为了确保数据库产品的稳定性,很多数据库拥有双机热备功能。也就是,第一台数据库服务器,是对外提供增删改业务的生产服务器;第二台数据库服务器,主要进行读的操作。

1.读写分离的原因


在开发工作中,有时候会遇见某个 SQL 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

2.读写分离原理


简单来说,读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性查询,而从数据库处理 Select 查询。数据库复制被用来把事务性查询导致的变更同步到群集中的从数据库。

在这里插入图片描述

目前较为常见的 MySQL 读写分离分为两种:

  1. 基于程序代码内部实现

在代码中根据 select insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支;缺点是需要开发人员来实现,运维人员无从下手。

  1. 基于中间代理层实现

代理一般位于客户端和服务器之间,代理服务器接到客户端的请求后通过判断后转发到后端数据库,有两个代表性程序。

  • MySQL-Proxy:MySQL-Proxy 为 MySQL 开源项目,通过其自带的 lua 脚本进行 SQL 判断,虽然是 MySQL 官方产品,但是 MySQL 官方并不建议将 MySQL-Proxy 用到生产环境。

  • Amoeba(变形虫):由陈思儒开发,其曾就职于阿里巴巴。该程序用 Java 语言进行开发,阿里巴巴将其用于生产环境。它不支持事务和存储过程。

3.部署 MySQL 读写分离


1)在 Amoeba 上部署 Java 环境

[root@Amoeba ~]# ls

amoeba-mysql-binary-2.2.0.tar.gz anaconda-ks.cfg jdk-6u14-linux-x64.bin

[root@Amoeba ~]# chmod +x jdk-6u14-linux-x64.bin # 添加可执行权限

[root@Amoeba ~]# ./jdk-6u14-linux-x64.bin

一直按空格. 等显示输入 yes 或 no 时输入-------- yes

在这里插入图片描述

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

[root@Amoeba ~]# cat <> /etc/profile

export JAVA_HOME=/usr/local/jdk1.6

export CLASSPATH= C L A S S P A T H : CLASSPATH: CLASSPATH:JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH= J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JAVA_HOME/jre/bin/: P A T H : PATH: PATH:HOME/bin

export AMOEBA_HOME=/usr/local/amoeba

export PATH= P A T H : PATH: PATH:AMOEBA_HOME/bin

END

[root@Amoeba ~]# source /etc/profile # 使其生效

[root@Amoeba ~]# java -version # 查看 Java 版本

2)编译安装 Amoeba 软件

[root@Amoeba ~]# mkdir /usr/local/amoeba #为 Amoeba 创建目录

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

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

[root@Amoeba ~]# /usr/local/amoeba/bin/amoeba

显示:amoeba start | stop 表示正确

在这里插入图片描述

3)配置 Amoeba 读写分离,两个 Slave 读负载均衡

  1. 数据授权给 Amoeba 读写权限,因为刚刚做了主从复制,所以直接在主 MySQL 做就行。

mysql> grant all on . to ‘zhangsan’@‘192.168.1.%’ identified by ‘123.com’;

mysql> show grants for ‘ly’@‘192.168.1.%’;

在这里插入图片描述

  1. 修改 Amoeba 配置文件。

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

在这里插入图片描述

在这里插入图片描述

  1. 编辑 dbServers.xml 配置文件。

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

在这里插入图片描述

在这里插入图片描述

  1. 启动 Amoeba 软件,端口为 8066。

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

[root@Amoeba ~]# netstat -anpt | grep java

在这里插入图片描述

4)验证读写分离

  1. 验证主从复制。

在客户端上操作:

[root@Client ~]# yum -y install mysql # 直接使用 yum 安装 MySQL 就行

[root@Client ~]# mysql -u amoeba -p123456 -h 192.168.1.140 -P8066 # 远程登陆 amoeba 的数据库

MySQL [(none)]> create database zhangsan;

MySQL [(none)]> create table zhangsan.test (id int(10),name varchar(10),address varchar(20));

在这里插入图片描述

在从 MySQL 上查看结果:

[root@Slave1 ~]# mysql -u root -p123

mysql> use zhangsan

mysql> show tables;

在这里插入图片描述

  1. 分别关闭 Slave1,2 的复制功能。

mysql> stop slave;

在这里插入图片描述

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
漫长且无助。**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-6Cj8O62e-1715621559005)]

[外链图片转存中…(img-d9iVhJjL-1715621559006)]

[外链图片转存中…(img-WOhaUjiF-1715621559007)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值