Mysql数据库的主从复制读写分离搭建过程与原理介绍

首先说明一下在搭建Mysql数据库的主从复制与读写分离的过程中十分容易出错,所以在搭建的过程中一定要谨慎注重每一步的细节。

  • 传统数据库中存在的问题

1.传统数据库设计时,如果服务器宕机,将不能为用户提供服务导致整个系统崩溃.

2.如果数据库突然宕机.会导致数据丢失.

3.为了防止数据丢失,要进行实时备份

冷备份:通过数据库工具进行人为的导出sql.但是手动导出数据可能在中间节点宕机时也会造成数据库的丢失.

热备份:

通过程序进行控制,定时转储.尽可能的保证数据的完整性.但是还有大量的问题.

  • 数据库主从复制

说明:

由于传统的数据库设计在数据备份时,不能满足业务条件,可能会造成数据丢失,为了防止数据丢失采用实时备份

方式:Mysql主从复制技术

主从复制原理:

Mysql数据库的主从复制读写分离搭建过程与原理介绍

1.角色划分:

主库Master:主要进行的是数据的"更新操作"

从库Slave: 实时备份主库的更新信息

二进制日志:实时记录主库的更新操作,并且形式二进制码.

中继日志:  保存主库的更新信息

 

2.调用原理

1.当主库更新数据后,会实时的写入到二进制日志文件中

2.从库的IO线程,实时的监听主库的二进制文件,如果二进制文件发送了改变则启动线程进行读取修改后的内容.

3.通过IO线程将读取的二进制文件写入到中继日志中.

4.Sql线程实时读取中继日志中的消息,进行数据库的"更新操作"

  • 数据库主从复制的搭建

1.克隆linux系统

Mysql数据库的主从复制读写分离搭建过程与原理介绍

Mysql数据库的主从复制读写分离搭建过程与原理介绍

Mysql数据库的主从复制读写分离搭建过程与原理介绍

2.linux系统的配置

Mysql数据库的主从复制读写分离搭建过程与原理介绍

固定LinuxIP地址:

Mysql数据库的主从复制读写分离搭建过程与原理介绍

  • 配置Linux数据库环境

1.编辑脚本环境

能够快速跳转到某一个文件夹

Mysql数据库的主从复制读写分离搭建过程与原理介绍

2.跳转文件

. Go

3.创建mysql文件夹

Mysql数据库的主从复制读写分离搭建过程与原理介绍

4.解压mysql

Mysql数据库的主从复制读写分离搭建过程与原理介绍

5.安装步骤

先安装debugingo-->shared--->client--->server四个

Mysql数据库的主从复制读写分离搭建过程与原理介绍

Mysql数据库的主从复制读写分离搭建过程与原理介绍

5.启动服务

service mysql start

6.设置用户名和密码

mysqladmin -u root password "root"

7.打开3306端口号

iptables -I INPUT -p tcp --dport 3306 -jACCEPT

Service iptables stop   //关闭防火墙

8.开放端口生效

/etc/rc.d/init.d/iptables save       可以不执行

9.查看当前端口开放情况

/etc/rc.d/init.d/iptables status;

Mysql数据库的主从复制读写分离搭建过程与原理介绍

10.赋予登陆权限

说明:权限赋值的操作必须在mysql环境下运行

语法:

grant [权限] on [数据库名].[表名] to ['用户名']@['web服务器的ip地址'] identifiedby ['密码'];

grantall on *.* to 'root'@'%' identified by 'root';

或者指定IP地址

grantall on *.* to 'root'@'192.168.1.103' identified by 'root';

11.通过工具远程连接数据库

Mysql数据库的主从复制读写分离搭建过程与原理介绍

12.开启二进制日志文件

/etc/my.cnf

Mysql数据库的主从复制读写分离搭建过程与原理介绍

    server-id=1      //唯一标识数据库

    log-bin=mysql-bin   //开启二进制日志文件

   之后保存退出

13.重新启动服务

Service mysql   stop

service mysql start

14.查看日志文件

/var/lib/mysql/   下有日志文件

Mysql数据库的主从复制读写分离搭建过程与原理介绍

  • 配置从机

1.将主机master克隆

2.固定从机的ip地址

Mysql数据库的主从复制读写分离搭建过程与原理介绍

3.修改从机mysql的***

目的:mysql完全的不同

由于Masql是克隆的,/var/lib/mysql/auto.cnf中有UUID对数据库进行标识,所以需要进行修改

Mysql数据库的主从复制读写分离搭建过程与原理介绍

修改service-id

Service-id=2

4.启动slave数据库

Mysql数据库的主从复制读写分离搭建过程与原理介绍

Mysql数据库的主从复制读写分离搭建过程与原理介绍

5.查询master状态码

Mysql数据库的主从复制读写分离搭建过程与原理介绍

6.为从节点挂载主机

/*配置注解主机名/端口号/用户名/密码 */

change master toMASTER_HOST='192.168.247.133',MASTER_PORT=3306,

MASTER_USER='root',MASTER_PASSWORD='root',

MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=120

/*启动从服务*/

start slave

/*查看状态*/

show slave status;

Mysql数据库的主从复制读写分离搭建过程与原理介绍

如果出现两个yes则表示加载成功

7.如果启动失败

Mysql数据库的主从复制读写分离搭建过程与原理介绍

需要从新启动mysql,重新挂载


  • 数据库的读写分离

说明:

由于数据库没有优化,会导致主数据库的压力较大.

策略:

如果是读的操作,都访问从数据库.

如果是写的操作.都访问主数据库.

介绍:

概述

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。

Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL

Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS原则的思想。

优势

Amoeba主要解决以下问题:

a). 数据切分后复杂数据源整合

b). 提供数据切分规则并降低数据切分规则给数据库带来的影响

c). 降低数据库与客户端连接

d). 读写分离路由

通过Amoeba实现读写分离

安装:

1.需要依赖JDK

根据profile中的路径.解压JDK即可

2.配置jdk

Mysql数据库的主从复制读写分离搭建过程与原理介绍

3.安装amoeba

Mysql数据库的主从复制读写分离搭建过程与原理介绍

4.查看配置文件

Mysql数据库的主从复制读写分离搭建过程与原理介绍

5.修改dbServer.xml

通过工具连接远程客户机

Mysql数据库的主从复制读写分离搭建过程与原理介绍

Mysql数据库的主从复制读写分离搭建过程与原理介绍

Mysql数据库的主从复制读写分离搭建过程与原理介绍

需要配置2项-3项

6.修改amoeba.xml

    1.默认端口号8066

Mysql数据库的主从复制读写分离搭建过程与原理介绍

    2.添加数据库密码

Mysql数据库的主从复制读写分离搭建过程与原理介绍

3.添加读写分离

Mysql数据库的主从复制读写分离搭建过程与原理介绍

4.指定栈空间

编辑launcher启动文件 分配内存空间

#配置jdk内存空间

DEFAULT_OPTS="-server -Xms256m -Xmx256m-Xss256k"

Mysql数据库的主从复制读写分离搭建过程与原理介绍

建议使用第二种

2.修改JVM.properties   适当的调整内存空间,否则将不会生效

JVM_OPTIONS="-server -Xms512m -Xmx1024m -Xss512k-XX:PermSize=16m -XX:MaxPermSize=96m"

5.启动Amoeba

./launcher 执行启动命名

Mysql数据库的主从复制读写分离搭建过程与原理介绍

6.打开端口8066

iptables -I INPUT -p tcp --dport 8066 -jACCEPT

/etc/rc.d/init.d/iptables save    //让端口生效

/etc/rc.d/init.d/iptables status  //查看端口是否打开

7.如果端口占用查看那PID之后kill杀死

isof -i:8066 

java   4837 root   64u  IPv6 32545      0t0  TCP *:8066 (LISTEN)

Kill -9 4837