MySQL主从复制与读写分离

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL主从复制与读写分离相关的知识,希望对你有一定的参考价值。

mysql主从复制与读写分离

实验前环境准备

  • Linux两台
  • MySQL数据库一主一从

开始搭建

MySQL主服务器
安装ntp

[[email protected] ~] yum install ntp -y
修改ntp主配置文件
# 在配置文件里面添加
server 127.127.100.0                    //本地是时钟源//
fudge 127.127.100.0 stratum 8          //设置时间层级为8(限制在15内)//

#开启主服务器的ntp
从服务器安装ntpdate
[[email protected] ~] yum install ntpdate -y
# 从服务器不需要配置直接启动
[[email protected] ~]# systemctl start ntpdate.service 

配置 MySQL

主服务器设置
#修改主配置文件
vim /etc/my.cnf

server-id       = 11               
log-bin=master-bin                         //主服务器日志文件//
log-slave-updates=true                     //从服务器更新二进制日志//

mysql -u root -p                           //进入数据库

GRANT REPLICATION SLAVE ON *.* TO ‘myslave‘@‘192.168.32.%‘ IDENTIFIED BY ‘123456‘;
#允许192.168.32.0网段的主机以myslave为用户名,密码123456,访问数据库的任何库和任何表
FLUSH PRIVILEGES;
#刷新数据库
mysql> show master status;  #查看
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      603 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
从服务器设置

server-id       = 22   #server-id 要和主服务器不一样是myql的身份身份标识是唯一的

relay-log=relay-log-bin                         //从主服务器上同步日志文件记录到本地//
relay-log-index=slave-relay-bin.index           //定义relay-log的位置和名称//

#进入mysql里面指定主服务器IP地址、用哪个用户登录、登陆密码、二进制文件名、偏移量(注:偏移量要随时看因为他会随时更新)
change master to master_host=‘192.168.100.101‘,master_user=‘myslave‘,master_password=‘123456‘,master_log_file=‘master-bin.000002‘,master_log_pos=339;
#开启从服务器同步
start slave;

show slave statusG;             //查看状态//
下面两个状态要显示开启如果是no的话表名主从复制没开启成功就要检查了
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

验证主从同步

主服务器上 create database db_test;

去从服务器上 show databases;

上面是主从同步,下面安装的amoeba是读写分离的调度服务器

配置amoeba服务器

#安装java环境
./jdk-6u14-linux-x64.bin 运行 中间有一个yes or no 的交互输入yes

#修改环境变量,在/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 运行profile
[[email protected] local] source /etc/profile

安装amoeba

上面做了两台MySQL数据库做的主从复制要做读写分离再加一台MySQL节点服务器做从

#先要有amoeba的源代码包解压到/usr/local里面创建一个amoeba的文件然后解压进去
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

chmod -R 755 /usr/local/amoeba/ #给amoeba文件夹755的执行权限

/usr/local/amoeba/bin/amoeba  #输入这句话显示下列内容表名安装成功

显示amoeba start|stop说明安装成功

#在三台mysql上添加权限开放给amoeba访问
grant all on *.* to [email protected]‘192.168.100.%‘ identified by ‘123.com‘;

回到amoeba服务器

cd /usr/local/amoeba
vim conf/amoeba.xml

---30行--

 <property name="user">amoeba</property>
----32行---------
 <property name="password">123456</property>

---117-去掉注释-
 <property name="defaultPool">master</property>
 <property name="writePool">master</property>
 <property name="readPool">slaves</property>

vi conf/dbServers.xml

--26-29--去掉注释--
 <property name="user">test</property>

 <property name="password">123.com</property>

-----42-主服务器地址---
<dbServer name="master"  parent="abstractServer">
 <property name="ipAddress">192.168.100.101</property>
--52-从服务器主机名-
<dbServer name="slave1"  parent="abstractServer">
--55-从服务器地址-
 <property name="ipAddress">192.168.100.102</property>

 <dbServer name="slaves" virtual="true">
 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">

--末尾--
<property name="poolNames">slave1,slave2</property>
 </poolConfig>

/usr/local/amoeba/bin/amoeba start&
 netstat -anpt | grep java

在23行有一个test的数据库

 23                         <property name="schema">mysql</property> 
 虽然能登录主服务器的数据库但是不能对其进行操作
 里面原来是test但是主服务器上没有test这个数库所
 以会报错我们要把test改为主服务器里面已经存在的
 数据库才能对它进行相应操作

想体验怎么读写分离down掉从服务器上的slave分别进行操作查看

---在两台从上-----
stop slave;

----在主服务器上---内容不会同步
insert into zang values(‘1‘,‘zhang‘,‘this_is_master‘);

----从服务器1----
use benet;
insert into zang values(‘2‘,‘zhang‘,‘this_is_slave1‘);

----从服务器2----
use benet;
insert into zang values(‘3‘,‘zhang‘,‘this_is_slave2‘);

------在客户端上测试----第一次会向从服务器1读数据-第二次会各从2读取
select * from zang;

-------------在通过客户端连接数据库后写入的数据只有主会记录,然后同步给从-从服务器不会记录,从而实现了读写分离。----
insert into zang values(‘5‘,‘zhang‘,‘write_test‘);

-----看不到新插入的数据--因为同步没有开启-----只有主服务器上有数据。
select * from zang;

以上是关于MySQL主从复制与读写分离的主要内容,如果未能解决你的问题,请参考以下文章

MySQL主从复制与读写分离配置及实操

MySQL主从复制及读写分离实际部署与验证

MySQL主从复制及读写分离实际部署与验证

MySQL主从复制与读写分离

MySQL 主从复制与读写分离 部署

MySQL主从复制与读写分离