Mycat+Mysql主从复制实现双机热备
Mycat+Mysql主从复制实现双机热备
一、mysql主从配置原理
双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库中的数据一致。 这样做有如下几点好处: 1. 可以做灾备,其中一个坏了可以切换到另一个。 2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量。 对于异地热备,尤其适合灾备。 二、mysql 主从备份工作原理 简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍, 这样只要两个数据库的初态是一样的,那么它们就能一直同步。当然这种复制和重复都是mysql自动实现的,我们只需要配置即可
上图中有两个服务器,演示了从一个主服务器(master)把数据同步到从服务器(slave)的过程。 对于一个mysql服务器,一般有两个线程来负责复制和被复制。当开启复制这个开关之后(start slave) 1. 作为主服务器Master,会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log,然后在自己那里再执行一遍。) 2. 作为从服务器Slave,会用master上的账号登陆到master上,去读取master的Binarylog, 然后写入到自己的中继日志Relaylog,然后自己的sql线程会负责读取这个中继日志,并执行一遍。到这里主服务器上的更改就同步到从服务器上了。 在mysql上可以查看当前服务器的主,从状态。 其实就是当前服务器的 Binary(作为主服务器角色)状态和位置。以及其RelayLog(作为从服务器)的复制进度。
一台机器上实现双主热备
mysql主从架构搭建
链接地址:
背景知识:
主从这个架构可以实现数据备份,数据在多个服务器上分布等等,当然最主要的优点是可以实现负载均衡,将写操作交给主节点,读操作交给从节点。
mysql官网有很多版本,例如Enterprise(企业版需要付费,当然可以试用30天),Community(社区版,开源但是官方不提供技术支持),当然我们常用的也是社区版,本文是基于社区版的。
mysql的安装也有源码安装和二进制免安装等等方法,本文的mysql是通过二进制免安装的方式安装的
本文使用的环境是centos
mysql版本:mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
在/data目录解压两份mysql 修改mysql的端口为3307 3308
首先下载二进制免安装版的mysql:mysql社区版下载,进入社区版下载页后选择 MySQL Community Server (GPL),选择要下载的mysql版本:
我这里使用的是mysql5.7这个版本,点击之后,选择如下:
嫌麻烦的小伙伴可以直接运行下面的命令安装:
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
下载好之后解压重命名为mysql-3306然后复制一份,重命名为mysql-3307,我们将3306当作主节点,3307当作从节点:
#解压 tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz #重命名 mv mysql-5.7.25-linux-glibc2.12-x86_64 mysql #复制一份 cp -r mysql mysql3308
创建几个目录,data,logs,config,sockets,用来管理mysql的相关文件:
mkdir data logs config sockets
进入config目录,创建3307.conf以及3308.conf两个文件,文件的内容如下:
#3307.conf配置文件内容如下:
[mysqld]
user=root
character-set-server=utf8
port=3307
socket=/data/mysql/sockets/3307.sock
basedir=/data/mysql
datadir=/data/mysql/data/3307
server-id=2
log-bin=master-bin
binlog_format=ROW
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay-log=relay-log-bin
replicate-do-db=humy
replicate-do-db=usemp
#设置从节点只读,注意如果是超级管理登录从节点仍然是可以写的,该配置只对普通用户有效
read_only=1
#设置relay-log的路径和名称,如果不设置的话,默认路径是datadir设置的路径,默认文件名是:当前主机名-relay-log
relay-log=relay-log-bin
[mysqld_safe]
log-error=/data/mysql/logs/3306.log #错误日志
#3308.conf配置文件内容如下
[mysqld]
user=root #设置mysql的启动用户,我这里直接使用root,读者可以创建用户组和用户指定操作
character-set-server=utf8
port=3308
socket=/data/mysql3308/sockets/3308.sock #设置套字节(/root/mysql/sockets为刚刚创建的sockets的路径,3306.sock可以随意命名,下面的data,logs也是如此)
basedir=/data/mysql3308 #mysql-3306所在的位置
datadir=/data/mysql3308/data/3308 #设置mysql的数据存放目录(也是bin_log的存放的地方)
server-id=1 #唯一标识,每台mysql服务器必须唯一
log-bin=master-bin #开启bin-log并将此值作为二进制文件名的前缀
binlog_format=ROW #设置binlog的格式,主要有STATEMENT,ROW,FIXED
#设置不需要同步给从节点的数据库
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
replicate-do-db=humy
replicate-do-db=usemp
[mysqld_safe]
log-error=/root/mysql3308/logs/3308.log #错误日志
接下来让我们开启mysql服务:
#进入mysql的bin目录,执行如下操作进行初始化
#-insecure的作用是不设置密码,如果省略的话mysql会生成一个随机密码
./mysqld --defaults-file=/data/mysql/config/3307.conf --initialize-insecure
#之后再执行如下命令启动
./mysqld --defaults-file=/data/mysql/config/3307.conf
可能有读者在启动mysql服务器的时候会报:error while loading shared libraries: libaio.so,运行如下命令安装即可:
yum install libaio
连接3307主mysq服务器:
#进入mysql的bin目录运行如下命令:
#--socket的值就是我们在mysql配置文件中配置的socket值
./mysql -uroot --socket=/data/mysql/sockets/3307.sock
#同理连接3307的mysql服务器
执行如下命令查看master状态并进行重置:
show master status;
reset master;
在主服务器上设置一个用户用于从服务器从主服务器中复制数据时使用:
#创建用户
create user 'salve' identified by '666666';
#赋予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'salve'@'%';
#命令解释
create user 用户名 identified by '密码';
grant 权限 on 数据库名.表名 to '用户名'@'域名';
*表示所有,*.*表示所有的数据库和数据库中的表
'%'所有本地和远程都可以
localhost 本地
ip地址 指定ip登录
以上操作没有问题之后,我们连接3307服务器进行从节点的配置:
#首先关闭
stop slave;
#参数配置
change master to
master_host='127.0.0.1', #主从服务的地址
master_port=3306, #主服务器的端口
master_user='slave', #用于从复制的用户名,即第九步创建的
master_password='666666', #密码
master_log_file='master-bin.000001', #主服务器的binlog日志名称,查看第八步
master_log_pos=597; #偏移量
#开启
start slave;
至此我们的mysql主从架构已经搭建完成。小伙伴可以自行测试,在master节点写入的数据是否会同步到slave节点.
总结:
一般主从架构从节点是不需要开启binlog日志的,首先因为从节点是只读的开启binlog日志也没用,因为binlog日志记录的是修改事件,其次从节点从relay-log中读取主节点的修改事件时也不会将修改事件同步到自己的binlog中。因此从节点开启binlog是没有用。
双主热备的关键参数就是:log_salve_updates
双主热备其实就是两台mysql服务器互为主从关系。为了实现高可用,可以在两台互为主从关系的服务器下面再配置若干个从节点。
关于reset master 和 reset slave语句的区别和注意事项:传送门
注意:
设置mysql远程访问
#修改mysql 允许远程访问
use mysql;
update user set host = '%' where user = 'root';如上操作,可能导致mysql的root用户无初始密码,按以下步骤解决:
#命令行连接mysql终端
./bin/mysql -uroot --socket=/data/mysql3307/sockets/3307.sock
#修改root的密码
update mysql.user set authentication_string = password('123456') where user='root';使用如下命令登录终端
./bin/mysql -h192.168.1.2 -P3307 -uroot -p123456
二、mycat结合双主复制实现读写分离模式
简介:
应用程序仅需要连接mycat,后端服务器的读写分离由mycat进行控制,后端服务器数据的同步由MySQL主从同步进行控制。
mycat安装
注意:
在安装mycat之前首确定已经安装了java
Mycat官网 下载Mycat安装包:Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
#解压
tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz
修改schema.xml
的配置文件
balance="1"
: 全部的readHost与stand by writeHost参与select语句的负载均衡。writeType="0"
: 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。switchType="1"
: 1 默认值,自动切换。
修改/conf/server.xml 和 /conf/schema.xml
server.xml修改内容如下
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">TESTDB,TESTDBT</property> <!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
<schema name="TESTDBT" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user> <user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB,TESTDBT</property>
<property name="readOnly">true</property>
</user>
schema.xml内容如下
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema> <schema name="TESTDBT" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn2">
</schema> <dataNode name="dn1" dataHost="node1" database="humy" />
<dataNode name="dn2" dataHost="node1" database="usemp" /> <dataHost name="node1" maxCon="10" minCon="5" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
<heartbeat>select user()</heartbeat>
<writeHost host="master1" url="192.168.1.186:3307" user="root" password="123456">
<readHost host="slave2" url="192.168.1.186:3307" user="root" password="123456" />
</writeHost>
<writeHost host="master2" url="192.168.1.186:3308" user="root" password="123456">
<readHost host="slave2" url="192.168.1.186:3308" user="root" password="123456" />
</writeHost>
</dataHost> </mycat:schema>
启动mycat服务
./bin/mycat start
启动:./bin/mycat start
状态: ./bin/mycat status
使用mysql的客户端连接mycat
cd /data/app/mysql/
./bin/mysql -uroot -p 8066 -h 192.168.1.186 ##连接mycat,初始密码123456
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
| TESTDBT |
+----------+
2 rows in set (0.00 sec)
使用Navicat Premium连接mycat
通过mycat添加数据 可以实现配置中的数据库的数据同步。
每次开机都要启动mycat,网上看了好多都是用shell脚本来实现mycat开机自启动,后来看到一种方法,直接修改系统文件来实现,已经实践过,方法有效。
1.修改脚本文件rc.local:vim /etc/rc.d/rc.local
这个脚本是使用者自定的开机启动程序,可以在里面添加想在系统启动之后执行的脚本或者脚本执行命令
2.添加如下内容:
export JAVA_HOME=/opt/jdk1.8.0_65
/usr/local/mycat/bin/mycat start
3.esc 退出编辑,:wq 保存修改
4.将rc.local修改为可执行
chmod 777 /etc/rc.d/rc.local
Mycat+Mysql主从复制实现双机热备的更多相关文章
- MySQL 5.6 双机热备windows7
MySQL 5.6 双机热备 目录: 1.说明 2.数据手工同步 3.修改主数据库配置文件 4.修改从数据库配置文件 5.主数据库添加备份用户 6.从数据库设置为Slave 7.验证 1.说明 1)数 ...
- MySQL 5.6 双机热备
目录: 1.说明 2.数据手工同步 3.修改主数据库配置文件 4.修改从数据库配置文件 5.主数据库添加备份用户 6.从数据库设置为Slave 7.验证 1.说明 1)数据库版本要高于5.1 2) ...
- Mysql 如何做双机热备和负载均衡 (方法二)
先简要介绍一下mysql双向热备:mysql从3.23.15版本以后提供数据库复制功能.利用该功能可以实现两个数据库同步,主从模式(A->B),互相备份模式(A<=>B)的功能. m ...
- Mysql 如何做双机热备和负载均衡
MySQL数据库没有增量备份的机制,但它提供了一种主从备份的机制,就是把主数据库的所有的数据同时写到备份数据库中.实现MySQL数据库的热备份. 下面是具体的主从热备份的步骤:假设主服务器A(mast ...
- Mysql 如何做双机热备和负载均衡 (方法一)
MySQL数据库没有增量备份的机制,但它提供了一种主从备份的机制,就是把主数据库的所有的数据同时写到备份数据库中.实现MySQL数据库的热备份. 下面是具体的主从热备份的步骤:假设主服务器A(mast ...
- MySQL主从复制,以及双机热备
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展.多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能. 下图就描述了一个多个数 ...
- MySQL数据库配置主从服务器实现双机热备
转自:http://www.cnblogs.com/cchun/p/3712637.html 一.安装MySQL 说明:在两台MySQL服务器192.168.21.169和192.168.21.168 ...
- Mysql双机热备--预备知识
1.双机热备 对于双机热备这一概念,我搜索了很多资料,最后,还是按照大多数资料所讲分成广义与狭义两种意义来说. 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务.当一台服务器 ...
- MySQL7.5.15数据库配置主从服务器实现双机热备实例教程
环境说明 程序在:Web服务器192.168.0.57上面 数据库在:MySQL服务器192.168.0.67上面 实现目的:增加一台MySQL备份服务器(192.168.0.68),做为MySQL服 ...
随机推荐
- 修改 mvc webapi 默认返回 json 格式
web api 默认的已 xml 格式返回数据 现在开发一般都是以 json 格式为主 下面配置让 webapi 默认返回 json ,在需要返回 xml 时只需要加一个查询参数 datatype=x ...
- 暑假集训 div1 B Derangement 交换数字 思维死角
B. Derangement time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Springboot 使用JPA
Springboot 使用jpa maven依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
- 多态:JVM是如何进行方法调用的
在我们平时的工作学习中写java代码时,如果我们在同一个类中定义了两个方法名和参数类型都相同的方法时,编译器会直接报错给我们.还有在代码运行的时候,如果子类定义了一个与父类完全相同的方法的时候,父类的 ...
- Js基础知识(二) - 原型链与继承精彩的讲解
作用域.原型链.继承与闭包详解 注意:本章讲的是在es6之前的原型链与继承.es6引入了类的概念,只是在写法上有所不同,原理是一样的. 几个面试常问的几个问题,你是否知道 instanceof的原理 ...
- 一、基础篇--1.1Java基础-hashCode和equals方法的区别和联系
hashCode和equals方法的区别和联系 两个方法的定义 equals(Object obj)方法用来判断两个对象是否"相同",如果"相同"则返回tr ...
- leetcode 17电话号码的字母组合
与子集70?类似,子集每次两个分支,本题每次k个分支,子集是第一次不push第二次push元素,本题是每次都push元素,因此,本题答案的长度都为k,子集题目为各种组合: /** res,level, ...
- 使用Android自带的资源
Android自带的资源文件有 :https://developer.android.google.cn/reference/android/R.html 代码中使用如下: 1.查看源代码的资源文件 ...
- 函数参数<二>
1. 缺省参数 调用函数时,缺省参数的值如果没有传入,则被认为是默认值.下例会打印默认的age,如果age没有被传入: def printinfo( name, age = 35 ): # 打印任何传 ...
- KNN距离函数的简单拓展
KNN--k-NearestNeighbor可以是是分类法中最简单的算法了. 大致的idea为:找出k各跟新数据点最像的点,看这些点主要属于哪类,那么新数据点也就属于哪类的了. 其伪代码如下: 1. ...