centos7.2 mysql集群_centos7.2下mysql的主从复制与读写分离

centos7.2下mysql的主从复制与读写分离:

1.为什么要配置数据库集群和主从复制

一些大型的项目,由于访问并发量的增多会导致数据库的压力倍增,利用redis缓存减少数据库的压力,从而提升数据库的效率单个数据库同时负责读写任务,底层可能会出现锁的现象:同步锁,事务锁,乐观锁,悲观锁,单个数据库同时负责读写,效率还是不高;配置主从可以分担数据库的压力,进行读写分离,所有的数据库插入,修改等写入操作从主库进行,所有的数据查询等读取操作走从库,这样就分担了单一数据库的运行压力。

2.实现原理:

配置主从结构先在主上打开一个二进制日志的文件(Binary.log),在master写操作时,就会把写的命令存入到这个二进制文件中(insert,update,delete),slave开启一个IO线程,线程定时读取主节点的二进制文件,将新的命令抓取过来

存放到本地一个中继日志中(relay.log);slave上还有一个定时启动的线程叫sql,监控本地的中继日志,一旦有新的命令发现,将会把中继日志中的命令执行一遍。这样一来,主从结构就完成了数据的备份;

3.安装linux的mysql(percona

1.安装cmake(如果使用虚拟机镜像无需本步操作)

#yum -y install cmake

2.更新yum

3.安装

yum install Percona-Server-client-56 Percona-Server-server-56

安装如果有冲突,之前已经安装过mysql,则需要卸载

rpm -qa | grep mysql

如果有mysql软件的话,将其删除,执行

yum remove .....将软件包全部都删除掉。

4.安装完成后检查两点,一个是/etc/my.cnf存在不存在,一个是/var/lib/mysql目录中有没有mysql数据文件,如果有,那么基本上安装成功了。

692747fdcfd9c3dbd5a69a57a3f75d37.png

f1cb9b3dbd2b65b36faeed7c28fba816.png

5.启动mysql服务

运行命令:systemctl start mysql.service

成功后,查看mysql运行状态,systemctl status mysql.service后如下图:

c0c315ae990bf77748745ef5b95a3381.png

6.修改mysql的密码

此时mysql并没有设置初始密码,所以先设置密码,进入mysql中(终端直接输入mysql即可):

mysql> use mysql;

mysql> update user set password=password('123') where user='root' and host='localhost';

mysql> flush privileges;

然后重启mysql服务,重新登录

mysql -uroot -p123   即可。

7.开启远程连接mysql服务器

a.开启之前一定要确定自己开放了3306端口,或者完全关闭掉防火墙,否则远程无法连接。(关闭防火墙或者开放端口,请百度)

b.创建数据库文件,例如,这里直接导入一个sql文件(之后主从复制会用到,导入sql文件,在mysql下直接输入命令,source 路径/xx.sql)

c.默认安装的msql没有开启远程访问,所以要设置一个权限。

mysql>grant all on *.* to 'root'@'%' identified by 'root';

执行成功后,就可以在远程客户端连接试试看了,这里我使用的是mysqlworkbeach,如下:

98d4e5930f2c84d52f154dfa3ae864bb.png

以上操作,分别在两台虚拟机中进行,操作一模一样。

8.配置数据库的主从关系

配置主服务器

编辑主master服务器配置文件/etc/my.cnf

在[mysqld]节点下加入两句话

server-id=1

log-bin=mysql-bin        #启用二进制日志;

c50892bc3f1845cb89a6ade0aebe29f5.png

然后重启服务:systemctl restart mysql.service

登录mysql:mysql –uroot -proot

mysql>flush tables with read lock;   #数据库锁表,不让写数据;这步骤可不做

对于当前环境的mysql无需使用lock命令,因为没有人操作,但是生产环境中必须这样做

mysql>show master status;    #查看MASTER状态(这两个值File和Position)其中的file就是二进制文件,position记录当前操作sql的步骤数(注意一条sql包含多步,所以不是sql语句的条数)

6948bef71281ee1641cca21c174bcc35.png

因为我对数据库主从已经操作过了,所以会记录一些步骤数,一般情况下,第一次显示position的数量是120

配置从服务器

修改/etc/my.cnf增加一行

server-id=2

003103dffa323f0504f3f3dd0be1fb2e.png

然后重启服务器

systemctl restart mysql.service

通过mysql命令配置同步日志的指向:

mysql>change master to master_host=‘192.168.41.41’, master_port=3306,

master_user='root',master_password='root',

master_log_file='mysql-bin.000001',

master_log_pos=120;

master_host        主服务器的IP地址(内网地址)

master_port        主服务器的PORT端口

master_log_file    和主服务器show master status中的File字段值相同

master_log_pos        和主服务器show master status中的Position字段值相同

mysql>start slave;                #stop slave;停止服务,出错时先停止,再重新配置

mysql>show slave status\G;        #查看SLAVE状态,\G结果纵向显示。必须大写,这个命令无法再sqlyog中使用

systemctl restart mysql.service        #重启服务

7bc4a89cabe415c938fb35f6c00f4f03.png

9.此时主从复制就配好了,现在来测试一下吧!!

第一步:在主表中创建一个数据表(表名什么都可以,测试用嘛),然后插入数据,如下:

9b0e5011f7d5a25190c7f120cdb55dee.png

此时观察从表,刷新,哎,卧槽,有数据了,说明从库已经从主库读取并写入了。

c9781c7d6e1b70d2f5d6f0998d55ae27.png

第二步:在主表和从表中插入一样的数据,例如在主,从表分别中插入:id =3 name=clearlove,然后查看,嗯,全部都插入成功了,此时再看从表slave状态,卧槽??挂了?

b40fd2ce53ca4ff5ba4b281f28de4a49.png

此时,slave_io_running成no了,挂了。为什么?

因为从表要从主表读取数据,主从都有了,我还读你xxx啊?

此时,再改主表数据也没用了,主从都挂了,能有用吗?怎么办?重新挂接呗!!

错误数据必须清除否则继续主从失效,查看主节点中的二进制文件名称pos,但是先停止从节点的从状态stop slave

1.查看主节点中二进制文件pos,怎么查看呢?这样show master status;

7151d9fe410fcc1fb3e941944ae1e549.png

2.在从节点中把查询出来的最新数据放到命令里挂接主节点

9454b5f5455b40749a9f0d1468de166b.png

启动从节点的slave

start slave

此时再看下:ok!!!

e2b1a9ec02f6f6492bdc1087618571e0.png

但是这个时候发现id为3的对应b1字段的值没有改。所以mysql虽然支持主从关系但是并没有维护读写分离的状态。

10.安装配置amoeba

步骤1: 安装jdk

amoeba基于jdk环境所以需要安装jdk(网上百度吧!!)

步骤2:安装amoeba

wget https://jaist.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.0.1-BETA.tar.gz

然后解压: tar -xf amoe......

步骤3: 配置读写分离

1.配置conf/dbService.xml

修改用户名和密码

66498da768fb78bd37bdda84332bede0.png

配置主从的名称和ip地址

a6dfbae6324dbc6681d87ef2b6e49b2b.png

配置负载均衡的策略

41a548dd9b5dd188b8a76069cc3ecd76.png

这个xml文件配置基本结束了,接下来配置amoeba.xml,核心的配置文件,将要加载dbServer.xml才能使用其中的配置,才能使负载均衡有效果

2.配置amoeba.xml

配置ip地址;(192.168.41.41为你主机的ip地址,amoeba主从主需要配置一台即可)

8196e25e1d8b38cdb622950e76d841ff.png

写上root密码

e91620bfbdc14d1ba1b1f30b20dc5f93.png

继续配置写池使用master,读池使用multiPool

9a5b14364582435d860d7d2c261eae48.png

注意:此时基本上配置完了,但是amoeba基于java做的,对java有个小要求,最少的stack size太少栈的size太小java默认128K,所以还要修改下栈的size,修改启动文件/bin/amoeba,修改为256.如下:

d3170d18aa1da27a7874ba2547db8267.png

这样就配置完成了。启动下吧!!

输入     ./amoeba start

94452f18044999139d11fb4a2962b707.png

最后,本地连接下吧!!

890b6ab4925f57f78391a85cc1d6880d.png

ok,全部配置成功了!!注意,要开启8066端口或者要关闭防火墙,否则外面访问不到啊!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值