一, Mycat 的安装准备:
1,jdk: 要求 jdk 必须是 1.7 及以上版本
2,Mysql: 推荐 mysql 是 5.5 以上版本
3,Mycat:
Mycat 的官方网站:
http://www.mycat.org.cn/
下载地址:
https://github.com/MyCATApache/Mycat-download
Mycat 的安装
Mycat 有 windows,linux 多种版本. 本教程为 linux 安装步骤, windows 基本相同.
第一步: 下载 Mycat-server-xxxx-linux.tar.gz
第二步: 将压缩包解压缩. 建议将 mycat 放到 / usr/local/mycat 目录下.
第三步: 进入 mycat 目录, 启动 mycat
./mycat start
停止:
./mycat stop
mycat 支持的命令 {console | start | stop | restart | status | dump}
Mycat 的默认端口号为: 8066
二, Mycat 的分片
两台 mysql 数据库服务器
- Host1:192.168.37.101
- Host2:192.168.37.102
host1 环境:
操作系统版本: centos6.4
数据库版本: mysql-5.6
mycat 版本::1.4release(发行版)
数据库名: db1,db3
mysql 节点 2 环境:
操作系统版本 : centos6.4
数据库版本 : mysql-5.6
mycat 版本 :1.4 release
数据库名 : db2
配置重要文件 Schema.xml
<schema name="mycatName" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) --> id 自动分片的规则
- <table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
- </schema>
给 mycat 创建个虚拟的数据库名 mycatName, 给 mycatName 创建指定表名, 和 db1,db2,db3 表名相同才能进行分片
MyCat 安装到节点 1 上 (需要安装 jdk)
- <dataNode name="dn1" dataHost="localhost1" database="db1" />
- <dataNode name="dn2" dataHost="localhost2" database="db2" />
- <dataNode name="dn3" dataHost="localhost1" database="db3" />
- <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
- writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
- <heartbeat>select user()</heartbeat>
- <!-- can have multi write hosts -->
- <writeHost host="hostM1" url="192.168.37.101:3306" user="root"
- password="root">
- <!-- can have multi read hosts -->
- </writeHost>
- </dataHost>
- <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
- writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
- <heartbeat>select user()</heartbeat>
- <!-- can have multi write hosts -->
- <writeHost host="hostM1" url="192.168.37.102:3306" user="root"
- password="root">
- <!-- can have multi read hosts -->
- </writeHost>
- </dataHost>
- </mycat:schema>
schema.xml 中删除 <!--type="global"-->, 不删除的话分节的话三张表都会有相 3 同数据
配置重要文件 Server.xml
<user name="gaoxiansheng"> <property name="password">123456</property> <property name="schemas">mycatName</property> <property name="readOnly">false</property> </user> |
配置重要文件 rule.xml
三, mycat 读写分离:
主从配置需要注意的地方
1, 主 DB server 和从 DB server 数据库的版本一致
2, 主 DB server 和从 DB server 数据库数据名称一致
3, 主 DB server 开启二进制日志, 主 DB server 和从 DB server 的 server_id 都必须唯一
1. 拷贝 my.cnf cp /usr/share/mysql/my-default.cnf /etc/
改名 mv my-default.cnf my.cnf
编辑 vim my.cnf 加入 lower_case_table_names=1 不区分大小写
重启 mysql service mysql restart
2. 主从复制: 读写, 删除增加一致性
主服务器配置:(在 192.168.37.101 上配置)
第一步: 更改 / etc/my.cnf 文件
binlog-do-db=db1 binlog-ignore-db=mysql # 启用二进制日志 log-bin=mysql-bin # 服务器唯一 ID, 一般取 IP 最后一段 server-id=134 |
第二步: 重启 mysql 服务
service mysql restart
第三步: 建立一个用户
- mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
- mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';
刷新权限
mysql> FLUSH PRIVILEGES;
查看 mysql 现在有哪些用户
mysql>select user,host from mysql.user;
第四步: 查询 master 的状态
- mysql> show master status;
- +------------------+----------+--------------+------------------+-------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +------------------+----------+--------------+------------------+-------------------+
- | mysql-bin.000001 | 517| db1 | mysql | |
- +------------------+----------+--------------+------------------+-------------------+
- 1 row in set
从服务器配置:(在 192.168.37.102 上配置)
第一步:
在从服务器 Hadoop02 上复制文件
cp /usr/share/mysql/my-default.cnf /etc/
改名
mv my-default.cnf my.cnf
更改配置 vim /etc/my.cnf
server-id=106
第二步: 重启 mysql 服务
service mysql restart
第三步: 配置从服务器
change master to master_host='192.168.37.101',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=517
注意语句中间不要断开, master_port 为 mysql 服务器端口号 (无引号),master_user 为执行同步操作的数据库账户,"120" 无单引号 (此处的 120 就是 show master status 中看到的 position 的值, 这里的 mysql-bin.000001 就是 file 对应的值).
第四步: 启动从服务器复制功能
Mysql>start slave;
第五步: 检查从服务器复制功能状态:
- mysql> show slave status
- ........................(省略部分)
- Slave_IO_Running: Yes // 此状态必须 YES
- Slave_SQL_Running: Yes // 此状态必须 YES
- ........................(省略部分)
注: Slave_IO 及 Slave_SQL 进程必须正常运行, 即 YES 状态, 否则都是错误的状态 (如: 其中一个 NO 均属错误).
错误处理:
如果出现此错误:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
因为是 mysql 是克隆的系统所以 mysql 的 uuid 是一样的, 所以需要修改.
配置 mycat 实现读写分离:
<dataNode name="dn1" dataHost="localhost1" database="db1" /> <dataNode name="dn2" dataHost="localhost1" database="db2" /> <dataNode name="dn3" dataHost="localhost1" database="db3" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0"dbType="mysql" dbDriver="native" switchType="2"slaveThreshold="100"> <heartbeat>show slave status</heartbeat> <writeHost host="hostM" url="192.168.25.101:3306" user="root"password="root"> <readHost host="hostS" url="192.168.25.102:3306" user="root"password="root" /> </writeHost> </dataHost> |
来源: http://www.bubuko.com/infodetail-2763131.html