Mycat 基于MySQL master-slave 读写分离验证

来源:互联网 发布:生态文明我知我行稿子 编辑:程序博客网 时间:2024/06/05 15:54

操作系统 CentOS 6.5 64bit
MySQL版本 :
MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm
MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm

Mycat版本:
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
Mycat依赖于JDK,需要先安装JDK,若Mycat单独服务器部署,还需要安装MySQL client。

MySQL master : 192.168.1.236
MySQL slave:192.168.1.237
Mycat :192.168.1.235

MySQL安装
查询系统是否已安装

rpm -qa|grep mysql

一般默认会有一个mysql-libs-5.1.71-1.e16.x86_64
执行卸载命令(需要强制卸载)

rpm -e --nodeps mysql-libs-5.1.71-1.e16.x86_64

执行安装

rpm -ivh MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpmrpm -ivh MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm

编辑配置文件

vi /usr/my.cnf

添加或修改如下内容

[client]default-character-set = utf8[mysqld]character-set-server = utf8lower_case_table_names = 1sql_mode = NO_ENGINE_SUBSTITUTION

防火墙打开MySQL端口,默认3306

vi /etc/sysconfig/iptables

添加如下内容

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

重启防火墙服务

service iptables restart

启动MySQL

service mysql start

修改初始登录密码,系统随机的初始化密码位于/root/.mysql_secret内

cat /root/.mysql_secret

通过系统随机的初始化密码登录并修改登录密码

mysql -u root -p 

修改root登录密码

mysql> set password=password('123456');mysql> use mysql;mysql> select user,host,password from user;

更新root账户

mysql> update user set password=password('123456') where user = 'root';mysql> select user,host,password from user;

刷新设置

mysql> flush privileges;

创建远程访问账户

mysql> insert into user (user,host,password) values ('root','%',password('123456'));

授权远程访问账户权限

mysql> grant all on *.* to root@'%' identified by '123456';

刷新设置

mysql> flush privileges;

MySQL master-slave配置
主库上建立从库的复制账户

mysql> grant replication slave,replication client on *.* to repl237@'192.168.1.237' identified by 'p4ssword';mysql> flush privileges;

修改主库的MySQL 配置文件
必须的配置项:
log_bin:自定义,默认是主机名,推荐进行设置
server_id:为server起一个唯一的id,默认是1,推荐取IP最后一节
可选的配置项:
binlog-do-db:用于配置哪些库会做二进制日志用以replicate
binlog-ignore-db:用于配置哪些库不会做二进制日志用以replicate

server_id = 236log_bin = mysql_bin_log

需要重启MySQL服务

service mysql restart

查看主库的复制状态

mysql> show master status;

这里写图片描述

修改从库的配置文件
从服务器必须的配置项:
log_bin:自定义,默认是主机名,推荐进行设置
server_id:为server起一个唯一的id,默认是1,推荐取IP最后一节
replicate-do-db:
replicate-ignore-db:
replicate-do-table:
replicate-ignore-table:
replicate-wild-do-table:
replicate-wild-ignore-table:
从机推荐的配置:

server_id = 237log_bin = mysql_bin_logrelay_log = mysql_relay_bin_loglog_slave_updates = 1read_only = 1

从库连接主库,并开启复制

mysql> change master to maset_host='192.168.1.236',master_user='repl237',master_password='p4ssword',master_log_file='mysql_bin_log.000001',master_log_pos=120;mysql> start slave;

这里写图片描述

从库查看复制状态

mysql> show slave status \G

查看Slave_IO_Running和Slave_SQL_Running是否是YES

在主库中创建一个测试库,看从库是否也会自动创建,验证复制是否正常工作

Mycat配置
解压即可

# tar –zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz;

防护墙打开Mycat端口8066(数据端口)和9066(管理端口)
打开方式参考上述MySQL中打开防火墙端口

调整schema.xml 文件,设置不分片
这里写图片描述

需要根据dataNode中的database预先在物理数据库中创建db

登录Mycat

# mysql –uroot –p123456 –h192.168.1.235 –P8066 –DTESTDB

创建表

mysql> create table travelrecord (id bigint not null primary key,user_id varchar(100),travel_date date,fee decimal,days int);

这里写图片描述

初始化数据:

mysql> insert into travelrecord (id,user_id,travel_date,fee,days) values (1,'100', 20160816, 2000, 5);mysql> insert into travelrecord (id,user_id,travel_date,fee,days) values (2,'300', 20160916, 5000, 3);

这里写图片描述
这里写图片描述

开启Mycat 日志DEBUG模式,修改log4j 2.xml

这里写图片描述

mycat 执行SQL:
select * from travelrecord;
mycat route 之后:
SELECT * FROM travelrecord LIMIT 100;而且已经知道将在dn1上执行
select read source hostM1 for dataHost:localhost1
host=192.168.1.236,port=3306
说明读操作在主库上执行,因为balance=”0”表示不开启读写分离

修改schema.xml dataHost=localHost1的balance=”2”,重启Mycat

这里写图片描述
这里写图片描述

从日志可以看出,主库和从库均参与了读操作

修改schema.xml dataHost=localHost1的balance=”3”

这里写图片描述

从日志可以看出,只有从库参与了读操作
balance=”1”的情形因未配置双主未进行测试

可以发现 Mycat 基于MySQL 的 master-slave 实现读写分离还是非常简单的

0 0