24小时在线 - 古典小说 - 文学小说 - 关于我们
您的当前位置:首页 > 数据库 > MYSQL >

MYSQL主从复制与读写分离

来源:比特技术网 编辑:比特技术 时间:2018-07-31点击:
导读:一、mysql主从复制原理 mysq支持的复制类型 基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。 混合类型的复制。默

一、mysql主从复制原理

  1. mysq支持的复制类型
  • 基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
  • 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
  • 混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

2.复制的工作过程

1.在每个事务更新数据完成之前,master在二进制日志记录这些改变。写入二进制日志完成后,master通知存储引擎提交事务。
2.Slave将master的binary log复制到其中继日志。首先slave开始一个工作线程(I/O),I/O线程在master上打开一个普通的连接,然后开始binlog  dump  process。binlog  dump  process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件,I/O线程将这些事件写入中继日志。
3.Sql  slave  thread(sql从线程)处理该过程的最后一步,sql线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小。

3、mysql读写分离原理
读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

目前较为常见的Mysql读写分离分为两种

1)基于程序代码内部实现
    在代码中根据select 、insert进行路由分类,这类方法也是目前生产环境下应用最广泛的。优点是性能较好,因为程序在代码中实现,不需要增加额外的硬件开支,缺点是需要开发人员来实现,运维人员无从下手。

2)基于中间代理层实现
    代理一般介于应用服务器和数据库服务器之间,代理数据库服务器接收到应用服务器的请求后根据判断后转发到,后端数据库,有以下代表性的程序。
(1)mysql_proxy。mysql_proxy是Mysql的一个开源项目,通过其自带的lua脚本进行sql判断。
(2)Atlas。是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy 0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性。360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条。支持事物以及存储过程。
(3)Amoeba。由阿里巴巴集团在职员工陈思儒使用序java语言进行开发,阿里巴巴集团将其用户生产环境下,但是他并不支持事物以及存数过程。

不是所有的应用都能够在基于程序代码中实现读写分离,像一些大型的java应用,如果在程序代码中实现读写分离对代码的改动就较大,所以,像这种应用一般会考虑使用代理层来实现,那么今天就使用Amoeba为例,完成主从复制和读写分离。

二、搭建主从复制

1.搭建时间NTP服务器,同步时间,建立时间同步环境,在主master节点上搭建时间同步服务器。

  • 安装ntp        yum  -y  install  ntp

配置ntp    


vim /etc/ntp.conf  //加两行
server  127.127.1.0
fudge  127.127.1.0 stratum 8
 
service  ntpd restart
  • 在从节点上进行时间同步        /usr/sbin/ntpdate      加master ip地址

2安装MySQL数据库。在master和slave上安装


//编译安装MYSQL
yum -y install ncurses-devel
tar zxf cmake-2.8...
cd cmake-2.8.6
./configure  && gmake && gmake install
tar zxf mysql-5.5....
cd mysql-5.5.22
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql --DDEFAULT_CHARSET=utf8 --DEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DSYSCONFDIR=/etc  && make && make install
//优化调整
cp support-files/my-medium.cnf /etc/my.cnf
cp support-file/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
./etc/profile
//初始化数据库
groupadd mysql
useradd -M -s /sbin/nologin mysql -g mysql
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
//启动mysql服务
service mysqld start
mysqladmin -u root password 'zm.com123'
 

三、配置mysql  master服务器

  • vim  /etc/my.cnf   加  (server-id    =    11;log-bin=master-bin(允许连级复制);    log-slave-updates=true(二进制文件名)   )
  • service  mysqld restart
  • 给从服务器授权
    
    		
    grant riplication slave on *.* to 'zm'@'192.168.10.%' identified by '123456';
    flush privileges;
    show master status;
    //file列显示日志名,position列显示偏移量

    2.在slave服务器上配置(有几个slave配置)几个

    vim /etc/my.cnf
    server-id  =22
    relay-log=relay-log-bin      //复制过来的二进制日志文件名
    relay-log-index=slave-relay-log.index  //中继日志存放的文件名称
    //注server-id  不能与主服务器相同。
    service  mysqld  restart
    //登陆mysql,设置同步
    mysql>change  master to master_host='192.168.10.1',master_user='zm',master_password='123456',master_log_file='master-bin.000001',master_log_pos=322;
    start slave;   //启动同步
    show slave status\G;  

    四、搭建MYSQL读写分离(另开一台)

    
    		
    chmod  + /usr/src/jdk-6u14.........
    ./jdk-6u14..........
    mv jdk1.6..../  jdk.1.6
    vim /etc/profile   添加五行
    (export JAVA_HOME=/usr/src/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/src/amoeba/
    export PATH=$PATH:$AMOEBA_HOME/bin)
    source  /etc/profile
    java -version    //java环境已配置成功
     
    //安装并配置Amoeba软件
    mkdir /usr/src/amoeba
    tar zxf /mnt/amoeba-........ -C /usr/src/amoeba/
    chmod -R 755 /usr/local/amoeba/
    /usr/src/amoeba/bin/amoeba
     
     
    配置AMOEBA读写分离,两个slave读负载均衡(分别在 master,slave配置)
    grant all on *.* to zmd@'192.168.10.%' identified by '123456';
     

    编辑amoeba.xml配置文件。

  • vim conf/amoeba.xm

  • l

  • vim /etc/dbServers.xm

  • l

  • 启动amoeba软件

  • bin/amoeba  start&

  • netstat  -anpt  | grep java

测试client主机上

mysql  -u amoeba -p123456 -h  amoeba的ip  -p8066

成功登陆即可(在mysql验证即可)

来源:比特技术在线(www.byte.online),欢迎分享本文,转载请保留出处!
http://www.byte.online/a/shujuku/MYSQL/2018/871423.html
责任编辑:比特技术

    打赏

    取消

    感谢您的支持,我会继续努力的!

    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    网友评论:

    Copyright © www.byte.online 比特技术在线 版权所有 粤ICP备15038486号-3
    本站所有资料来源于网络,由个人收集整理,仅限于个人学习和研究,如果侵犯您的权益请联系我们删除!
    Top