栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

mysql的主从复制与读写分离

Java 更新时间:发布时间: 百科书网 趣学号

目录

一、主从复制的概述

1、主从复制的作用

2、mysql的复制类型

3、mysql主从复制的过程

二、主从复制的部署

1、环境配置

2、主从服务器的时间同步

3、配置主服务器

4、配置从服务器

5、验证主从同步

三、读写分离的部署

1、安装Java环境

2、部署amoeba

3、客户端验证


一、主从复制的概述 1、主从复制的原理

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。您看,像在mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到从服务器的更新中去。当一台从服务器连接到主服务器时,从服务器会通知主服务器从服务器的日志文件中读取最后一次成功更新的位置。然后从服务器会接收从哪个时刻起发生的任何更新,然后锁住并等到主服务器通知新的更新

2、mysql的复制类型

(1)基于语句的复制(STATEMENT)

在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。
(2)基于行的复制(ROW)

把改变的内容复制过去,而不是把命令在从服务器上执行一遍。

(3)混合类型的复制(MIXED)

默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制
 

3、mysql主从复制的过程

1)Master 服务器保存记录到二进制日志(当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。)
在每个事务更新数据完成之前,Master 服务器在二进制日志(Binary log)记录这些改变。写入二进制日志完成后,Master 服务器通知存储引擎提交事务。
2)Slave 服务器复制 Master 服务器的日志
Slave 服务器将 Master 服务器的二进制日志复制到其中继日志(Relay log)。
  首先 Slave 服务器开始一个工作线程(I/O),I/O线程在 Master 服务器上打开一个普通的连接,然后开始 Binlog dump process。
  Binlog dump process 从 Master 服务器的二进制日志中读取事件,如果 Slave 服务器已经跟上 Master 服务器,它会睡眠并等待 Master 服务器产生新的事件,I/O线程将这些事件写入中继日志。
3)Slave 服务器重放复制过来的日志
SQL slave thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新 Slave 服务器的数据,使其与 Master 服务器中的数据一致,只要该线程与 I/O 线程保持一致,中继日志通常会位于 OS 缓存中,所以中继日志的开销很小。
 

二、主从复制的部署 1、环境部署

(1)master服务器

192.168.222.10  mysql 5.7

(2)slave1服务器

192.168.222.100 mysql 5.7

(3)slave2服务器

192.168.222.20 mysql 5.7

(4)Amoeba服务器

 192.168.222.30   jdk1.6、Amoeba

(5)客户端

192.168.222.40  mysql 5.7

2、主从服务器时间同步

(1)主服务器配置

1.安装时间同步服务器
yum install ntp -y
 
2.修改配置文件
vim /etc/ntp.conf  
server 127.127.222.0   #设置本地时钟源
fudge 127.127.222.0 stratum 8  #设置时间层级为8 限制在15 以内
 
3.开启服务
service ntpd start

 

 (2)slave1服务器时间同步

1.安装时间同步服务器、同步服务
yum install ntp -y
yum install ntpdate -y
 
2. 开启服务
service ntpd start
 
3. 执行同步
/usr/sbin/ntpdate 192.168.222.10
 
4.#计划定时任务
crontab -e
*/30 * * * *  /usr/sbin/ntpdate 192.168.222.10
 

 

 (3)slave2服务器时间同步

1.安装时间同步服务器、同步服务
yum install ntp -y
yum install ntpdate -y
 
2. 开启服务
service ntpd start
 
3. 执行同步
/usr/sbin/ntpdate 192.168.222.10
 
4.#计划定时任务
crontab -e
*/30 * * * *  /usr/sbin/ntpdate 192.168.222.10

 

 

3、配置主服务器
1. 开启二进制日志
vim /etc/my.cnf
 
log-bin=master-bin        #开启二进制日志
binlog_format=MIXED       #二进制日志格式
log-slave-updates=true    #开启从服务器同步
 
2. 重启服务
systemctl restart mysqld.service 
 
3. 登入mysql,给从服务器在网段授权
mysql -uroot -p123123
grant replication slave on *.* to 'myslave'@'192.168.222.%' identified by '123123';
 
刷新数据库
flush privileges;
 
查看主服务器二进制文件
show master status;
开启二进制日志

 

 

 

 4、配置从服务器

(1)配置salve1服务器

1.#开启二进制日志
vim /etc/my.cnf
server-id = 2 
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
 
2.#重启服务
systemctl restart mysqld.service 
 
3. #登入mysql,配置同步注意master_log_file和master_log_pos的值要和master查询的一致
mysql -uroot -p123123
change master to master_host='192.168.222.10',master_user='myslave',master_password='123123',master_log_file='mysql-bin.000010',master_log_pos=604;
 
4.#启动同步,如果报错,执行restart slave试试
start slave;
show slave statusG;
##以下两个必须要是YES
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes
 
 

 

 

 

 (2)配置salve2服务器

1.#开启二进制日志
vim /etc/my.cnf
server-id = 3
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
 
2.#重启服务
systemctl restart mysqld.service 
 
3. #登入mysql,配置同步注意master_log_file和master_log_pos的值要和master查询的一致
mysql -uroot -p123123
change master to master_host='192.168.222.10',master_user='myslave',master_password='123123',master_log_file='mysql-bin.000010',master_log_pos=604;
 
4.#启动同步,如果报错,执行restart slave试试
start slave;
show slave statusG;
##以下两个必须要是YES
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes
 

 

 

 

 

5、验证主从同步
1、主服务器上创建新表
create database lk;

2、在两个从服务器上使用查看命令,是否能看到创建新的表
show databases;

 主服务器

 slave1服务器

  slaves2服务器

三、读写分离的部署 1、安装java环境
1、下载安装包
cd /opt
jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gz 

2、把jdk复制到/usr/local下

cp jdk-6u14-linux-x64.bin /usr/local/


3、赋予jdk权限并执行
chmod +x /usr/local/jdk-6u14-linux-x64.bin
cd /usr/local/
./jdk-6u14-linux-x64.bin  #一路回车到底,最后输入yes 自动安装

4、jdk改个名字
mv jdk1.6.0_14/ jdk1.6

5、配置环境并刷新
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

6、刷新配置文件
source /etc/profile

 

 2、安装amoeba
############## 安装amoeba ###########
 
1.在/usr/local目录下创建amoeba目录
mkdir /usr/local/amoeba
 
2.切换至opt解压amoeba
cd /opt/
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
 
cd /usr/local/ 切换至目录查看
 
 
3.给目录/usr/local/amoeba赋予执行权限
chmod -R 755 /usr/local/amoeba/
 
4.运行amoeba
/usr/local/amoeba/bin/amoeba
 
 
###########配置 Amoeba读写分离 ####
5.先在Master、Slave1mysql上开放权限给 Amoeba 访问
grant all on *.* to test@'192.168.222.%' identified by '123123';
flush privileges;
 
6.备份amoeba配置
cd /usr/local/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
cp dbserver.dtd dbserver.dtd.bak
 
7.修改amoeba配置
vim amoeba.xml
30 amoeba
#设置登录用户名
32123123
#设置密码
 
115master
#设置默认池为master
118master
#设置写池
119slaves
#设置读池
 
vim dbServers.xml 
23 
#23行注释
26test
#设置登录用户
28 
#删除
29123123
#解决28注释,添加密码
 
45
#服务池名
48192.168.222.10
#添加地址
 
52
55192.168.222.100
复制6行 添加另一从节点
59
62192.168.222.20
 
65
#定义池名
71slave1,slave2
#写上从节点名
 
8.启动amoeba,并测试
amoeba start
netstat -ntap |grep java

 

 

 

 

 

 

 

 

 

 

 

3、客户端验证
1.#安装mariadb
yum install mariadb mariadb-server.x86_64 -y
 
2.#登入并查看数据库
mysql -uamoeba -p123123 -h 192.168.222.30 -P8066
 
 
3.#测试同步
##在主服务器服务器上新建表
create database sk;
use sk;
create table ol(id int(10),name char(40));
show tables;
 
##在客户机上,插入数据会同步到所有数据库中
 use sk;
 insert into ol values(1,'yinhe');
 
##在主从服务器上查看
 
4.#测试读写分离
#停止slave1和slave2的slave同步功能
stop slave;
 
#在master、slave1和slave2上插入数据

 

 

 

 

 

 

 

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/957447.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号