MySQL主从复制+读写分离(二)

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL主从复制+读写分离(二)

3.3.5验证主从同步

#在主服务器上创建一个库
create database ceshi;
• 1
• 2



#在从服务器上查看
show databases;
• 1
• 2



注:如果需要新加入从服务器,需要先锁住主服务器(防止别人写入数据造成数据丢失),然后将主服务器的数据全部备份到新的从服务器上,然后在新添加的从服务器上 master_log_file 和 master_log_pos 的值是最新的。


锁库

flush tables with read lock;

解锁

unlock tables;


3.4搭建MySQL读写分离

3.4.1安装java环境

总体操作:


################安装 Java 环境###############
1.#下载安装包:jdk-6u14-linux-x64.bin、amoeba-mysql-binary-2.2.0.tar.gz 
cd /opt
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
source /etc/profile      #刷新配置文件
java -version



分部演示:

①下载 安装包


②把jdk复制到/usr/local下

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



③赋予jdk权限并执行


③赋予jdk权限并执行

chmod +x /usr/local/jdk-6u14-linux-x64.bin
cd /usr/local/
./jdk-6u14-linux-x64.bin  #一路回车到底,最后输入yes 自动安装




④把jdk改个名字


mv jdk1.6.0_14/ jdk1.6


⑤配置环境并刷新


配置环境并刷新
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
source /etc/profile      #刷新配置文件
java -version #查看版本

3.4.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



分部演示:

①在/usr/local目录下创建amoeba目录并解压amoeba


mkdir /usr/local/amoeba
1


②切换至opt解压amoeba


cd /opt/
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
cd /usr/local/ 切换至目录查看

③给目录/usr/local/amoeba赋予执行权限并运行amoeba


#给目录/usr/local/amoeba赋予执行权限
chmod -R 755 /usr/local/amoeba/
#运行amoeba
/usr/local/amoeba/bin/amoeba
# 显示amoeba start|stop就算是成功了

3.4.3配置amoeba读写分离

总体操作:


###########配置 Amoeba读写分离 ####
1.#先在Master、slave1、slave2mysql上开放权限给 Amoeba 访问
grant all on *.* to test@'192.168.145.%' identified by '123456';
flush privileges;
2.#备份amoeba配置
cd /usr/local/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
cp dbserver.dtd dbserver.dtd.bak
3.#修改amoeba配置
vim amoeba.xml
30 <property name="user">amoeba</property>
#设置登录用户名
32<property name="password">123456</property>
#设置密码
115<property name="defaultPool">master</property>
#设置默认池为master
118<property name="writePool">master</property>
#设置写池
119<property name="readPool">slaves</property>
#设置读池
vim dbServers.xml 
23 <!-- <property name="schema">test</property> -->
#23行注释
26<property name="user">test</property>
#设置登录用户
28 <!--  mysql password -->
#删除
29<property name="password">123456</property>
#解决28注释,添加密码
45<dbServer name="master"  parent="abstractServer">
#服务池名
48<property name="ipAddress">192.168.145.10</property>
#添加地址
52<dbServer name="slave1"  parent="abstractServer">
55<property name="ipAddress">192.168.145.21</property>
复制6行 添加另一从节点
59<dbServer name="slave2"  parent="abstractServer">
62<property name="ipAddress">192.168.145.12</property>
66<dbServer name="slaves" virtual="true">
#定义池名
72<property name="poolNames">slave1,slave2</property>
#写上从节点名
4.#启动amoeba,并测试
amoeba start
netstat -ntap |grep java

分部演示:

①先在master、slave1、slave2的mysql上开放权限给amoeba访问


grant all on *.* to test@'192.168.145.%' identified by '123456';
flush privileges;




②备份amoeba配置


cd /usr/local/amoeba/conf/
cp amoeba.xml amoeba.xml.bak
cp dbserver.dtd dbserver.dtd.bak

③修改amoeba配置


vim amoeba.xml
30 <property name="user">amoeba</property>
#设置登录用户名
32<property name="password">123456</property>
#设置密码
115<property name="defaultPool">master</property>
#设置默认池为master
118<property name="writePool">master</property>
#设置写池
119<property name="readPool">slaves</property>
#设置读池
vim dbServers.xml 
23 <!-- <property name="schema">test</property> -->
#23行注释
26<property name="user">test</property>
#设置登录用户
28 <!--  mysql password -->
#删除
29<property name="password">123456</property>
#解决28注释,添加密码
45<dbServer name="master"  parent="abstractServer">
#服务池名
48<property name="ipAddress">192.168.137.20</property>
#添加地址
52<dbServer name="slave1"  parent="abstractServer">
55<property name="ipAddress">192.168.137.15</property>
复制6行 添加另一从节点
59<dbServer name="slave2"  parent="abstractServer">
62<property name="ipAddress">192.168.137.10</property>
66<dbServer name="slaves" virtual="true">
#定义池名
72<property name="poolNames">slave1,slave2</property>
#写上从节点名




④启动amoeba,并测试


amoeba start
/usr/local/amoeba/bin/amoeba start &
netstat -ntap |grep java


3.4.4进行主从复制测试

①这边就把amoeba机器当成客户机进行测试(也可以使用另一台机器当客户端)


yum install mariadb mariadb-server.x86_64 -y


②登入并查看数据库


mysql -uamoeba -p123456 -h 192.168.145.11 -P8066

③测试同步


#在主服务器服务器上新建表
use class;
create table test(id int(10),name char(40));
show tables;
#在客户机上,插入数据会同步到所有数据库中
 use class;
 insert intotest values(3,'ll');



④在从服务器上查看





3.4.5进行读写分离测试

①两台从服务器上


stop slave;   #关闭同步



#在主服务器 上
insert into test values('4','开');
#在slave1上
insert into test values('2','始');
#在slave2上
insert into test values('3','le');



四、总结


我们重点要熟知mysql的主从复制原理和读写分离的原理,这个是重中之重,必须掌握;MySQL有四种同步方式:异步复制(Async Replication)、同步复制(sync Replication)、半同步复制(Async Replication)、增强半同步复制(lossless Semi-Sync Replication);MySQL读写分离的俩种实现方式:基于程序代码内部实现、基于中间代理层实现。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
SQL 运维 关系型数据库
MySQL数据库运维第一篇(日志与主从复制)
MySQL数据库运维第一篇(日志与主从复制)
|
1月前
|
SQL 负载均衡 关系型数据库
mysql主从复制,从搭建到使用
mysql主从复制,从搭建到使用
32 1
|
2月前
|
SQL 关系型数据库 MySQL
mysql 主从复制与读写分离
mysql 主从复制与读写分离
|
1月前
|
SQL 监控 关系型数据库
探秘MySQL主从复制的多种实现方式
探秘MySQL主从复制的多种实现方式
17 0
|
7天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
919 6
Mysql 数据库主从复制
|
28天前
|
存储 关系型数据库 MySQL
Java大佬必知必会——MySQL主从复制
如果你现在有两台MySQL,一台版本是03年的MySQL5.0,另一台是18年的MySQL8.0.11。新版本可以作为老版本的从服务器,但反过来是不可行的。如果二进制文件包含了已存在的数据,就会造成数据重复了。如果从服务器复制该二进制文件后的数据库状态是混乱无序的,那整个复制的过程就没有意义了。如果主、从服务器存储数据的顺序不一样,就会导致每次执行删除的数据都是不同的。,老版本可能无法解析新版本的新特性,甚至复制的文件格式都差异太大。MySQL从库只会复制它本身缺失的最新数据,利用二进制文件里的。
Java大佬必知必会——MySQL主从复制
|
21天前
|
SQL 关系型数据库 MySQL
MySQL高可用架构设计:从主从复制到分布式集群
MySQL高可用性涉及主从复制、半同步复制和Group/InnoDB Cluster。主从复制通过二进制日志同步数据,保证故障时可切换。半同步复制确保事务在至少一个从服务器确认后才提交。Group Replication是多主复制,支持自动故障切换。InnoDB Cluster是8.0的集成解决方案,简化集群管理。使用这些技术能提升数据库的稳定性和可靠性。
217 2
|
24天前
|
关系型数据库 MySQL
mysql-proxy实现mysql的读写分离
mysql-proxy实现mysql的读写分离
|
27天前
|
负载均衡 关系型数据库 MySQL
MySQL 主主复制与主从复制对比
MySQL的主主复制和主从复制是两种常见的数据库复制配置方式,各有优缺点和适用场景。以下是对这两种复制方式的详细对比: ### 主从复制 (Master-Slave Replication) **特点:** 1. **单向复制**:数据从主服务器复制到一个或多个从服务器。从服务器只能从主服务器接收数据更新,不能向主服务器发送数据。 2. **读写分离**:主服务器处理写操作(INSERT、UPDATE、DELETE),从服务器处理读操作(SELECT),可以分担读负载,提高系统的整体性能。 3. **数据一致性**:数据在主服务器上是最新的,从服务器上可能会有一定的延迟。 **优点:**
|
20天前
|
关系型数据库 MySQL 编译器
MySQL主从复制
MySQL主从复制
14 0