实验:mysql的主从复制-读写分离

it2023-08-30  69

目录

一、案例环境

一、案例环境

实验操作: #########案例环境############# IP地址 主机 操作系统 20.0.0.5 master centos-7.6-x86_64 20.0.0.3 Slave1 centos-7.6-x86_64 20.0.0.6 Slave2 centos-7.6-x86_64 20.0.0.4 Amoeba centos-7.6-x86_64 ###maste、slave1、slave2、Amoeba ### 常规操作,需要先把防火墙、核心防护关闭掉,操作可以看我的基础操作博客 建立时间同步环境 同步阿里云服务,所有服务器都要同步!!! [root@localhost ~]# ntpdate ntp1.aliyun.com [root@localhost ~]# date -R [root@localhost ~]# yum -y install ntp ###如果不是最小化安装,就不用yum安装ntp ####安装MySQL数据库######### 前面的博客写的非常详细!这里就不过多讲解......

myslq安装博客地址: 点击这里.

登录master主服务器配置20.0.0.5 [root@localhost ~]# vi /etc/my.cnf server-id = 11 ###修改成11,这里数字可以随便改,不要和从服务器一样就行。 log_bin = master-bin ###开启二进制日志,= 后面的日志名称 log-slave-updates = true ###允许从服务器找他更新二进制日志 [root@localhost ~]# systemctl restart mysqld ###重启mysql服务 [root@slaver1 ~]# cd /usr/local/mysql/data/ [root@slaver1 data]# ls ###查看一下二进制日志是否生产 master-bin.000001 #######master数据库给从服务器授权##### [root@localhost ~]# mysql -uroot -p ###登录数据库 mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123456'; ###我允许slave找我开启同步,允许对方所有数据库、所有表使用myslave用户,通过20.0.0网段的,使用123456密码 mysql> flush privileges; ###想让策略生效,刷新一下 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) 登录salver1从服务器配置20.0.0.3 [root@localhost ~]# vi /etc/my.cnf server-id = 22 ###在原来server-id=1的地方修改成22 ,这里数字可以随便改,不要和别的服务器一样就行。 relay-log = relay-log-bin ###开启中继日志,= 后面的日志名称 relay-log-index = slave-relay-bin.index ###定义relay-log的位置和名称 [root@localhost ~]# systemctl restart mysqld ###重启mysql服务 [root@localhost ~]# mysql -uroot -p ###登录数据库 mysql> change master to master_host='20.0.0.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599; ###把主服务器地址填好,再把刚刚设置的账号密码填上(账户myslave、密码123456 ),和刚刚让记录下来的二进制日志名和定位号写上。 mysql> start slave; ###开启功能 mysql> show slave status\G ###看看主从是否开启,\G是竖着查看 *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: 20.0.0.5 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 599 Relay_Log_File: relay-log-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: yes ###IO线程要开启才可以 Slave_SQL_Running: Yes ###SQL线程也要开启才可以 ............................................ 登录salver2从服务器配置20.0.0.6 [root@localhost ~]# vi /etc/my.cnf server-id = 33 ###在原来server-id=1的地方修改成33 ,这里数字可以随便改,不要和别的服务器一样就行。 relay-log = relay-log-bin ###开启中继日志,= 后面的日志名称 relay-log-index = slave-relay-bin.index ###定义relay-log的位置和名称 [root@localhost ~]# systemctl restart mysqld ###重启mysql服务 [root@localhost ~]# mysql -uroot -p ###登录数据库 mysql> change master to master_host='20.0.0.5',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599; ###把主服务器地址填好,再把刚刚设置的账号密码填上(账户myslave、密码123456 ),和刚刚让记录下来的二进制日志名和定位号写上。 mysql> start slave; ###开启功能 mysql> show slave status\G ###看看主从是否开启,\G是竖着查看 *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: 20.0.0.5 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 599 Relay_Log_File: relay-log-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: yes ###IO线程要开启才可以 Slave_SQL_Running: Yes ###SQL线程也要开启才可以 ....................略........................ 验证主从复制效果 ###主的建库,从服务器会同步### 登录20.0.0.5 [root@localhost ~]# mysql -uroot -p mysql> create database cs; ###创建个数据库 登录20.0.0.3和20.0.0.6 [root@localhost ~]# mysql -uroot -p mysql> show databases; ###查看一下数据库是否同步,应该也都有cs数据 amoeba服务器配置 先把jdk-6u14-linux-x64二进制安装文件和amoeba-mysql-binary-2.2.0.tar压缩包上传上来 [root@amoba ~]# chmod +x jdk-6u14-linux-x64.bin ###给jdk一个执行的权限 [root@amoba ~]# ./jdk-6u14-linux-x64.bin ###然后直接执行,然后一直空格到了下面问是否建立项目,输入yes,然后等一下在回车,在等一下就执行完成 [root@amoba ~]# mv jdk1.6.0_14/ /usr/local/jdk1.6 ###然后把刚刚的文件移动到指定目录里 [root@amoba ~]# vim /etc/profile ###配置环境变量,在最后添加下面四句代码 export JAVA_HOME=/usr/local/jdk1.6 ###指定java的工作目录 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib ###jre就是java的虚拟机,里面会有默认的类(比如class),lib就是类库 export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin export AMOEBA_HOME=/usr/local/amoeba ###amoeba工作目录 export PATH=$PATH:$AMOEBA_HOME/bin [root@amoba ~]# source /etc/profile ###执行一下 [root@amoba ~]# echo $PATH ###输出一下,输出下面内容证明已经生效了 /usr/local/jdk1.6/lib:/usr/local/jdk1.6/jre/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin:/usr/local/amoeba/bin [root@amoba ~]# mkdir /usr/local/amoeba ###建一个amoeba目录 [root@amoba ~]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ ###把amoeba解压到刚刚创建的目录下 [root@amoba ~]# chmod -R 755 /usr/local/amoeba/ ###变更一下属组,给755权限 [root@amoba ~]# /usr/local/amoeba/bin/amoeba ###直接执行这条命令,显示amoeba start|stop说明安装成功 mysql> GRANT ALL ON *.* TO test@'20.0.0.%' IDENTIFIED BY '123.com'; ###除amoeba外三台都要执行 mysql> flush privileges; ###执行上面后,三台都要刷新一下 ##########这个时候amoeba就可以通过test账户123.com密码登录每台进行响应的操作############# [root@amoba ~]# cd /usr/local/amoeba/conf/ [root@amoba conf]# vim amoeba.xml <property name="user">amoeba</property> ###然后把三十行、三十二行的账号密码改一下 <property name="password">123456</property> <property name="defaultPool">master</property> ###然后把115行往下两行都这样更改,去掉注释,这里只是改个名字,并是不后面就读取这个配置 <property name="writePool">master</property> <property name="readPool">slaves</property> [root@amoba conf]# vim dbServers.xml <property name="schema">mysql</property> ###23行这里数据库5.7版本默认是test,应该改成你里面有的数据库名字,5.5、5.6版本的不用改,默认有test数据库 <property name="user">test</property> ###26行改成test用户 <property name="password">123.com</property> ###29行就是刚刚的用户密码123.com <dbServer name="master" parent="abstractServer"> ####45行往下就是master、slave1、slave2的配置 <factoryConfig> <!-- mysql ip --> <property name="ipAddress">20.0.0.5</property> </factoryConfig> </dbServer> <dbServer name="slave1" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">20.0.0.3</property> </factoryConfig> </dbServer> <dbServer name="slave2" parent="abstractServer"> <factoryConfig> <!-- mysql ip --> <property name="ipAddress">20.0.0.6</property> </factoryConfig> </dbServer> <dbServer name="slaves" virtual="true"> ###然后把66行改成这样,这样就和刚刚的amoeba.xml连接起来了 <property name="poolNames">slave1,slave2</property> ###72行改成这样,也是为了和刚刚的amoeba.xml连接起来 [root@amoba conf]# /usr/local/amoeba/bin/amoeba start& ###把一个进程放到了后台,并且开启了一个监控日志 配置mysql客户端 [root@amoba conf]# yum -y install mariadb* ###装一个mysql客户端 [root@amoba conf]# systemctl start mariadb ###启动一下mariadb服务 [root@amoba conf]# mysql_secure_installation ###简单自定义部署一下 这个时候让你输入密码,但没有密码就回车 输入y 在输入新密码abc123,再次确定abc123 在输入 n、n、n、y 就设置好了 测试 [root@amoba conf]# mysql -uamoeba -p -h 127.0.0.1 -P8066 ###因为我没有用客户端登录,直接在amoeba上面测试登录的,ip地址就用127.0.0.1,8066是端口 然后输入密码123456,就成功进去了

1、在amoeba里创建一个zang表 MySQL [(none)]> use cs; ###进入cs库 MySQL [cs]> create table zang(id int(10),name varchar(10),address varchar(20)); ###创建zang表 在主、从里面查看一下是否同步都有!

2、在两台从服务器上关闭功能,这样就不能读写分离了 mysql> stop slave; 在amoeba里插入一个zhang信息进去 MySQL [cs]> insert into zang values ('1','zhang','this_is_master'); 然后主从服务器查看一下

两台从的服务器就会不能查看

3、然后在slave1插入下面这条 MySQL [cs]> insert into zang values ('2','zhang','this_is_master1'); 在slave2插入下面这条 MySQL [cs]> insert into zang values ('3','zhang','this_is_master2'); 用amoeba看一下就会发现是id 3,在看一遍就是id2的,因为这里是轮询原则

而master不能看见id2和id3的zhang,实现了读写分离

最新回复(0)