【Linux】MySQL高可用之Mysql读写分离实践

一、MySQL读写分离原理

读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

【Linux】MySQL高可用之Mysql读写分离实践_第1张图片

 二、读写分离实践

绝大多数的企业的应用场景对于数据库来说都是读多写少,比如微博,明星发一条微 博,上千万人读。所以为了分担数据库压力,做负载均衡,首先考虑到的就是读写分离,读写分离基于上面实现的主从复制,使用主库作为写库,从库为读库,提高数据库性能,提高IO性能。

三、读写分离的实现方式

为了实现读写分离,出现了很多解决方案,其中比较流行的是采用中间件做为 Proxy,保持应用层代码不随数据库的变动而发生变化,这里包括Amoeba、Atlas、 Cobar、Mycat、MySQL Proxy等,而Mycat是目前开源的数据库中间件中比较成熟的解决方案。

四、安装JDK

① 解压缩包

tar -xzvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java

【Linux】MySQL高可用之Mysql读写分离实践_第2张图片

②编辑/etc/profile

vim /etc/profile

【Linux】MySQL高可用之Mysql读写分离实践_第3张图片

 使用source命令使修改即时生效,无需重启服务器:

source /etc/profile

 ③ 查看是否安装成功,有版本号就是安装成功了;

java -version

d04f9dc7cf2c469aabba882fdf4d9840.png

五、安装Mycat

MyCat的安装部署 Mycat的安装其实只要解压压缩包就可以,非常简单。

【安装完成后,目录如下】: 

【Linux】MySQL高可用之Mysql读写分离实践_第4张图片

【配置】

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:

【Linux】MySQL高可用之Mysql读写分离实践_第5张图片

【 MyCat的架构 】

Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服 务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。

六、配置Mycat

① server.xml的配置

将最后删除和修改成下面的样子

【Linux】MySQL高可用之Mysql读写分离实践_第6张图片

 【各配置参数含义】

【Linux】MySQL高可用之Mysql读写分离实践_第7张图片

② schema.xml的配置





        
        
        
                select user()
                
                        
                
        

【Linux】MySQL高可用之Mysql读写分离实践_第8张图片

 【参数配置说明】

【Linux】MySQL高可用之Mysql读写分离实践_第9张图片

【下面是关于每个节点的配置说明】

【Linux】MySQL高可用之Mysql读写分离实践_第10张图片

【Linux】MySQL高可用之Mysql读写分离实践_第11张图片

【Linux】MySQL高可用之Mysql读写分离实践_第12张图片【Linux】MySQL高可用之Mysql读写分离实践_第13张图片

 

 

 

 

七、给从机创建只读用户

读库的用户test是添加的mysql用户,只具有读权限的用户:

主机具有写权限,从机只具有读权限;

create user 'test'@'%' identified with mysql_native_password by
'Nebula@123';
GRANT select ON *.* TO 'test';
flush privileges;

【Linux】MySQL高可用之Mysql读写分离实践_第14张图片

八、启动mycat

① Mycat的启动也非常简单,进入到mycat下的bin目录下:

#启动
./mycat start(后台启动) ./mycat console(前台启动)


#停止
./mycat stop


#重启
./mycat restart

【如果在启动时发现异常,在logs目录中查看日志】

  • wrapper.log 为程序启动的日志,启动时的问题看这个
  • mycat.log 为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。
  • mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。

启动正常的结果如下:

f210615929ec4a6fbc55dcff186b5e68.png

 【mycat启动后,执行命令不成功,可能实际上配置有错误,导致后面的命令没有很好 的执行。】


mycat成功启动会有高亮显示的两个端口

【Linux】MySQL高可用之Mysql读写分离实践_第15张图片

8066是业务端口,可以对mycat连接的虚拟数据库进行增删改查;

9066是管理端口,查看心跳等;

九、验证读写分离服务

① 连接mycat的9066端口查看心跳

【Linux】MySQL高可用之Mysql读写分离实践_第16张图片

 ② 右击mycat,点击命令行界面可以输入sql语句

【Linux】MySQL高可用之Mysql读写分离实践_第17张图片

③ 输入命令查看心跳是否正常,RS_CODE为1是正常

show @@heartbeat;

7e922ca130974a7f991a45046e16c28c.png

 可以看到hostM拥有W写权限,hostS拥有R读权限

 ④ 使用navicat连接mycat,如下图所示,注意端口为8066。

【Linux】MySQL高可用之Mysql读写分离实践_第18张图片

 连接成功则会出现如下的绿色,否则请检查:

【Linux】MySQL高可用之Mysql读写分离实践_第19张图片

④ 测试读,有两种思路来验证:

1)关闭了主从复制

  1. 在从数据中关闭slave(即关闭主从复制);
  2. 然后在mycat管理端中往某个表中插入 一条数据;
  3. 再使用select查询该表,可以看到查询出来的结果中并没有新的那条数据。

(解释:因为关闭了主从复制,插入新数据在主库进行,而查询的是从库,为此 不会查询到新插入的数据);

#关闭从机

stop slave;
show slave status\G;

【Linux】MySQL高可用之Mysql读写分离实践_第20张图片

 #原本主从机的table_2表中均没有数据;

【Linux】MySQL高可用之Mysql读写分离实践_第21张图片【Linux】MySQL高可用之Mysql读写分离实践_第22张图片

#在mycat上给table_2插入一条数据,然后查看表

【我们发现明明插入成功了但是查看表却没有数据,这时因为我们关闭了主从连接,数据不会从主机同步到从机的,而从机具有读权限,主机具有写权限,相当于我们在mycat上查看数据库是查看的从机,写入数据是给主机写数据,所以查看table_2表是没有数据的,因为查看的是从机的table_2表】

【Linux】MySQL高可用之Mysql读写分离实践_第23张图片

 #在mysql上查看table_2表,发现数据插入成功;

【Linux】MySQL高可用之Mysql读写分离实践_第24张图片

  #在mysql上查看table_2表,发现是没有数据;

【Linux】MySQL高可用之Mysql读写分离实践_第25张图片

2)不关闭slave的主从复制

不关闭slave的主从复制,直接在从库中修改表中的某个值,而主库的值不变,直 接使用查询表数据时会发现查询出来的结果是从库表中的数据;

#开启slave的主从复制

【Linux】MySQL高可用之Mysql读写分离实践_第26张图片

#这里给在从库上给table_2插入一条数据

【Linux】MySQL高可用之Mysql读写分离实践_第27张图片

 #查看主库的table_2表,发现主库的数据没变

【Linux】MySQL高可用之Mysql读写分离实践_第28张图片

 #在mycat上查询,发现查询的是从库的table_2表的数据;

 【Linux】MySQL高可用之Mysql读写分离实践_第29张图片

 

 

 

你可能感兴趣的:(Linux,MySql,linux,mysql,java)