Mycat MySQLGalera读写分离验证安装手册
一文看懂mycat配置--数据库的读写分离、分表分库

⼀⽂看懂mycat配置--数据库的读写分离、分表分库概述系统开发中,数据库是⾮常重要的⼀个点。
除了程序的本⾝的优化,如:SQL语句优化、代码优化,数据库的处理本⾝优化也是⾮常重要的。
主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。
Mycat是⼀个⼴受好评的数据库中间件,已经在很多产品上进⾏使⽤了。
今天主要带⼤家了解下mycat的相关配置,mycat配置后才可以去做数据库的读写分离、分表分库。
a31dcbd3eb9.jpegmycat⽬录MyCAT 配置解析Mycat的配置⽂件都在conf⽬录⾥⾯,这⾥介绍⼏个常⽤的⽂件84975f54f84.jpegMycat的架构其实很好理解,Mycat是代理,Mycat后⾯就是物理数据库。
和Web服务器的Nginx类似。
对于使⽤者来说,访问的都是Mycat,不会接触到后端的数据库。
⼀、wrapper.conf配置jdk:mand=/usr/local/jdk1.8.0_131/bin/java⼆、server.xml1、user标签<user name="root"><property name="password"></property><property name="schemas">TESTDB</property></user>user⽤户配置节点l --name登录的⽤户名,也就是连接Mycat的⽤户名l --password登录的密码,也就是连接Mycat的密码l --schemas数据库名,这⾥会和schema.xml中的配置关联,多个⽤逗号分开,例如需要这个⽤户需要管理两个数据库db1,db2,则配置db1,dbs2、privileges标签对⽤户的 schema以及表进⾏精细化的DML权限控制<privileges check="false"></privileges>--check表⽰是否开启DML权限检查。
mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离

mysql+mycat搭建稳定⾼可⽤集群,负载均衡,主备复制,读写分离数据库性能优化普遍采⽤集群⽅式,oracle集群软硬件投⼊昂贵,今天花了⼀天时间搭建基于mysql的集群环境。
主要思路简单说,实现mysql主备复制-->利⽤mycat实现负载均衡。
⽐较了常⽤的读写分离⽅式,推荐mycat,社区活跃,性能稳定。
测试环境MYSQL版本:Server version: 5.5.53,到官⽹可以下载WINDWOS安装包。
注意:确保mysql版本为5.5以后,以前版本主备同步配置⽅式不同。
linux实现思路类似,修改f即可。
A主mysql。
192.168.110.1:3306, ⽤户root,密码root。
操作系统:win7 x64,内存:4g安装路径:C:\Program Files\MySQL\MySQL Server 5.5\binB备mysql。
192.168.110.2:3306, ⽤户root,密码root。
操作系统:win2003 x64,内存:1g安装路径:C:\Program Files\MySQL\MySQL Server 5.5\binA主、B备的mysql中创建sync_test数据库实现mysql主备复制主要思路:A主mysql开启⽇志,B备mysql读取操作⽇志,同步执⾏。
⼀般为主备同步,主主同步不推荐使⽤。
配置A主mysql1)修改my.ini。
需要在log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log"的相关位置创建log⽬录,以及mysql-bin.log⽂件。
[mysqld]server-id=1 #主机标⽰,整数port=3306log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #确保此⽂件可写read-only=0 #主机,读写都可以binlog-do-db=sync_test #需要备份数据库,多个写多⾏binlog-ignore-db=mysql #不需要备份的数据库,多个写多⾏2)允许MYSQL远程访问#登录mysql console进⼊%home%/bin,执⾏mysql -uroot -proot#授权。
mycat读写分离性能测试(5.5及以上版本)

1.MySQL主从配置我们的方案设计基于Mysql的主从数据复制功能,以下是基于mysql5.5以上版本最新的主从配置。
开启mysql主从数据复制,主要在mysql的my.ini文件中设置:windows系统一般在c:\ProgrameData\MySQL中:Linux系统一般在/etc/f中:1、主数据库服务器配置:server-id=1log-bin=mysql-binbinlog-do-db=Industry //只同步Industry数据库binlog-ignore-db=mysql //避免同步mysql用户配置,以免不必要的麻烦binlog-ignore-db=performance_schemabinlog-ignore-db=information_schema2、创建一个允许从服务器来访问的用户(主服务器):grant replication slave on *.* to 'root'@'192.168.0.58' identified by 'root';说明:∙root:Slave使用的账号∙IDENTIFIED BY 'root' :Slave使用的密码∙192.168.1.58:Slave数据库IPmaster端,通过show master status\G 显示信息。
如图:注意上图中的File,和Position。
Slave 中会用到这些信息。
3、从数据库服务器配置: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=14、关联上Master信息:change master tomaster_host='192.168.0.68',master_user='root',master_port=3306,master_password='root',mast er_log_file='mysql-bin.000001',master_log_pos=120;命令说明:∙master_host:master 数据库服务器ip∙master_user: master 数据库通过GRANT授权的账号∙master_port:master 数据库使用的端口号∙master_password:master 数据库通过GRANT授权的密码∙master_log_file:master数据库中通过show master status显示的File名称∙master_log_pos:master数据库中通过show master status显示的Position数据重启Slave 的MySql服务在命令行中输入start slave.在命令行中输入show slave status,显示如下:注意:只有Slave_IO_Running与Slave_SQL_Running都为Yes才配置成功。
mysql主从与读写分离安装详解

Mysql主从与读写分离主从模式Master:192.168.1.1Slave:192.168.1.1一、配置主服务器1.1修改mysql配置文件# vi /etc/my.cof在配置文件中添加log-bin=mysql-bin(开启二进制日志)server-id = 11.2启动mysqlservice mysqld start1.3登陆mysqlmysql -uroot –p‘passwd’1.4授权给从服务器mysql> GRANT REPLICATION SLAVE ON *.* to 'user'@'192.168.1.2' identified by ‘password’;1.5查看主数据库状态mysql> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000005 | 261 | | |+------------------+----------+--------------+------------------+记录下File 及Position 的值,在后面进行从服务器操作的时候需要用到二、配置从服务器2.1修改从服务器的配置文件/etc/f添加server-id = 2,并确保这个ID没有被别的MySQL服务所使用。
2.2启动mysql服务service mysqld start2.3通过命令行登录管理MySQL服务器#mysql -uroot -p'password'2.4执行同步SQL语句mysql> change master tomaster_host=’192.168.1.1’,master_user=’user’,master_password=’password’,master_log_file=’mysql-bin.000005’,master_log_pos=261;正确执行后启动Slave同步进程mysql> start slave;2.5主从同步检查mysql> show slave status\G============================================== **************** 1. row *******************Slave_IO_State:Master_Host: 192.168.1.1Master_User: userMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000005Read_Master_Log_Pos: 415Relay_Log_File: localhost-relay-bin.000008Relay_Log_Pos: 561Relay_Master_Log_File: mysql-bin.000005Slave_IO_Running: YESSlave_SQL_Running: YESReplicate_Do_DB:……………省略若干……………Master_Server_Id: 11 row in set (0.01 sec)==============================================其中Slave_IO_Running 与Slave_SQL_Running 的值都必须为YES,才表明状态正常。
Mycat MySQL主从复制读写分离验证安装手册

MyCat+MySQL主从复制读写分离验证菜菜-李梦嘉(56335443) 配置MySQL主从复制实验环境主从环境搭建在Master上配置log_bin和log_bin_index创建复制用户并分配权限在Slave上配置relay-log和relay-log-index使用change master to命令将Slave指向Master使用start slave命令启动复制查看复制状态MyCat读写分离配置方案一schema.xml配置说明:Balance=1 readHost和备用writeHost负担查询操作,本例中只有readHost负载Switchtype=1 自动切换主从查看节点状态创建表并插入数据192.168.1.248作为写节点Create操作Insert操作192.168.1.249作为读节点停止192.168.1.248上的mysql进程查看节点状态此时无法写入和查询数据查看节点状态,节点加入成功插入数据192.168.1.248依然作为写节点192.168.1.249作为读节点总结:1、读写操作分发到不同节点,实现了读写分离;2、节点间数据同步依靠mysql的复制,可能存在写节点和读节点数据不一致;3、如果写节点失效,写节点下的读节点也无法提供服务。
方案二Schema配置:说明:DataHost配置和方案一相同,区别是2个节点都配置为writeHost查看节点状态创建表并插入数据192.168.1.248作为写节点Create操作Insert操作运行查询192.168.1.249作为写节点关闭192.168.1.248上的mysql进程查看节点状态插入数据192.168.1.249提升为写节点查询数据192.168.1.249同时作为从节点重启192.168.1.248上mysql进程查看节点状态,节点成功加入插入数据写节点仍然为192.168.1.249运行查询,注意此时获取的是脏数据192.168.1.248作为读节点总结:1、读写操作分发到不同节点,实现了读写分离;2、写节点失效后,备节点提升为写节点,同时负责读操作;3、当原主节点重启后,可以被mycat重新加入,但是此时2个节点的数据已经不一致,而且新插入数据无法同步;4、失效写节点需要检查数据一致性,并重新配置复制才可以加入节点。
MySQL主从复制、读写分离实现(MyCat)及运用

1 主从复制1.1 概述主从复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。
MySQL 复制的有点主要包含以下三个方面:1.主库出现问题,可以快速切换到从库提供服务。
2.实现读写分离,降低主库的访问压力。
3.可以在从库中执行备份,以避免备份期间影响主库服务。
1.2 原理从上图来看,复制分成三步:1.Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。
2.从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log 。
3.slave重做中继日志中的事件,将改变反映它自己的数据。
1.3 搭建1.3.1 服务器准备1.两台服务器安装MySQL,并完成基础的初始化工作;2.放行MySQL数据库端口(3306),或者关闭防火墙#放行3306端口firewall-cmd --zone=public --add-port=3306/tcp -permanent#关闭防火墙systemctl disable firewalld --now1.3.2 主库配置1.修改配置文件/etc/my.conf#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^32-1,默认为1server-id=1#是否只读,1代表只读,0代表读写read-only=0#忽略的数据,指不需要同步的数据库#binlog-ignore-db=mysql#指定同步的数据库#binlog-do-db=db012.重启数据库systemctl restart mysqld3.创建远程连接的账号,并授予主从复制的权限-- 创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务CREATE USER'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';-- 为'itcast'@'%'用户分配主从复制权限GRANT REPLICATION SLAVE ON*.*TO'itcast'@'%';4.通过命令,查看二进制坐标show master status;字段含义说明:file : 从哪个日志文件开始推送日志文件position :从哪个位置开始推送日志binlog_ignore_db : 指定不需要同步的数据库4.开启同步操作start relica; -- 8.0.22之后2.CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。
运维必懂的MySQL主从复制与读写分离解析和图文详细步骤

运维必懂的MySQL主从复制与读写分离解析和图⽂详细步骤⼀、MySQL主从复制与读写分离1.1 主从分离和读写分离的相关概述1)主从复制与读写分离在实质际的⽣产环境中,对数据库的读和写都在同⼀个数据库服务器中,是不能满⾜实院需求的。
⽆论是在安全性、⾼可⽤性还是⾼并发等各个⽅⾯都是完全不能满⾜实际需求的。
因此,通过主从复制的⽅式来同步数据,再通过读写分离来提升数据库的并发负载能⼒。
有点类似于rsync,但是不同的是rsync是对磁盘⽂件做备份,⽽mysql主从复制是对数据库中的数据、语句做备份。
2)为什么要读写分离因为数据库的"写"(写10000条数据可能要3分钟)操作是⽐较耗时的。
但是数据库的"读" (读10000条数据可能只要5秒钟)所以读写分离,解决的是,数据库的写⼊,景响了查询的效率。
3)什么时候要读写分离数据库不⼀定要读写分离,如果程序使⽤数据库较多时,⽽更新少,查询多的情况下会考虑使⽤。
利⽤数据库主从同步,再通过读写分离可以分担数据库压⼒,提⾼性能。
4)读写分离的原理读写分离基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),⽽从数据库处理SELECT⾹询操作。
数据库复制被⽤来把事务性操作导致的变更同步到集群中的从数据库。
5)mysql⽀持的复制类型1. STATEMENT∶基于语句的复制。
在服务器上执⾏sgl语句,在从服务器上执⾏同样的语句,mysgl默认采⽤基于语句的复制,执⾏效率⾼。
2. ROW∶基于⾏的复制。
把改变的内容复制过去,⽽不是把命令在从服务器上执⾏⼀遍。
3. MIXED∶混合类型的复制。
⿊默认采⽤基于语句的复制,⼀旦发现基于语句⽆法精确复制时,就会采⽤基于⾏的复制。
6)主从复制的⼯作过程(主写从复制)1. 在每个事务更新数据完成之前,Master在⼆进制⽇志(Binary log)记录这些改变。
MySQL中的数据库读写分离配置和使用技巧

MySQL中的数据库读写分离配置和使用技巧引言:随着互联网的迅猛发展,数据库的负载越来越重,读写分离成为提升数据库性能的重要手段。
MySQL作为最常用的关系型数据库之一,也提供了相应的读写分离解决方案。
本文主要介绍MySQL中数据库读写分离的配置和使用技巧,帮助读者更好地提升数据库的性能和可靠性。
一、读写分离的概念和原理读写分离是指将数据库的读操作和写操作分离到不同的服务器上进行,实现高并发读取和写入的能力。
其核心原理是在主数据库上执行写操作,然后将写入的数据同步到从数据库,读操作则直接在从数据库上进行,从而分担了主数据库的压力。
二、MySQL中读写分离的配置1. 设计数据库架构在进行读写分离之前,首先需要设计合理的数据库架构。
一般而言,将主数据库用于写操作,而从数据库用于读操作。
可以根据业务需求将数据表进行水平切分,将不同的数据表放在不同的服务器上,以提高数据库的并发读取和写入能力。
2. 安装和配置MySQL主从服务器为了实现读写分离,我们需要设置一个主服务器和一个或多个从服务器。
首先,在主服务器上安装和配置MySQL,然后在从服务器上安装MySQL,并将其配置为从服务器。
在配置文件中,需要设置"server-id"和"log-bin"等参数,以便进行主从复制。
3. 配置主从复制在MySQL中,主从复制通过二进制日志(binary log)实现。
在主服务器上执行"flush tables with read lock"命令,暂停写入操作,然后在从服务器上执行"change master to"命令,指定主服务器的地址和认证信息。
接下来,可以通过"start slave"命令启动从服务器的复制进程。
4. 验证主从复制配置完成主从复制的配置后,可以通过执行"show slave status"命令来验证复制是否正常运行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mycat+MySQL Galera读写分离验证作者菜菜-李梦嘉56335443部署MySQL Galera安装环境安装前准备安装gcc、gcc-c++# yum install gcc gcc-c++安装boost-devel# yum install boost-devel安装scons check-devel openssl-devel# yum install scons check-devel openssl-devel安装libaio# yum install libaio安装perl、perl-devel# yum install perl perl-devel安装rsync、lsof# yum install rsync lsofMySQL Galera安装安装含wsrep Patch的MySQL# tar zxvf mysql-wsrep-5.6.27-25.12-linux-x86_64.tar.gz# mv mysql-wsrep-5.6.27-25.12-linux-x86_64 /usr/local/mysql# groupadd mysql# useradd -r -g mysql mysql# chown -R mysql:mysql .# ./scripts/mysql_install_db --no-defaults --datadir=/usr/local/mysql/data --user=mysql # chown -R root .# chown -R mysql data# ln -s /usr/local/mysql/bin/* /usr/sbin安装Galera复制插件# tar zxvf galera-3-25.3.13.tar.gz# cd galera-3-25.3.13# scons# cp garb/garbd /usr/local/mysql/bin/# cp libgalera_smm.so /usr/local/mysql/lib/plugin/配置MySQL Galera# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld# mkdir -p /var/lib/mysql# chown mysql:mysql /var/lib/mysql# vi /etc/f[client]port = 3306socket = /var/lib/mysql/mysql.sock[mysqld_safe]log-error = /var/lib/mysql/mysql.logpid-file = /var/lib/mysql/mysql.pid[mysqld]wsrep_node_name = node1wsrep_provider = /usr/local/mysql/lib/plugin/libgalera_smm.so#wsrep_provider_options ='gcache.size=1G;socket.ssl_key=my_key;socket.ssl_cert=my_cert' #wsrep_slave_threads=16wsrep_sst_method = rsyncport = 3306socket = /var/lib/mysql/mysql.sockuser = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/datadefault_storage_engine=InnoDB#innodb_buffer_pool_size=1G#innodb_log_file_size=256Minnodb_autoinc_lock_mode=2innodb_locks_unsafe_for_binlog=1innodb_flush_log_at_trx_commit=0innodb_doublewrite=0innodb_file_per_table=1binlog_format=ROWlog-bin=mysql-binserver-id=101relay-log=mysql-relay-bin#read_only=1log-slave-updates=1MySQL Galera启动与关闭初次启动节点# /usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &或# service mysqld start --wsrep_cluster_address=gcomm://查看mysql启动端口# netstat -plantu | grep mysqldtcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 3656/mysqld注:1)”gcomm://”是特殊的地址,仅仅是galera cluster初始化启动时候使用,再次启动的时候需要使用具体的IP地址.2) 端口4567是wsrep使用的默认端口.该端口的防火墙设置规则应该和3306的一样.关闭# mysqladmin -uroot -p shutdown或# service mysqld stop添加MySQL Galera新节点添加新节点的时候,新接入的节点叫Joiner,给Joiner提供复制的节点叫Donor.新的节点接入需要:1) 安装带wsrep patch的MySQL版本2) 安装Galera复制插件3) 配置好新节点的MySQL(参考Donor的f)4) 配置或启动的gcomm://的地址是需要使用donor的IP.接入节点galera2mysqld_safe --wsrep_cluster_address="gcomm://192.168.1.250:4567,192.168.1.248:4567" >/dev/null &接入节点galera3service mysqld start --wsrep_cluster_address="gcomm://192.168.1.250:4567,192.168.1.248:4567"修改galera节点的wsrep_cluster_addressservice mysql restart --wsrep_cluster_address="gcomm://192.168.1.248:4567,192.168.1.249:4567"同步验证在其中一个节点上创建账号mysql> create user 'mallcai'@ '192.168.1.%' identified by 'XXXXXX';mysql> grant all privileges on *.* to 'mallcai'@ '192.168.1.%' with grant option;mysql> flush privileges;在其他节点查看账号同步情况mysql> select user,host from er;+---------+-------------+| user | host |+---------+-------------+| root | 127.0.0.1 || root | ::1 || | galera || root | galera || | localhost || root | localhost |+---------+-------------+7 rows in set (0.00 sec)MyCat配置MySQL Galera读写分离方案一schema.xml配置说明:Balance=1 所有readHost和standby writeHost参与读负载WriteType=0 所有写操作发送到配置的第一个writeHost,第一个挂了切换到第二个writeHost SwitchType=3 基于MySQL galary cluster的切换机制,心跳语句为show status like 'wsrep%'配置所有节点为writeHost,其他节点作为writeHost的readHost查看所有host的状态创建测试表并插入数据选择192.168.1.248作为writeHost,而非按配置文件中的顺序选择192.168.1.250 Create操作Insert操作运行3次查询3个节点都负载了select操作hostR2 192.168.1.249hostR5 192.168.1.248hostR6 192.168.1.250关闭192.168.1.248上的mysql进程查看节点状态再次插入数据查看mycat.log日志,选择192.168.1.249作为写入节点运行2次select查询alive的节点都负载了select操作hostR2 192.168.1.249关闭192.168.1.249上的mysql进程查看节点状态插入数据alive的192.168.1.250作为writeHost运行select查询alive的192.168.1.250作为readHost重启关闭节点查看节点状态,节点加入成功插入数据仍然将最后一次的192.168.1.250作为writeHost总结:1、Mycat选取一个writeHost作为写节点,所有节点都作为readHost;2、如果writeHost失效,选择另一个writeHost作为写节点,其余节点作为readHost;3、除非全部writeHost失效,否则业务不会中断,安全性较高;4、并未达到读写分离的目的。
方案二schema.xml配置dataNode配置保持不变192.168.1.250作为writeHost192.168.1.249作为192.168.1.250的readHost 192.168.1.248作为192.168.1.250的备用writeHost查看节点状态创建表并插入数据选择192.168.1.250作为writeHostCreate操作Insert操作运行2次查询readHost和备用writeHost都负载select操作hostM2 192.168.1.248hostR1 192.168.1.249关闭192.168.1.250上的mysql进程查看节点状态插入数据备用writeHost192.168.1.248提升为写节点运行2次select查询此时192.168.1.250的readHost192.168.1.249已经不能分担读操作,查询都由192.168.1.248处理重启192.168.1.250的mysql查看节点状态插入数据writeHost仍然为192.168.1.248运行查询备writeHost和readHost分担select查询hostM1 192.168.1.250hostR1 192.168.1.249总结:1、所有节点正常时,writeHost作为写节点,备用writeHost和readHost作为读节点;2、当主writeHost失效时,备用writeHost同时负担读和写,主writeHost下的readHost无法负担读;3、当主writeHost失效时,备writeHost压力过大。