读写分离是不是主和从服务器应该有相同的库和相同的表结构才能进行读写分离?   现在有一台服务器有数据库和数据表想把它做读写分离,加快查询速度。从服务器可以不用建表?
   建库容易,表有点麻烦,数据表比较多。   mysql-proxy是只有读写分离的功能,没有负载均衡的功能?另外还有脚本启动的问题,什么原因? 难道要写上每个从的用户名和密码,或只写主的用户名和密码?
[root@CrawlTwo ~]# cat /etc/init.d/mysql-proxy       
#!/bin/sh
export  LUA_PATH=/usr/local/mysql/mysql-proxy/share/doc/mysql-proxy/?.luamode=$1
if [ -z "$mode" ] ; then
  mode="start"
ficase $mode in
  'start')
    mysql-proxy --daemon \
--admin-address=:4401 \
--proxy-address=:3307 \
--proxy-backend-addresses=:3306 \
--proxy-read-only-backend-addresses=124.205.45.22:3306 \
--proxy-lua-script=/usr/local/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
    ;;  'stop')
    killall mysql-proxy
    ;;  'restart')
    if $0 stop ; then
      $0 start
    else
      echo  "retart failed!!!"
      exit 1
    fi
    ;;
esac
exit 0[root@CrawlTwo ~]# /etc/init.d/mysql-proxy start
2010-12-28 15:42:36: (critical) admin-plugin.c:569: --admin-username needs to be set
2010-12-28 15:42:36: (critical) mainloop.c:267: applying config of plugin admin failed
2010-12-28 15:42:36: (critical) mysql-proxy-cli.c:596: Failure from chassis_mainloop. Shutting down.

解决方案 »

  1.   

    读写分离是建立在Masterslave架构上的
      

  2.   

    可以用MYSQL的复制来实现这个读写分离。但这并不是唯一实现读写分离的方案。
      

  3.   

    不需要单独建表,如果你使用MYSQL的复制功能的话。
      

  4.   

    嗯,我在从服务器上建了相同的库和表,然后把mysql-proxy代理跟主服务器数据库放在一台机器上。。
     
       从别的服务端连代理到代理上设置的主服务器数据库,新建表和添加数据,而从的没反应。    我把主的设为写,从的设为只读,但从的查询不到主的数据。而且从代理端口加主服务器IP登录的数据库新建的表只有主的新建了,从的没有。。不知道什么原因,反正就是代理什么的都设置好了,读写分离的效果没实现
      

  5.   

    复制的话是不是只需要设置主和从的my.cnf配置文件。。 不用客从那边是否有相同的库和表结构了?我看到网上有人做读写分离时,复制和mysql-proxy都一起做了。复制我也试过,设置什么的都设好,就是没有读写分离的效果出来。郁闷,,另外感觉复制主和从设置有点麻烦
      

  6.   

    复制我也试过,设置什么的都设好,就是没有读写分离的效果出来。郁闷,,
    有一个可能是你的连接数不够,默认的是4个链接之后才发生读写分离,你检查一下你的
    /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
    读写分离我做过,有问题可以继续探讨。
      

  7.   

    [root@CrawlTwo ~]# ps -ef|grep proxoy
    root      7097  7039  0 15:48 pts/2    00:00:00 grep proxoy
    [1]+  Done                    mysql-proxy --proxy-address=:3307 --proxy-backend-addresses=222.35.5.10:3306 --proxy-read-only-backend-addresses=124.205.45.22:3306 --admin-username=root --admin-password=94sys11mysql88 --proxy-lua-script=/usr/local/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --admin-lua-script=/usr/local/mysql/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon > /var/log/mysql-proxy.log
    我照你说的改了rw-splitting.lua里面的最小连接和最大连接数   proxy.global.config.rwsplit = {
                    min_idle_connections = 1,
                    max_idle_connections = 4,                is_debug = false
            }然后在windows cmd 登录
    C:\Documents and Settings\qyzhou>mysql -uroot -p94sys11mysql88 -P3307 -h222.35.5.10
    还是没有读写分离的效果。。然后我改用mysql-proxy管理端口(4041)登录,可能会效果但是报错,出问题了。
    C:\Documents and Settings\qyzhou>mysql -uroot -p94sys11mysql88 -P4041  -h222.35.5.10
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1
    Server version: 5.0.99-agent-adminType 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use test
    No connection. Trying to reconnect...
    Connection id:    1
    Current database: *** NONE ***ERROR 1105 (07000): need a resultset + proxy.PROXY_SEND_RESULT ... got something
     else
    mysql>
    网上查的说rw-splitting.lua里的BUG,要改个地方也改过,都没有。不知道啥原因。
    你们有碰到过?
      

  8.   

    --admin-username
    这个参数搞错了。/usr/local/mysql-proxy/bin/mysql-proxy --daemon \
            --admin-username=cpc \
            --admin-password=123 \
            --admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua \
            --proxy-read-only-backend-addresses=192.168.0.52:3306 \
            --proxy-backend-addresses=192.168.0.51:3306 \
            --proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua >> /tmp/log