mycat读写分离与主从切换

转自: http://blog.csdn.net/mchdba/article/details/50616534

1, 分库分表的优缺点、以及为什么分表方式无法成为主流? 
分表:在台服务器上,优点是易维护,类似表分区,缺点是在一台db服务器上,无法分担IO、负载集中。 
分库:在多台服务器上,优点是分担IO、负载均衡,缺点是较不易维护、数据统计以及jion操作有些难度。

数据库切分的目的是为了分担IO、负载均衡,分表无法达到最佳的要求,所以无法成为主流。 
2, 准备主库 
tar -xvf mysql-5.6.12.tar.gz 
cd mysql-5.6.12

time cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56m1 -DMYSQL_DATADIR=/home/data/mysql56m1/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR==/usr/local/mysql56m1/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

time make 
time make install

chown -R mysql /home/data/ 
chgrp -R mysql /home/data/ 
chown -R mysql /usr/local/mysql

chown -R mysql /usr/local/mysql56m1 
chgrp -R mysql /usr/local/mysql

chgrp -R mysql /usr/local/mysql56m1/ 
mkdir -p /home/data/mysql56m1/binlog/ 
chown -R mysql.mysql /home/data/mysql56m1/binlog/ 
mkdir -p /home/data/mysql5610/binlog/ 
chown -R mysql.mysql /home/data/

cd /usr/local/mysql56m1 
time scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql56m1 –datadir=/home/data/mysql56m1/data –defaults-file=/usr/local/mysql56m1/my.cnf

cp support-files/mysql.server /etc/init.d/mysql56m1 
chmod 700 /etc/init.d/mysql56m1 
echo “export PATH=$PATH:/usr/local/mysql56m1/bin”>>/etc/profile 
source /etc/profile 
chkconfig –add mysql56m1

service mysql56m1 start

3, 准备备库

tar -xvf mysql-5.6.12.tar.gz 
cd mysql-5.6.12

time cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql56s1 -DMYSQL_DATADIR=/home/data/mysql56s1/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR==/usr/local/mysql56s1/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

time make 
time make install

chown -R mysql /home/data/ 
chgrp -R mysql /home/data/ 
chown -R mysql /usr/local/mysql

chown -R mysql /usr/local/mysql56s1 
chgrp -R mysql /usr/local/mysql

chgrp -R mysql /usr/local/mysql56s1/ 
mkdir -p /home/data/mysql56s1/binlog/ 
chown -R mysql.mysql /home/data/mysql56s1/binlog/ 
mkdir -p /home/data/mysql5610/binlog/ 
chown -R mysql.mysql /home/data/

cd /usr/local/mysql56s1 
time scripts/mysql_install_db –user=mysql –basedir=/usr/local/mysql56s1 –datadir=/home/data/mysql56s1/data –defaults-file=/usr/local/mysql56s1/my.cnf

cp support-files/mysql.server /etc/init.d/mysql56s1 
chmod 700 /etc/init.d/mysql56s1 
echo “export PATH=$PATH:/usr/local/mysql56s1/bin”>>/etc/profile 
source /etc/profile 
chkconfig –add mysql56s1 
service mysql56s1 start

4, 搭建主从环境 
在一台服务器,主3317端口,从3327端口。 
主库备库上,添加复制帐号: 
GRANT REPLICATION SLAVE ON . TO ‘repl’@’10.254.%’ IDENTIFIED BY ‘mycatms’;

在备库上3327端口上设置复制: 
stop slave; 
reset slave; 
change master to master_user=’repl’, master_password=’mycatms’, master_host=’127.0.0.1’,master_port=3317, master_log_file=’mysql-bin.000003’,master_log_pos=840; 
start slave; 
show slave status\G;

主库:3317端口

从库:3327端口

数据同步测试:

5, 数据同步测试: 
配置schema.xml: 
然后修改mycat的schema.xml: 
balance为1:让全部的readHost及备用的writeHost参与select的负载均衡。 
switchType为2:基于MySQL主从同步的状态决定是否切换。 
heartbeat:主从切换的心跳语句必须为show slave status。

5.0 数据录入: 
mysql> explain create table company(id int not null primary key,name varchar(100)); 
+———–+———————————————————————+ 
| DATA_NODE | SQL | 
+———–+———————————————————————+ 
| dn1 | create table company(id int not null primary key,name varchar(100)) | 
| dn2 | create table company(id int not null primary key,name varchar(100)) | 
| dn3 | create table company(id int not null primary key,name varchar(100)) | 
+———–+———————————————————————+ 
3 rows in set (0.00 sec)

mysql> create table company(id int not null primary key,name varchar(100)); 
Query OK, 0 rows affected (0.01 sec)

mysql> explain insert into company(id,name) values(1,’alibaba’); 
+———–+————————————————–+ 
| DATA_NODE | SQL | 
+———–+————————————————–+ 
| dn1 | insert into company(id,name) values(1,’alibaba’) | 
| dn2 | insert into company(id,name) values(1,’alibaba’) | 
| dn3 | insert into company(id,name) values(1,’alibaba’) | 
+———–+————————————————–+ 
3 rows in set (0.10 sec)

mysql> insert into company(id,name) values(1,’alibaba’); 
Query OK, 1 row affected (0.00 sec)

mysql>

5.1主库验证: 
[root@wgq_idc_squid_1_11 logs]# /usr/local/mysql56m1/bin/mysql -uroot -p -P3317 –socket=/usr/local/mysql56m1/mysql.sock -e “select @@port;select * from db1.company”; 
Enter password: 
+——–+ 
| @@port | 
+——–+ 
| 3317 | 
+——–+ 
+—-+———+ 
| id | name | 
+—-+———+ 
| 1 | alibaba | 
+—-+———+ 
[root@wgq_idc_squid_1_11 logs]#

5.2从库验证: 
[root@wgq_idc_squid_1_11 logs]# /usr/local/mysql56s1/bin/mysql -uroot -p -P3327 –socket=/usr/local/mysql56s1/mysql.sock -e “select @@port;select * from db1.company”; 
Enter password: 
+——–+ 
| @@port | 
+——–+ 
| 3327 | 
+——–+ 
+—-+———+ 
| id | name | 
+—-+———+ 
| 1 | alibaba | 
+—-+———+ 
[root@wgq_idc_squid_1_11 logs]#

6,读写分离模式 
6.1然后修改mycat的schema.xml: 
balance为1:让全部的readHost及备用的writeHost参与select的负载均衡。 
switchType为2:基于MySQL主从同步的状态决定是否切换。 
heartbeat:主从切换的心跳语句必须为show slave status。

有配置读节点: 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值