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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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读写分离的俩种实现方式:基于程序代码内部实现、基于中间代理层实现。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
130 1
|
2月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
144 1
|
2月前
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
178 0
|
8天前
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
67 24
|
2月前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
123 1
MySQL主从复制原理和使用
|
2月前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
3月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
129 6
|
3月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
78 1
|
3月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
4月前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
98 2