码迷,mamicode.com
首页 > 数据库 > 详细

centos 下MySQL主从复制与读写分离

时间:2015-06-10 01:22:34      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:mysql主从复制   读写分离

主从复制

      搭建好MySQL服务器环境,其中主服务器IP地址为192.168.100.9,从服务器IP地址为192.168。100.5.

       首先在主服务器上开启远程权限,从服务器可以远程登录主服务器。授权给从服务器

mysql>GRANT REPLICATION SLAVE ON *.* to ‘first‘@‘192.168.100.5‘ identified by ‘first‘ //用户名为first,密码为first,从服务器IP192.168.100.5

修改主服务器的配置文件。在主服务器上需要启动二进制日志(log-bin = master-bin,log-bin-index = master-bin.index),从服务器需要启用中继日志(relay-log = relay-log,relay-log-index = relay-log.index)并且server-id不同,主服务器设置为1,从服务器设置为2.

配置master节点:

技术分享

配置slave节点:

技术分享



主服务器上的配置

查看主服务器上的数据状态

Mysql> show master status;

            

配置从服务器

mysql> change master to master_host=’192.168.100.9’,master_user=’xwd’,master_password=’xwd’,master_log_file=’mysql.000016’,master_log_pos=257;

启动slave

mysql>start slave;

mysql >  show slave status;

技术分享                   


这样主从复制就这是成功了。并且是从当前的日志开始复制。

   动静分离

  适用于动静分离的软件有mysql-proxy、amoeba,这里主要介绍MySQL-proxy实现的读写分离。

3.4 安装配置MySQL-Proxy
MySQL-Proxy可通过以下网址获得:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/

推荐采用已经编译好的二进制版本,因为采用源码包进行编译时,最新版的MySQL-Proxy对automake,glib以及libevent的版本都有很高的要求,而这些软件包都是系统的基础套件,不建议强行进行更新。
并且这些已经编译好的二进制版本在解压后都在统一的目录内,因此建议选择以下版本:
32位RHEL5平台:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz
64位RHEL5平台:
http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.1-linux-rhel5-x86-64bit.tar.gz

测试平台为RHEL5 32位,因此选择32位的软件包
wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz

tar xzvf mysql-proxy-0.8.1-linux-rhel5-x86-32bit.tar.gz
mv mysql-proxy-0.8.1-linux-rhel5-x86-32bit /opt/mysql-proxy

创建mysql-proxy服务管理脚本
mkdir /opt/mysql-proxy/init.d/

vim mysql-proxy

    #!/bin/sh
    #
   # mysql-proxy This script starts and stops the mysql-proxy daemon
   #
   # chkconfig: - 78 30
    # processname: mysql-proxy
    # description: mysql-proxy is a proxy daemon to mysql
     
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    #PROXY_PATH=/usr/local/bin
   PROXY_PATH=/opt/mysql-proxy/bin

   prog="mysql-proxy"
     
   # Source networking configuration.
    . /etc/sysconfig/network
     
   # Check that networking is up.
    [ ${NETWORKING} = "no" ] && exit 0
     
    # Set default mysql-proxy configuration.
    #PROXY_OPTIONS="--daemon"
    PROXY_OPTIONS="--admin-username=root --admin-password=password --proxy-read-only-backend-addresses=192.168.100.9:3306 --proxy-backend-addresses=192.168.100.5:3306  --admin-lua-script=/opt/mysql-proxy/lib/mysql-proxy/lua/admin.lua --proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua"
    PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid
     
    # Source mysql-proxy configuration.
    if [ -f /etc/sysconfig/mysql-proxy ]; then
            . /etc/sysconfig/mysql-proxy
    fi
     
    PATH=$PATH:/usr/bin:/usr/local/bin:$PROXY_PATH
     
    # By default it‘s all good
    RETVAL=0
     
    # See how we were called.
    case "$1" in
      start)
            # Start daemon.
            echo -n $"Starting $prog: "
           $NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS --daemon --pid-file=$PROXY_PID --user=mysql --log-level=warning --log-file=/opt/mysql-proxy/log/mysql-proxy.log
           RETVAL=$?
            echo
            if [ $RETVAL = 0 ]; then
                    touch /var/lock/subsys/mysql-proxy
            fi
           ;;
            # Stop daemons.
          echo -n $"Stopping $prog: "
            killproc $prog
            RETVAL=$?
            echo
            if [ $RETVAL = 0 ]; then
                    rm -f /var/lock/subsys/mysql-proxy
                    rm -f $PROXY_PID
            fi
           ;;
      restart)
            $0 stop
            sleep 3
            $0 start
           ;;
      condrestart)
           [ -e /var/lock/subsys/mysql-proxy ] && $0 restart
          ;;
      status)
            status mysql-proxy
            RETVAL=$?
           ;;
      *)
            echo "Usage: $0 {start|stop|restart|status|condrestart}"
            RETVAL=1
          ;;
    esac
     
    exit $RETVAL
脚本参数详解:
==============================================
PROXY_PATH=/opt/mysql-proxy/bin //定义mysql-proxy服务二进制文件路径

PROXY_OPTIONS="--admin-username=root \ //定义内部管理服务器账号
--admin-password=password \ //定义内部管理服务器密码
--proxy-read-only-backend-addresses=192.168.10.131:3306 \ //定义后端只读从服务器地址
--proxy-backend-addresses=192.168.10.130:3306 \ //定义后端主服务器地址
--admin-lua-script=/opt/mysql-proxy/lib/mysql-proxy/lua/admin.lua \ //定义lua管理脚本路径
--proxy-lua-script=/opt/mysql-proxy/scripts/rw-splitting.lua" \ //定义lua读写分离脚本路径

PROXY_PID=/opt/mysql-proxy/run/mysql-proxy.pid //定义mysql-proxy PID文件路径

$NICELEVEL $PROXY_PATH/mysql-proxy $PROXY_OPTIONS \
--daemon \ //定义以守护进程模式启动
--keepalive \ //使进程在异常关闭后能够自动恢复
--pid-file=$PROXY_PID \ //定义mysql-proxy PID文件路径
--user=mysql \ //以mysql用户身份启动服务
--log-level=warning \ //定义log日志级别,由高到低分别有(error|warning|info|message|debug)
--log-file=/opt/mysql-proxy/log/mysql-proxy.log //定义log日志文件路径
==============================================

cp mysql-proxy /opt/mysql-proxy/init.d/
chmod +x /opt/mysql-proxy/init.d/mysql-proxy

mkdir /opt/mysql-proxy/run
mkdir /opt/mysql-proxy/log

mkdir /opt/mysql-proxy/scripts

配置并使用rw-splitting.lua读写分离脚本
最新的脚本我们可以从最新的mysql-proxy源码包中获取
cd /opt/install

wget http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.1.tar.gz

tar xzvf mysql-proxy-0.8.1.tar.gz
cd mysql-proxy-0.8.1
cp lib/rw-splitting.lua /opt/mysql-proxy/scripts

修改读写分离脚本rw-splitting.lua
修改默认连接,进行快速测试,不修改的话要达到连接数为4时才启用读写分离
vim /opt/mysql-proxy/scripts/rw-splitting.lua
-- connection pool
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, //默认为4
max_idle_connections = 1, //默认为8
is_debug = false
}
end
=============================

修改完成后,启动mysql-proxy
/opt/mysql-proxy/init.d/mysql-proxy start

本文出自 “一点空间” 博客,谢绝转载!

centos 下MySQL主从复制与读写分离

标签:mysql主从复制   读写分离

原文地址:http://carmenxwd.blog.51cto.com/10389159/1660182

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!