Mysql主从复制

Mysql主从复制:Mysql主从复制和读写分离
在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性、高可用性,还是高并发等各个方面都是不能满足实际需求的。因此,一般通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。在这里插入图片描述

					Mysql主从复制和读写分离

 主从复制:
Mysql的主从复制和mysql的读写分离两者有紧密的联系,首先要部署主从复制,只有主从复制完成了,才能再此基础上进行数据的读写分离。
Mysql支持的复制类型:
1、 基于语句的复制:在主服务器上执行的sql语句,在从服务器上会执行同样的语句。Mysql默认采用基于语句的复制,效率比较高,但是有时不能实现精准复制。
2、 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
3、 混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的复制不能精准复制时,就会采用基于行的复制。
在这里插入图片描述
 主从复制的过程:
1、 在每个事物更新数据完成之前,master在二进制日志记录这些改变,写入二进制日志完成后,master通知存储引擎提交事物。
2、 Slave将master的binary log复制到其中的中继日志。首先从mysql服务器开始一个工作线程I/O线程,I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master。他会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
3、 Sql从线程处理该过程的最后一步。Sql线程从中继日志中读取事件,并重放其中的事件而更新slave的数据,使其与master的数据一致。
 读写分离
简单的来说,读写分离就是只在mysql主服务器上写,只在mysql从服务器上读。基本原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到集群中的数据库。

目前较为常见的mysql读写分离有两种:
1、 基于程序代码的内部实现
在代码中根据select、insert进行路由分类,这类方法也是目前生产环境中较为常用的,优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支;缺点是需要研发人员来实现,运维人员无从下手。
2、 基于中间代理层实现
代理一般位于客户端和服务器之间,代理服务器接收到客户端请求后通过判断后转发到后端数据库。如下有两个常用代理:
Mysql-proxy:其为mysql的开源项目,通过其自带的lua脚本进行sql判断,虽然是mysql官方产品,但是mysql官方并不建议其使用到生产环境中。
Amoeba:由陈思儒开发,该程序由Java语言进行开发。这个软件致力于mysql的分布式数据库前端代理层,它主要为应用层访问mysql的时候充当sql路由功能。Amoeba能够完成多数据源的高可用、负载均衡、数据切片等功能。

常用的mysql连接工具:
phpMyAdmin
phpMyAdmin是我们常用的MySQL管理工具之一,它是用PHP开发的基于Web方式架构在网站主机上的MySQL管理工具,支持中文,管理数据库也十分方便。主要缺点在对大数据库的备份和恢复不是十分方便。

Navicat
Navicat是一款桌面版MySQL管理工具,它和微软的SQLServer的管理器很像,简单易用。Navicat的优势在于使用图形化的用户界面,可以让用户管理更加轻松。

///
部署环境:
系统环境CentOS release 6.5_x64
主mysql服务器ip:172.18.49.10
从mysql服务器ip:172.18.49.2
开始部署安装:
Mysql服务器都已经搭建完成。
 主mysql上:

cp /etc/my.cnf /etc/my.cnf.bak

vi /etc/my.cnf

log_bin=mysql-bin //开启二进制日志
server_id=1 //server_id 的值主从必须不同

service mysqld restart

登录mysql后进行授权:
mysql> grant all on . to ‘replication’@’%’ identified by ‘replication’;
mysql> flush privileges;
解释:在master的数据库服务器中建立一个复制的账户,每个slave使用该账户链接master来进行复制,设置所有权限(根据具体情况自定)。上面创建了一个replication用户,密码是replication。只允许在所有段的ip地址的登录。

查看master的状态:

mysql -uroot -p

mysql> show master status;
在这里插入图片描述
记住file和position的值,配置slave的时候需要用。
 从mysql上配置:
修改配置文件

vi /etc/my.cnf

server_id = 2 //修改server_id,其值必须和master的不同。
relay_log=relay-logs //开启中继日志,可以自定义目录,mysql用户有权限即可

service mysqld restart

mysql -uroot –p

查看中继日志的启动状态:
mysql> show global variables like ‘%relay%’;
在这里插入图片描述
连接master服务器:
mysql> change master to master_host=‘172.18.49.10’,master_user=‘replication’,master_password=‘replication’,master_log_file=‘master-bin.000003’,master_log_pos=284;
选项解释:
master_host:Master 服务器IP
master_user:Master 服务器授权用户,也就是 Master 前面创建的那个用户
master_password:Master 服务器授权用户对应的密码
master_log_file:Master binlog 文件名
master_log_pos:Master binlog 文件中的 Postion 值
手动启动复制线程:
mysql> start slave;
在这里插入图片描述
在这里插入图片描述
如果 Last_SQL_Error 没有错误提示以及 Salve 中的 Exec_Master_Log_Pos 值和 Master 中的 show master status; 中的 Postition 值是一样的,这样的话,MySQL 主从复制应该是成功的。
测试:
在master上:
mysql> use test;
mysql> create table users(id int(10),name varchar(48),sex char(16));
mysql> insert into users values(1,‘qq’,‘nan’);
mysql> flush privileges;
在这里插入图片描述
在slave上:
mysql> use test;
在这里插入图片描述
则,主从复制OK!!!

 读写分离:
安装jdk

rpm -ivh jdk-8u20-linux-x64.rpm

vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_20/
export CLASSPATH= C L A S S P A T H : CLASSPATH: CLASSPATH:JAVA_HOME/lib: J A V A H O M E / j r e / l i b e x p o r t P A T H = JAVA_HOME/jre/lib export PATH= JAVAHOME/jre/libexportPATH=JAVA_HOME/lib: J A V A H O M E / j r e / b i n : JAVA_HOME/jre/bin: JAVAHOME/jre/bin:PATH: H O M E / b i n e x p o r t A M O E B A H O M E = / u s r / l o c a l / a m o e b a e x p o r t P A T H = HOME/bin export AMOEBA_HOME=/usr/local/amoeba export PATH= HOME/binexportAMOEBAHOME=/usr/local/amoebaexportPATH=PATH:$AMOEBA_HOME/bin

source /etc/profile

java –version

在这里插入图片描述

安装amoeba

mkdir /usr/local/amoeba

tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

chmod -R 755 /usr/local/amoeba/

Vim /usr/local/amoeba/bin/amoeba
56 行deault 128–300

/usr/local/amoeba/bin/amoeba

amoeba start|stop //显示这个表示amoeba安装成功。
在这里插入图片描述
配置amoeba读写分离
在master、slave1、slave2、、、、中开放权限给amoeba访问:
mysql> grant all on . to test@‘172.18.49.%’ identified by ‘123’;
修改amoeba的配置文件:

cp amoeba.xml amoeba.xml.bak

vi /usr/local/amoeba/conf/amoeba.xml

修改连接amoeba代理服务器的有用户名和密码。
在这里插入图片描述

修改默认的地址池名字,写和读的名字:注意:删掉注释符。
在这里插入图片描述
对应主机名
编辑修改dbservers.xml配置文件(对后端mysql服务器的配置)。

cp dbServers.xml dbServers.xml.bak在这里插入图片描述

vi dbServers.xml

指定主从数据库地址:
都是对应得主机名
在这里插入图片描述
在这里插入图片描述

之后启动amoeba:

/usr/local/amoeba/bin/amoeba start&

netstat -anpt | grep :8066在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云原生解决方案

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值