MySQL数据库主从复制、读写分离



在企业网站中,Mysql数据库只有一台时,会有以下问题:
·单点故障,服务不可用
·无法处理大量的并发数据请求
·数据一旦丢失就是大灾难

改造办法:
·增加MySQL数据库服务器,对数据库进行备份,形成主备
·确保主备MySQL数据库服务器数据是一样的
·主服务器宕机了,备份服务器继续工作,数据有保障

更高级的解决方案:
·通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力



MySQL主从复制的类型
·基于语句的复制(默认):在主服务器上执行的语句,从服务器执行同样的语句
·基于行的复制:把改变的内容复制到从服务器
·混合类型的复制:一旦发现基于语句无法精确复制时,就会采用基于行的复制



MySQL主从复制的工作过程

MySQL主服务器将数据写入二进制文件Binary log,从服务器的I/O线程读取Binary log里的数据将其写入Relay log中继日志文件中,然后从服务器的SQL线程从Relay log读取数据。



MySQL读写分离原理
·只在主服务器上写,只在从服务器上读
·主数据库处理事务性查询,从数据库处理SELECT查询
·数据库复制用于将事务性查询的变更同步到集群中的从数据库
·读写分离方案:
(1)基于程序代码内部实现
(2)基于中间代理层实现
·MySQL-Proxy
·Amoeba(MyCat)




MySQL主从复制、读写分离案例
在这里插入图片描述

设备:
MySQL主服务器:1台(IP:20.0.0.31)
MySQL从服务器:2台(slave1 IP:20.0.0.32 、 slave2 IP:20.0.0.33)
amoeba:1台(IP:20.0.0.100)
测试客户端:1台(IP:20.0.0.111)


MySQL主服务器配置:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
hostnamectl set-hostname master
ntpdate ntp1.aliyun.com
date -R (以RFC-2822兼容日期格式显示时间)
在这里插入图片描述

vim /etc/my.cnf
在这里插入图片描述

service mysqld restart
ls /usr/local/mysql/data/ (图中是服务器的日志文件)
在这里插入图片描述

mysql -u root -p
grant replication slave on . to ‘myslave’@‘20.0.0.%’ identified by ‘abc123’;
flush privileges;
show master status;
在这里插入图片描述

select host,user from mysql.user;
在这里插入图片描述


MySQL从服务器slave1配置:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
hostnamectl set-hostname slave1
su
ntpdate ntp1.aliyun.com
date -R
在这里插入图片描述

vim /etc/my.cnf
在这里插入图片描述

service mysqld restart

mysql -uroot -p

master_host=’20.0.0.31’,master_user=’myslave’,master_password=’abc123’,master_log_file=’master-bin.000001’,master_log_pos=599;

start slave;
在这里插入图片描述

show slave status\G;
在这里插入图片描述



MySQL从服务器slave2配置:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
hostnamectl set-hostname slave2
su
ntpdate ntp1.aliyun.com
date -R
在这里插入图片描述
vim /etc/my.cnf
在这里插入图片描述

service mysqld restart

mysql -uroot -p

change master to master_host=’20.0.0.31’,master_user=’myslave’,master_password=’abc123’,master_log_file=’master-bin.000001’,master_log_pos=599;

start slave;
在这里插入图片描述

show slave status\G;
在这里插入图片描述



测试一下主从复制:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述




amoeba服务器配置:

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum -y install lrzsz
在这里插入图片描述

cd /opt
chmod a+x jdk-6u14-Linux-x64.bin
./jdk-6u14-Linux-x64.bin
ls
在这里插入图片描述

mv jdk1.6.0_14/ /usr/local/jdk1.6
cd /usr/local/jdk1.6/
ls
cd bin/
ls
在这里插入图片描述

vim /etc/profile (如果出现bash报错,yum -y install vim 安装一下即可)
将以下内容插入配置文件末尾:
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
mkdir /usr/local/amoeba
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/

/usr/local/amoeba/bin/amoeba
(如果显示amoeba start|stop说明安装成功)
在这里插入图片描述



在三台mysql服务器上添加权限开放给amoeba访问:
grant all on . to test@‘20.0.0.%’ identified by ‘abc123’;
flush privileges;




配置amoeba配置文件:
vim /usr/local/amoeba/conf/amoeba.xml
(shift+冒号,输入set nu 显示行号)
在这里插入图片描述
在这里插入图片描述
:wq保存退出



vim /usr/local/amoeba/conf/dbServers.xml
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
:wq保存退出

启动amoeba:
/usr/local/amoeba/bin/amoeba start &
在这里插入图片描述
前台的方式启动,会输出启动时的信息,检查没有错误信息后,中断,并后台运行。

输入不了命令,可以再连接一个ssh窗口:
在这里插入图片描述




测试客户端:
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

yum -y install mariadb-server
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

连接amoeba服务器:
mysql -u amoeba -pabc123 -h 20.0.0.100 -P8066
在这里插入图片描述

客户端进行读写分离测试:
在这里插入图片描述
在这里插入图片描述

切换到master主服务器:
在这里插入图片描述

切换到slave1从服务器:
在这里插入图片描述

切换到slave2从服务器:
在这里插入图片描述



分别在slave1和slave2上:
stop slave;
show slave status\G;
在这里插入图片描述

切换到客户端:
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值