mysql主机 MyCAT读写分离与MySQL主从同步
发布时间:2022-09-23 15:49:41 所属栏目:MySql教程 来源:
导读: 很多开发框架在框架底层就引入了读写分离的机制,面对一些没有底层支持读写分离的框架,如何实现读写分离呢?
Mycat
一个开源的高性能的数据库中间件产品,支持读写分离,支持MySQL主从,数据切
Mycat
一个开源的高性能的数据库中间件产品,支持读写分离,支持MySQL主从,数据切
|
很多开发框架在框架底层就引入了读写分离的机制,面对一些没有底层支持读写分离的框架,如何实现读写分离呢? Mycat 一个开源的高性能的数据库中间件产品,支持读写分离,支持MySQL主从,数据切分以及galera cluster集群。 它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的 Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信, 其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。 安装指南 安装JDK (略)安装MySQL (略)安装MyCAT 目前最新的稳定版本为1.6 下载指定系统的压缩包,解压以后即可使用。免安装。 使用指南 配置 server.xml 系统配置文件 123456 dsy user标签用来添加用户,管理用户权限。 schema.xml 管理逻辑库和逻辑表的配置文件 解释:schema标签定义逻辑库的名字,table定义逻辑表。dataNode属性表示数据节点也就是数据分片。如果数据没有分片,通常只有一个就行了。 解释:创建一个名字叫做dn1的数据节点,该节点使用名字为localhost1数据库实例上的dsy这个库组成数据分片。 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> select user() password="root"> password="root" /> 解释:创建一个名为localhost1的数据库实例。连接池最大链接数为1000。初始化的连接池数为10。dbType标识使用mysql的二进制协议。 dbDriver使用native表示可以使用mysql和mariadb,可选值还有JDBC驱动。switchType=1表示自动切换。如果switchType设置为2并且slaveThreshold=”100,维持心跳的语句改为show slave status,意味着开启MySQL主从复制状态绑定的读写分离与切换机制。 heartbeat是采用select user这条语句来维持心跳。 writehost是用来定义写实例。在一个 dataHost 内可以定义多个 writeHost 和 readHost。但是,如果 writeHost 指定的后端数据库宕机,那么这个 writeHost 绑定的所有 readHost 都将不可用。另一方面,由于这个 writeHost 宕机系统会自动的检测到,并切换到备用的 writeHost 上去。 balance解释0不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。1全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。2所有读操作都随机的在 writeHost、readhost 上分发。3所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。writeType负载均衡类型解释0所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .1所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。switchType切换解释-1表示不自动切换1表示自动切换2基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status3基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’。 读写分离配置 上述dataHost配置里,两个平级的writeHost节点。是一种方案。 或者在第一个writeHost里配置一个readHost节点来做读写分离。为第二种方案。 第二种当写挂了的时候,读也同事不可用。但是第一种可以继续使用。建议使用第一种配置。也就是上面的代码里写的那样。 事务内部的一切操作都会走写节点,所以读操作不要加事务。 启动服务 进入 MYCAT/bin 目录 执行 ./mycat start 连接mycat 和mysql命令一致 mysql -uroot -p123456 -h127.0.0.1 -P8066 -Ddsy 如果看到以下字样说明正常运行了。 Your MySQL connection id is 1 Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB) 配置MySQL主从同步 现有主机A:192.168.0.107 主机B:192.168.0.164 做主从同步。A为master节点B为slave节点。 1. A,B主机上都开启binlog功能。 配置文件在/etc/my.cnf。取消log-bin=mysql-bin前面的注释。 1. 在A主机上创建一个slave用户,只赋给他REPLICATION SLAVE 权限即可。 1. 在A主机上执行以下SQL语句 FLUSH LOGS SHOW MASTER STATUS 确保在执行FLUSH LOGS时刻,AB两个库的数据完全一致。 执行完SHOW MASTER STATUS以后记录下binlog文件和pos位置。 1. 在B主机上将master节点指向A主机 CHANGE MASTER TO MASTER_HOST = '192.168.0.107', MASTER_USER = 'slave', MASTER_PASSWORD = 'slave', MASTER_PORT = 3306, MASTER_LOG_FILE = 'mysql-bin.000002' MASTER_LOG_POS = 105 ; 启动主从同步 START SLAVE 查看主从同步状态 SHOW SLAVE STATUS 如果看到Slave_IO_Running和Slave_SQL_Running都是Yes 这说明mysql主从同步配置完毕 踩坑指南 尽量保证AB主机上的mysql版本一致。 如果无法保证,尽量保证mysqlbinlog版本一致。 如果连mysqlbinlog版本都无法保证一致mysql主机,最起码主节点的mysqlbinlog不能高于从主机的mysqlbinlog。 我在测试的时候主节点的mysqlbinlog是V4.4的,从节点的mysqlbinlog是V3.3的。简直是噩梦。 老版本的mysqlbinlog不能正常读取新版本下产生的binlog日志文件。 (编辑:我爱制作网_沈阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330576号