Java最新CentOS7 部署 MySQL 主从复制,读写分离,java程序员面试笔试真题库

最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

  • Java核心知识整理

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Java核心知识

  • Spring全家桶(实战系列)

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

  • 其他电子书资料

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 注意:如果 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 的复制功能。

最后:学习总结——MyBtis知识脑图(纯手绘xmind文档)

学完之后,若是想验收效果如何,其实最好的方法就是可自己去总结一下。比如我就会在学习完一个东西之后自己去手绘一份xmind文件的知识梳理大纲脑图,这样也可方便后续的复习,且都是自己的理解,相信随便瞟几眼就能迅速过完整个知识,脑补回来。下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

image

除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

下方即为我手绘的MyBtis知识脑图,由于是xmind文件,不好上传,所以小编将其以图片形式导出来传在此处,细节方面不是特别清晰。但可给感兴趣的朋友提供完整的MyBtis知识脑图原件(包括上方的面试解析xmind文档)

[外链图片转存中…(img-2EHZBRKR-1715366654339)]

除此之外,前文所提及的Alibaba珍藏版mybatis手写文档以及一本小小的MyBatis源码分析文档——《MyBatis源码分析》等等相关的学习笔记文档,也皆可分享给认可的朋友!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值