mysql主从复制与读写分离

mysql主从复制与读写分离

在实际生产环境中,数据库读写都在同一个数据库服务中操作,无论在安全性、高可用性,还是高并发都是完全不能满足实际需求的,因此需要主从复制的方式来同步数据,在通过读写分离来提升负载能力的方案来进行。
在这里插入图片描述
mster开启二进制允许
从进行同步从开启二进制模式找谁同步
IO故障:授权,网络

读写分离原理

只在主服务器上写,只在从服务器上读
主数据库处理事务性查询,从数据库处理select查询
数据库复制用于将事务性查询变更同步到集群中的从数据库
读写分离方案:基于程序代码内部实现
基于中间代理层实现
mysql-proxy
amoeba
在这里插入图片描述
有三个账号需要创建并给权限的。

实验拓扑图
在这里插入图片描述
首先需要设置时间同步,不然会出问题

同步阿里云时间,时间同步协议ntp开放123端口
[root@localhost ~]# ntpdate ntp.aliyun.com

首先配置主服务器

server-id = 11   ##服务器的id不能相同修改id
log-bin = master-bin  ##主服务器开启二进制文件日志名字叫master-bin
log-slave-updates = true   ##从服务器允许更新二进制文件日志
wq保存退出
刷新mysqld服务
[root@localhost mysql]# systemctl restart mysqld
检查二进制文件是否开启
[root@localhost mysql]# ls /usr/local/mysql/data/
master-bin.000001 ##有了这个就是开启了二进制文件
之后去开放权限,没用这个用户会自动产生,有了就是赋予权限
进入数据库 mysql -uroot -p
mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123456';
##开启同步允许所有数据库表用过myslave准许的那个网段密码进行
Query OK, 0 rows affected, 1 warning (0.00 sec)
刷新
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
查看定位pos ##之后需要用到
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      599 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)


主服务器就设置完成了。

设置从服务器

修改mysql配置文件
vi /etc/my.cnf
server-id = 22  ##修改id号
relay-log = relay-log-bin  ##开启中继日志
relay-log-index = slave-relay-bin.index  ##定义位置并设置索引
wq保存刷新
[root@localhost mysql]# systemctl restart mysqld
进入数据库mysql -uroot -p
mysql> change master to master_host='20.0.0.25',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599;
## 设置主服务器地址,使用的用户,用户密码,指定的二进制文件名,主服务器pos值
Query OK, 0 rows affected, 2 warnings (0.01 sec)
开启功能
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
查看是否启动线程
mysql> show slave status\G
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
两个yes就表示开启了线程。
另一台从服务器配置相同,id不同就行。

接下来设置amoeba服务器

先把jdk压缩包拖入,解压
[root@localhost opt]# tar xzvf jdk-8u144-linux-x64.tar.gz
[root@localhost opt]# cp -rv jdk1.8.0_144/ /usr/local/java
之后修改profile配置文件
vi /etc/profile
export JAVA_HOME=/usr/local/java  ##调用类库,要依赖于java
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib  ##指定环境变量bin能被识别
export AMOEBA_HOME=/usr/local/amoeba  ##amoeba工作目录
export PATH=$PATH:$AMOEBA_HOME/bin  ##便于amoeba命令被识别
wq保存然后刷新环境变量
[root@localhost opt]# source /etc/profile
[root@localhost opt]# echo $PATH
查看里面有了amoeba和mysqlbin就完成了
/usr/local/mysql/bin:/usr/local/mysql/lib:/usr/local/mysql/bin:/usr/local/mysql/lib:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/amoeba/bin
然后将amoeba压缩包拉入opt下
解压amoeba并将文件拉入usr/local下的amoeba,并给755权限
[root@localhost opt]# unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
[root@localhost opt]# mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba
[root@localhost opt]# chmod -R 755 /usr/local/amoeba/
修改32行
[root@localhost opt]# vi /usr/local/amoeba/amoeba-mysql-3.0.5-RC/jvm.properties 
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k"
wq保存
制作amoeba管理脚本
[root@localhost opt]# vi /etc/init.d/amoeba
#!/bin/bash
#chkconfig: 35 62 62
#
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
NAME=Amoeba
AMOEBA_BIN=/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin/launcher
SHUTDOWN_BIN=/usr/local/amoeba/amoeba-mysql-3.0.5-RC/bin/shutdown
PIDFILE=/usr/local/amoeba/amoeba-mysql-3.0.5-RC/Amoeba-MySQL.pid
SCRIPTNAME=/etc/init.d/amoeba
case "$1" in
start)
echo -n "Starting $NAME... "
$AMOEBA_BIN
echo " done"
;;
stop)
echo -n "Stoping $NAME... "
$SHUTDOWN_BIN
echo " done"
;;
restart)
$SHUTDOWN_BIN
sleep 1
$AMOEBA_BIN
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}"
exit 1
;;
esac
wq保存,给脚本权限
[root@localhost opt]# chmod +x /etc/init.d/amoeba
[root@localhost opt]# chkconfig --add amoeba
重启amoeba
[root@localhost opt]# service amoeba start
查看开没开启8066端口
[root@localhost bin]# netstat -anpt | grep 8066
tcp6       0      0 :::8066                 :::*                    LISTEN      98518/java          

然后在三台主从服务器上开放端口

[root@localhost ~]# mysql -u root -p
5.7没test数据库需要创建
mysql> create database test;
Query OK, 1 row affected (0.01 sec)
mysql> grant all on *.* TO test@'20.0.0.%' IDENTIFIED BY '123456';
刷新后退出
mysql> FLUSH PRIVILEGES;
回到amoeba服务器
[root@localhost conf]# cd /usr/local/amoeba/amoeba-mysql-3.0.5-RC/conf/
因为java开发文件都是xml,需要加载标签
[root@localhost conf]# vi amoeba.xml 
---28行-----设置客户端连接amoeba前端服务器时使用的用户名和密码----
 <property name="user">amoeba</property>
----30行---------
 <property name="password">123456</property>
83-去掉注释-同时把默认的server1改成master,把默认的servers改成 slaves
 <property name="defaultPool">master</property>
 <property name="writePool">master</property>
 <property name="readPool">slaves</property>
 wq保存退出
 编辑db文件
 [root@localhost conf]# vi dbServers.xml
 -26-29--去掉注释--
 <property name="user">test</property>
 <property name="password">123456</property>
 ------主服务器地址---
 43 <dbServer name="master"  parent="abstractServer">
 46 <property name="ipAddress">20.0.0.25</property>
--50-从服务器主机名-
<dbServer name="slave1"  parent="abstractServer">
--53-从服务器地址-
 <property name="ipAddress">20.0.0.26</property>
 还有一台复制粘贴改为28
 shift+G到结尾
         <dbServer name="slaves" virtual="true">                 #####name后面改成 slaves
                <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                        <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
                        <property name="loadbalance">1</property>
                        <!-- Separated by commas,such as: server1,server2,server1 -->
                        <property name="poolNames">slave1,slave2</property>            #####poolNames后面改成 slave1,slave2
                </poolConfig>
        </dbServer> 
wq保存退出
刷新amoeba
service amoeba restart
mysql -u amoeba -p123456 -h 127.0.0.1 -P8066 ### 登录 amoeba服务端
Enter password: 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值