做海报找素材的网站,微网站模板制作教程,wordpress 4 优化,新浪云存储 wordpress一、 MySQLMyCat分库分表1 MyCat简介java编写的数据库中间件Mycat运行环境需要JDK。Mycat是中间件#xff0c;运行在代码应用和MySQL数据库之间的应用。前身#xff1a; corba#xff0c;是阿里开发的数据库中间件#xff0c;实现MySQL数据库分库分表集群管理的中间件…一、 MySQLMyCat分库分表1 MyCat简介java编写的数据库中间件Mycat运行环境需要JDK。Mycat是中间件运行在代码应用和MySQL数据库之间的应用。前身 corba是阿里开发的数据库中间件实现MySQL数据库分库分表集群管理的中间件曾经出现过重大事故二次开发形成Mycat。使用MyCat之后编写的所有的SQL语句必须严格遵守SQL标准规范。insert into table_name(column_name) values(column_value); 使用MyCat中间件后的结构图如下2 MyCat术语简介2.1 切分逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分.2.1.1 纵向切分把一个数据库切分成多个数据库,配置方便只能实现两张表的表连接查询.将一张表中的数据分散到若干个database的同结构表中。多个表的数据的集合是当前表格的数据。2.1.2 横向切分把一个表切分成多个表,相比纵向切分配置麻烦无法实现表连接查询.将一张表的字段分散到若干张表中将若干表连接到一起才是当前表的完整数据。2.2 逻辑库Mycat中定义的database.是逻辑上存在的.但是物理上未必存在.主要是针对纵向切分提供的概念.访问MyCat就是将MyCat当做MySQL使用。Db数据库是MyCat中定义的database。通过SQL访问MyCat中的db库的时候对应的是MySQL中的db1db2db3三个库。物理上的database是db1db2db3.逻辑上的database就是db。2.3 逻辑表Mycat中定义的table.是逻辑上存在,物理上未必存在.主要是针对横向切分提供的概念MyCat中的表格table其字段分散到MySQL数据库的表格table1,table2,table3中。2.4 默认端口Mycat默认端口是80662.5 数据主机 - dataHost物理MySQL存放的主机地址.可以使用主机名,IP,域名定义.2.6 数据节点 - dataNode物理的database是什么.数据保存的物理节点.就是database.2.7 分片规则当控制数据的时候,如何访问物理database和table.就是访问dataHost和dataNode的算法.在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法.如:哈希算法,crc16算法等.3 Mycat搭建3.1 安装JDK略3.2 主从备份搭建完成3.3 安装mycat解压缩: tar -zxf mycat-xxxx.tar.gz3.4 Master提供可被Mycat访问的用户在Mycat中通过Master数据库的root用户访问Master数据库.grant all privileges on *.* to ‘username’’ip’ identified by ‘password’ with grant option; grant all privileges on *.* to mycat% identified by mycat with grant option; 3.5 上传mycatMycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 3.6 解压缩tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 3.7 Mycat配置文件详解Mycat所有的配置文件,都在应用的conf目录中.3.7.1 rule.xml用于定义分片规则的配置文件.主要是查看.很少修改.mycat默认的分片规则: 以500万为单位,实现分片规则.逻辑库A对应dataNode - db1和db2. 1-500万保存在db1中, 500万零1到1000万保存在db2中,1000万零1到1500万保存在db1中.依次类推.3.7.2 schema.xml用于定义逻辑库和逻辑表的配置文件.在配置文件中可以定义读写分离,逻辑库,逻辑表,dataHost,dataNode等信息.配置文件解释:3.7.2.1 标签schema配置逻辑库的标签3.7.2.1.1 属性name逻辑库名称3.7.2.1.2 属性checkSQLschema是否检测SQL语法中的schema信息.如: Mycat逻辑库名称 A, dataNode名称BSQL : select * from A.table;checkSQLschema值是true, Mycat发送到数据库的SQL是select * from table;checkSQLschema值是false,Mycat发送的数据库的SQL是select * from A.table;3.7.2.1.3 sqlMaxLimitMycat在执行SQL的时候,如果SQL语法中没有limit子句.自动增加limit子句. 避免一次性得到过多的数据,影响效率. limit子句的限制数量默认配置为100.如果SQL中有具体的limit子句,当前属性失效.SQL : select * from table . mycat解析后: select * from table limit 100SQL : select * from table limit 10 . mycat不做任何操作修改.3.7.2.2 标签table定义逻辑表的标签如果需要定义多个逻辑表编写多个table标签。要求逻辑表的表名和物理表(MySQL数据库中真实存在的表)的表名一致。3.7.2.2.1 属性name逻辑表名3.7.2.2.2 属性dataNode数据节点名称. 配置文件中后续需要定义的标签(即物理数据库中的database名称).多个名称使用逗号分隔.多个database定义后代表分库。3.7.2.2.3 属性rule分片规则名称.具体的规则名称参考rule.xml配置文件.SQL语句发送到Mycat中后Mycat如何计算应该将当期的SQL发送到哪一个物理数据库管理系统或物理database中。3.7.2.3 标签dataNode定义数据节点的标签 定义具体的物理database信息的。3.7.2.3.1 属性name数据节点名称, 是定义的逻辑名称,对应具体的物理数据库database3.7.2.3.2 属性dataHost引用dataHost标签的name值,代表使用的物理数据库所在位置和配置信息.3.7.2.3.3 属性database在dataHost物理机中,具体的物理数据库database名称.3.7.2.4 dataHost标签定义数据主机的标签 就是物理MYSQL真实安装的位置。3.7.2.4.1 属性name定义逻辑上的数据主机名称3.7.2.4.2 属性maxCon/minCon最大连接数, max connections最小连接数, min connections3.7.2.4.3 属性dbType数据库类型 : mysql数据库3.7.2.4.4 属性dbDriver数据库驱动类型, native,使用mycat提供的本地驱动.3.7.2.5 dataHost子标签writeHost写数据的数据库定义标签. 实现读写分离操作.3.7.2.5.1 属性 host数据库命名3.7.2.5.2 属性url数据库访问路径3.7.2.5.3 属性user数据库访问用户名3.7.2.5.4 属性password访问用户密码3.7.2.6 测试配置文件3.7.3 server.xml配置Mycat服务信息的.如: Mycat中的用户,用户可以访问的逻辑库,可以访问的逻辑表,服务的端口号等.常见修改内容:3.7.4 启动Mycat命令bin/mycat start 3.7.5 停止命令bin/mycat stop 3.7.6 重启命令bin/mycat restart 3.7.7 查看Mycat状态bin/mycat status 3.7.8 访问方式可以使用命令行访问或客户端软件访问.3.7.8.1 命令行访问方式mysql -u用户名 -p密码 -hmycat主机IP -P8066链接成功后,可以当做MySQL数据库使用.访问成功后不能直接使用。因为Mycat只能访问MYSQL的schema(database)不能自动创建逻辑库对应的物理库。且不能自动创建逻辑表对应的物理表。必须人工链接master数据库手动创建database。表格可以在mycat控制台创建。注意在mycat控制台创建的表必须是schema.xml配置文件中定义过的逻辑表。启动后经过测试crc32slot分片规则无效执行DML语句的时候只能识别db1和db2。DDL语句可以识别db3。修改conf/rule.xml配置文件找标签修改count参数。修改为对应的物理database数量。3.7.9 访问约束3.7.9.1 表约束不能创建未在schema.xml中配置的逻辑表3.7.9.2 DML约束尤其是新增: 必须在insert into语法后携带所有的字段名称.至少携带主键名称.因为分片规则,绝大多数都是通过主键字段计算数据分片规则的.3.7.10 查看Mycat日志logs/wrapper.log日志中记录的是所有的mycat操作. 查看的时候主要看异常信息caused by信息二、 MyCat配置读写分离1 MySQL主从备份1.1 主从备份概念什么是主从备份: 就是一种主备模式的数据库应用.主库(Master)数据与备库(Slave)数据完全一致.实现数据的多重备份, 保证数据的安全.可以在Master[InnoDB]和Slave[MyISAM]中使用不同的数据库引擎,实现读写的分离1.1.1 MySQL5.5版本后本身支持主从备份在老旧版本的MySQL数据库系统中,不支持主从备份,需要安装额外的RPM包.如果需要安装RPM,只能在一个位置节点安装.1.1.2 主从备份目的1.1.2.1 实现主备模式保证数据的安全. 尽量避免数据丢失的可能.1.1.2.2 实现读写分离使用不同的数据库引擎,实现读写分离.提高所有的操作效率.InnoDB使用DML语法操作. MyISAM使用DQL语法操作.1.1.3 主从备份效果1.1.3.1 主库操作同步到备库所有对Master的操作,都会同步到Slave中.如果Master和Salve天生上环境不同,那么对Master的操作,可能会在Slave中出现错误如: 在创建主从模式之前,Master有database : db1, db2, db3. Slave有database: db1, db2.创建主从模式.现在的情况Master和Slave天生不同.主从模式创建成功后,在Master中drop database db3. Slave中抛出数据库SQL异常.后续所有的命令不能同步.一旦出现错误. 只能重新实现主从模式.1.2 安装MySQL略过.1.3 主从备份配置主要操作Master和Slave中的配置文件和DBMS的配置.配置文件: 定义主从模式的基础信息. 如: 日志, 命令等.DBMS配置: 提供主从访问的用户,基础信息[Master和Slave的位置,用户名,密码,日志文件名等]等.建议建立主从备份的多个MySQL最好原始环境一致。Databasetabledata完全一致。1.3.1 Master[主库]配置1.3.1.1 修改Master配置文件/etc/my.cnf 需要修改. 在修改前建议复制一份备份文件.修改后的my.cnf配置文件,参考资料中的my.cnf文件内容.1.3.1.1.1 server-id本环境中server-id是1MySQL服务唯一标识唯一标识是数字. 自然数配置的时候有要求1.3.1.1.1.1 单机使用server-id 任意配置,只要是数字即可1.3.1.1.1.2 主从使用server-id Master唯一标识数字必须小于Slave唯一标识数字.1.3.1.1.2 log_bin本环境中log_bin值 : master_log日志文件命名, 开启日志功能。此日志是命令日志。就是记录主库中执行的所有的SQL命令的。1.3.1.1.2.1 开启日志MySQL的log_bin不是执行日志,状态日志. 是操作日志.就是在DBMS中所有的SQL命令log_bin日志不是必要的.只有配置主从备份时才必要。1.3.1.1.2.2 日志文件配置变量的值就是日志文件名称.是日志文件名称的主体.MySQL数据库自动增加文件名后缀和文件类型.1.3.1.2 重启MySQLservice mysqld restart 1.3.1.3 配置Master1.3.1.3.1 访问MySQLmysql -uusername -ppassword 1.3.1.3.2 创建用户在MySQL数据库中,为不存在的用户授权,就是同步创建用户并授权.此用户是从库访问主库使用的用户ip地址不能写为%. 因为主从备份中,当前创建的用户,是给从库Slave访问主库Master使用的.用户必须有指定的访问地址.不能是通用地址.1.3.1.3.3 查看用户use mysql; select host, name from user; 1.3.1.3.4 查看Master信息show master status; 1.3.2 Slave[从库]配置1.3.2.1 修改Slave配置文件/etc/my.cnf 1.3.2.1.1 server_id唯一标识, 本环境中配置为 : 21.3.2.1.2 log_bin可以使用默认配置, 也可以注释.1.3.2.2 可选: 修改uuid主从模式要求多个MySQL物理名称不能相同. 即按装MySQL过程中Linux自动生成的物理标志. 唯一物理标志命名为uuid. 保存位置是MySQL数据库的数据存放位置. 默认为/var/lib/mysql目录中. 文件名是auto.cnf.修改auto.cnf文件中的uuid数据. 随意修改,不建议改变数据长度.建议改变数据内容./var/lib/mysql/auto.cnf 1.3.2.3 重启MySQL服务service mysqld restart 1.3.2.4 配置Slave1.3.2.4.1 访问mysqlmysql -uusername -ppassword 1.3.2.4.2 停止Slave功能stop slave 1.3.2.4.3 配置主库信息需要修改的数据是依据Master信息修改的. ip是Master所在物理机IP. 用户名和密码是Master提供的Slave访问用户名和密码. 日志文件是在Master中查看的主库信息提供的.在Master中使用命令show master status查看日志文件名称.change master to master_host’ip’, master_user’username’, master_password’password’, master_log_file’log_file_name’; change master to master_host192.168.199.212, master_userslave, master_passwordslave, master_log_filemaster_log.000001; 1.3.2.4.4 启动Slave功能start slave; 1.3.2.4.5 查看Slave配置show slave status G; mysql show slave status G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.120.139 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-log.000001 Read_Master_Log_Pos: 427 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 591 Relay_Master_Log_File: master-log.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 427 Relay_Log_Space: 765 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 最后一次错误的IO请求编号 Last_IO_Error: Last_SQL_Errno: 0 最后一次错误的执行SQL命令编号. Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 9ee988ac-8751-11e7-8a95-000c2953ac06 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec) 1.3.3 测试主从1.4 主从模式下的逻辑图2 MyCat读写分离配置修改conf/schema.xml配置文件下述内容中红色部分为重点内容。