MySQL主从复制读写分离

mysql主从与读写分离

主从复制:保证服务器之间的数据同步(主指写服务器,从指读服务器)

实现过程

1)当写服务器有数据写入时,数据将对应写入操纵完毕后,再将所有写入操作写入本地日志文件中(源码:/usr/local/mysql/data、RPM:/var/lib/mysql)
2)在读服务器中,一直有两个线程(I/O线程:拿取写服务器新增的日志文件内容到本地日志文件;SQL线程:从本地新增的本地日志文件中进入数据库进行重放操作)
3)读服务器的I/O线程去查询写服务器是否有新增日志文件内容,如有则将新增日志内容放在读服务器本地日志文件中
4)读服务器的SQL线程检查本地日志是否有新内容产生,如有则进行重放(将日志文件中的SQL语句都执行一次)操作
5)读服务器同步完毕后,通知写服务器,写服务器通知代理服务器,代理转告Web,Web告知客户端写入完毕

读写分离:由于数据库查询较多,写入较少,因此将读、写分离,使用多个读服务器,一个写服务器

实现过程
1)客户端访问Web,如需要数据库操作,Web将请求转发到代理服务器(Amoeba)
2)代理服务器通过配置,判断为读还是为写,如为读,将请求转发到读的服务器
3)读服务器收到请求后,拿取用户所需数据返回给代理服务器,代理再转交给Web,Web再交由客户端
4)如判断为写的操作,将请求转发到写的服务器
5)写服务器收到后,写入用户所需数据后,读服务器从写服务器同步数据,同步完毕后,写服务器回应代理服务器写入完毕
6)代理服务器回应Web,Web回应客户端写入完毕

实现方式:

1)代码层次:由开发人员内嵌分离代码,由Web服务器中网页做判断,是读还是写
2)软件层次:通过第三方软件,如Amoeba,软件中写明读、写服务器地址,由软件判断为读还是写

案例:主从复制

环境:5台服务器(1台写服务器(192.168.1.10),两台读服务器(192.168.1.20,30),一台Amoeba(192.168.1.40),一台客户端(192.168.1.50))

写服务器搭建(192.168.1.10)
1.环境准备
1)配置ip

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.10
NETMASK=255.255.255.0

reboot

2)`配置本地yum

rm -rf /etc/yum.repos.d/*
//删除本地yum源
vim /etc/yum.repos.d/local.repo

[local]
name=local
baseurl=file:///mnt
gpgcheck=0

mount /dev/cdrom /mnt
//挂载

3)

yum -y install ntp ncurses-devel cmake
//下载安装包

4)

   vim /etc/ntp.conf
   
   server 127.127.1.0
   //添加指定本地作为NTP服务器
   fudge 127.127.1.0 stratum 8
   //添加指定本地优先级大于网络同步NTP

在这里插入图片描述
5)

  /etc/init.d/ntpd restart && chkconfig --level 35 ntpd on
  //重启服务并设置3,5级别开机自动开启

2.部署mysql

上传安装包
在这里插入图片描述
1)

tar -zxvf mysql-5.5.22.tar.gz -C /usr/src/
//解压到/usr/src/目录下

2)

cd /usr/src/mysql-5.5.22/

3)

 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc

选项:
-DCMAKE_INSTALL_PREFIX:指定MySQL安装位置
-DDEFAULT_CHARSET:指定默认字符集编码
-DDEFAULT_COLLATION:指定默认使用字符集校对规则
-DWITH-EXTRA-CHARSETS:指定额外支持的其他字符集编码
-DSYSCONFDIR:配置文件存储位置
4)编译并安装

make && make install

在这里插入图片描述
3.优化mysql
1)

  cp /usr/src/mysql-5.5.22/support-files/my-medium.cnf /etc/my.cnf
    //拷贝源码目录提供配置文件

2)

 cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/init.d/mysqld
    //拷贝服务脚本文件到/etc/init.d/目录下并改名为mysqld

3)

chmod +x /etc/init.d/mysqld
//增加执行权限

4)

chkconfig --add mysqld && chkconfig --level 35 mysqld  on

5)

echo "export PATH=$PATH:/usr/local/mysql/bin"  >>/etc/profile && source /etc/profile
//添加mysql命令到搜索路径,并让profile文件生效。

6)

useradd -M -s /sbin/nologin mysql
//新建mysql用户并不能登陆

7)

 chown -R mysql:mysql /usr/local/mysql
    //更改所有组和所有者为mysql

8)

usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
//执行初始化脚本,生成默认的库和表

9)

/etc/init.d/mysqld start
//启动mysql服务

4.配置主从复制
1)

vim /etc/my.cnf

50 log-slave-updates=true
//允许从服务器同步
58 server-id=10		    	    
//标识符,三台不能一样

在这里插入图片描述

2)

/etc/init.d/mysqld restart
//重启mysql服务

3)

mysql -u root -p
//登陆mysql数据库默认密码为空

grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123';		         
//新建同步用户,专用于同步
flush privileges;
//刷新
show master status; 
##记住File的及Position的值,此处为master-bin.000004
和332

在这里插入图片描述

读服务器1(192.168.1.20)
1.环境准备

1)

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.20
NETMASK=255.255.255.0

reboot

2)

rm -rf /etc/yum.repos.d/*

3)

 vim /etc/yum.repos.d/local.repo   

[local]
name=local
baseurl=file:///mnt
gpgcheck=0

4)

mount /dev/cdrom /mnt

5)

yum -y install ntp ncurses-devel cmake

6)

ntpdate 192.168.1.10

2.部署mysql
上传包
在这里插入图片描述
1)

 tar -zxvf mysql-5.5.22.tar.gz -C /usr/src/

2)

 cd /usr/src/mysql-5.5.22/

3)

  cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc/

//初始化脚本并生成库和表
4)

make && make install
//编译安装

3.优化mysql
1)

 cp /usr/src/mysql-5.5.22/support-files/my-medium.cnf /etc/my.cnf
        //拷贝源码目录提供配置文件

2)

 cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/init.d/mysqld
    //拷贝服务脚本文件到/etc/init.d/目录下并改名为mysqld

3)

 chmod +x /etc/init.d/mysqld

4)

chkconfig --add mysqld && chkconfig --level 35 mysqld  on

5)

echo "export PATH=$PATH:/usr/local/mysql/bin"  >>/etc/profile && source /etc/profile

6)

 useradd -M -s /sbin/nologin mysql

7)

chown -R mysql:mysql /usr/local/mysql

8)

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

9)

/etc/init.d/mysqld start

4.配置主从配置
1)

vim /etc/my.cnf 

50 relay-log=relay-log-bin	
//指定从服务器日志文件名
51 relay-log-index=slave-relay-bin.index			
//指定从服务器索引文件名
59 server-id=20

在这里插入图片描述
2)

 /etc/init.d/mysqld restart

3)

mysql -u root -p
//登陆mysql数据库,默认密码为空

change master to master_host='192.168.1.10',master_user='slave',master_password='123',master_log_file='mysql-bin.000004',master_log_pos=332;

选项:

master_host:指定主服务器IP
master_user:指定连接主服务器用户
master_password:指定连接主服务器用户的密码
master_log_file:指定主服务器日志文件名;主服务器show master status;查看
master_log_pos:指定主服务器的偏移值;主服务器show master status;查看

start slave;


show slave status \G;

在这里插入图片描述
读服务器2(192.168.1.30)
1.环境准备

1)

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.30
NETMASK=255.255.255.0

reboot

2)

rm -rf /etc/yum.repos.d/*

3)

 vim /etc/yum.repos.d/local.repo   

[local]
name=local
baseurl=file:///mnt
gpgcheck=0

4)

mount /dev/cdrom /mnt

5)

yum -y install ntp ncurses-devel cmake

6)

ntpdate 192.168.1.10

2.部署mysql
上传包
在这里插入图片描述
1)

 tar -zxvf mysql-5.5.22.tar.gz -C /usr/src/

2)

 cd /usr/src/mysql-5.5.22/

3)

  cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc/

//初始化脚本并生成库和表
4)

make && make install
//编译安装

3.优化mysql
1)

 cp /usr/src/mysql-5.5.22/support-files/my-medium.cnf /etc/my.cnf
        //拷贝源码目录提供配置文件

2)

 cp /usr/src/mysql-5.5.22/support-files/mysql.server /etc/init.d/mysqld
    //拷贝服务脚本文件到/etc/init.d/目录下并改名为mysqld

3)

 chmod +x /etc/init.d/mysqld

4)

chkconfig --add mysqld && chkconfig --level 35 mysqld  on

5)

echo "export PATH=$PATH:/usr/local/mysql/bin"  >>/etc/profile && source /etc/profile

6)

 useradd -M -s /sbin/nologin mysql

7)

chown -R mysql:mysql /usr/local/mysql

8)

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

9)

/etc/init.d/mysqld start

4.配置主从配置
1)

vim /etc/my.cnf 

50 relay-log=relay-log-bin	
//指定从服务器日志文件名
51 relay-log-index=slave-relay-bin.index			
//指定从服务器索引文件名
59 server-id=30

在这里插入图片描述
2)

 /etc/init.d/mysqld restart

3)

mysql -u root -p
//登陆mysql数据库,默认密码为空

change master to master_host='192.168.1.10',master_user='slave',master_password='123',master_log_file='mysql-bin.000004',master_log_pos=332;

选项:

master_host:指定主服务器IP
master_user:指定连接主服务器用户
master_password:指定连接主服务器用户的密码
master_log_file:指定主服务器日志文件名;主服务器show master status;查看
master_log_pos:指定主服务器的偏移值;主服务器show master status;查看

start slave;


show slave status \G;

在这里插入图片描述
部署amoeba(192.168.1.40)
1.环境准备
1)

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.40
NETMASK=255.255.255.0

reboot

2.安装jdk与amoeba

yum -y erase java-*

上传包
在这里插入图片描述

1)

chmod +x jdk-6u14-linux-x64.bin

2)

./jdk-6u14-linux-x64.bin

3)

mv jdk1.6.0_14/ /usr/local/jdk1.6

4)

 vim /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

在这里插入图片描述
5)

source /etc/profile && java -version

6)

mkdir /usr/local/amoeba

7)
在这里插入图片描述

tar -zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/

8)

  chmod -R 755 /usr/local/amoeba/

3.在主mysql数据库新建授权用户(192.168.1.10)
1)

mysql -u root -p

grant all on *.* to haha@'192.168.1.%' identified by '123';

4.编辑amoeba配置文件(192.168.1.40)
1)

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

 30  <property name="user">hehe</property>			
      //设置连接Amoeba用户
 31
 32  <property name="password">123</property>
      //设置连接Amoeba   用户

在这里插入图片描述

115                 <property name="defaultPool">master</property>
116 
117                 <property name="writePool">master</property>
118                 <property name="readPool">slaves</property>
                         //定义读服务器池

在这里插入图片描述
2)

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

  25                         <!-- mysql user -->
  26                         <property name="user">haha</property>				
                                   //设置连接   Mysql    的用户
  27
  28                         <property name="password">123</property>				
                               //设置连接  mysql的密码

在这里插入图片描述

 43         <dbServer name="master"  parent="abstractServer">
 44                 <factoryConfig>
 45                         <!-- mysql ip -->
 46                         <property name="ipAddress">192.168.1.10</property>
 								//定义写服务器IP
 47                 </factoryConfig>
 48         </dbServer>
 49 
 50         <dbServer name="slave1"  parent="abstractServer">
 51                 <factoryConfig>
 52                         <!-- mysql ip -->
 53                         <property name="ipAddress">192.168.1.20</property>
 								//定义读服务器IP
 54                 </factoryConfig>
 55         </dbServer>
 56         
 57         <dbServer name="slave2"  parent="abstractServer">
 58                 <factoryConfig>
 59                         <!-- mysql ip -->
 60                         <property name="ipAddress">192.168.1.30</property>
 								//定义读服务器IP
 61                 </factoryConfig>
 62         </dbServer>

在这里插入图片描述

63         <dbServer name="slaves" virtual="true">
69                         <property name="poolNames">slave1,slave2</property>
70                 </poolConfig>

在这里插入图片描述
3)

amoeba start &

4)

netstat -utpln | grep 8066

在这里插入图片描述
客户端验证(192.168.1.50)
1.环境准备
1)

vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.1.50
NETMASK=255.255.255.0

reboot

2)修改本地yum

rm -rf /etc/yum.repos.d/*

3)

vim /etc/yum.repos.d/local.repo

    [local]
    name=local
    baseurl=file:///mnt
    gpgcheck=0

4)

mount /dev/cdrom /mnt

5)

 yum -y install mysql

6)

 mysql -u hehe -p -h 192.168.1.40 -P 8066
 show databases;
 create dabase hehe;
 show datasbases;

在这里插入图片描述

注:写服务器读服务器都会新建hehe库
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值