linux下mycat读写分离的配置

来源:互联网 发布:淘宝退款金额怎么修改 编辑:程序博客网 时间:2024/04/29 03:07

linux下mycat读写分离的配置

  为什么要配置读写分离,我想我就不需要再赘述了,那么在mycat下如何进行读写分离的配置,配置之后的实际效率又如何呢?我上午根据文档捣鼓和测试了一下,这里做一下记录:

  最开始,我们还是要配置mysql本身的主从复制。

  首先,配置主服务器:

  1.编辑数据库配置文件,/etc/my.cnf

  在[mysqld]下加入代码:

log-bin=mysql-binserver-id=1innodb_flush_log_at_trx_commit=1sync_binlog=1binlog-do-db=db1binlog_ignore_db=mysql

  server-id 用于区分各自服务器,需要全局唯一。

  binlog-ignore_db为忽略的库,即不复制该项设置的库。

  binlog-do-db为需要复制的数据库,如果不要,则为复制除了binlog-ignore_db设置的库之外的所有库

  2.重启mysql:

service mysqld restart

  3.登录mysql: mysql -uroot -p

  可以为slave端单独建立一个账户,方便权限管理,然后把这个账户的权限赋予slave端: 

mysql>CREATE USER 'user'@ 'X.X.X.X' IDENTIFIED BY 'XXXXXX';mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'X.X.X.X' IDENTIFIED BY 'XXXXXX';

  X.X.X.X为slave端的IP地址

  4.防止在复制期间,数据库有新数据写入导致数据不同步:  

mysql>FLUSH TABLES WITH READ LOCK;

  5.把数据库导出并传送到从服务器端:

#mysqldump -u root -pXXXXXX --all-databases  --lock-tables=false  -- > /root/all.sql#scp /root/all.sql root@X.X.X.X:/root

  X.X.X.X为从服务器IP地址。

  6.进入主服务器数据库查看并记录状态,待会儿会用到: 

mysql>SHOW MASTER STATUS\G;

  记录File和position

  7.解锁数据表 

mysql>UNLOCK TABLES;

  然后配置从服务器:

  1.登录从服务器,导入主服务器的数据库: 

#mysql -u root -p123456 < /root/all.sql

  2.编辑/etc/my.cnf,在[mysqld]下加入: 

复制代码
server-id=11        //服务Id,注意要和master的server-id不一样log-bin=mysql-binrelay-log-index=slave-relay-bin.indexrelay-log=slave-relay-binsync_master_info=1sync_relay_log=1sync_relay_log_info=1
复制代码

  3.重启数据库并登录,执行下面的命令 

复制代码
mysql>CHANGE MASTER TOMASTER_HOST='X.X.X.X',            //主服务器的ip地址MASTER_USER='user',               //刚才在主服务器创建的账号和密码MASTER_PASSWORD='XXXXXX',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001', //刚才主服务器的fileMASTER_LOG_POS=120,        //主服务器的positionMASTER_CONNECT_RETRY=10;
复制代码

  4.启动slave进程:

mysql>START SLAVE;

  如果没有报错,应该就设置好了。

  小小的优化方案:

  虽然MyISAM引擎不支持事务处理和行级锁,但是它的查询效率相比innoDB要好的多,而作为从数据库,并不需要事务处理和行级锁,所以建议把客户端的表重新删除并建立为InnoDB。

  启动mycat的读写分离:

   配置schema.xml文件: 

复制代码
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"                writeType="0" dbType="mysql" dbDriver="native">    <heartbeat>select user()</heartbeat>    <!-- can have multi write hosts -->    <writeHost host="hostM1" url="localhost:3306" user="root"                        password="XXXXXX">        <!-- can have multi read hosts -->        <readHost host="hostS1" url="X.X.X.X:3306" user="user" password="XXXXXX" />    </writeHost></dataHost>
0 0
原创粉丝点击