网易首页 > 网易号 > 正文 申请入驻

Mycat(数据库中间件)快速进阶

0
分享至

一、Mycat配置详解

1、Mycat支持的两种配置方式

Mycat从1.5版本开始支持两种配置方式:ZooKeeper及本地XML方式。Mycat默认以本地加载XML的方式启动,如果需要配置成以ZooKeeper的方式启动,则应把conf目录下zk.conf文件中的 loadfromzk 参数设置成 true。

2、server.xml配置文件

server.xml配置文件包含了Mycat的系统配置信息

2.1、user标签


user
TESTDB
true
TESTDB

user标签主要用于定义登录Mycat的用户和权限。在如上配置中定义了用户名和密码都为test的用户,该用户可以访问的schema只有TESTDB。

若要在schema.xml中定义TESTDB,则TESTDB必须先在server.xml中定义,否则该用户将无法访问该TESTDB。如果使用了use命令,则Mycat会有如下错误提示:

Error 1044 (HY000):Access denied for user 'test' to database 'xxx'

可以修改user标签的name属性来指定用户名,修改password的值来修改密码,修改readOnly的值为true或false来限制用户的读写权限。如果需要同时访问多个schema,则多个schema之间使用英文逗号隔开,例如:


TESTDB,db1,db2

benchmark属性

通过设置benchmark属性的值来限制前端的整体连接数量,如果其值为0或不对其进行设置,则表示不限制连接数量。例如:

1000

2.2、system标签

2.2.1、charset属性


utf8

2.2.2、processors属性

processors属性指定系统可用的线程数量,默认值为机器CPU核心×每个核心运行线程的数量,processors值会影响processorBufferPool、processorBufferLocalPercent、processorExecutor属性。NIOProcessor的个数也由processors属性决定,所以调优时可以适当地修改processors值。

2.2.3、processorBufferChunk属性

processorBufferChunk属性指定每次分配Socket Direct Buffer的默认值为4096个字节,也会影响BufferPool的长度,如果一次性获取的字节过多而导致Buffer不够用,则会经常出现警告,可以适当调大processorBufferChunk值。

2.2.4、sequnceHandlerType属性

sequnceHandlerType属性指定Mycat全局序列的类型:0为本地文件方式;1为数据库方式;2为时间戳序列方式。默认使用本地文件方式,文件方式主要用于测试。

2.2.5、MySQL连接的相关属性

初始化MySQL前后端连接所涉及的一些属性如下。

· packetHeaderSize:指定MySQL协议中的报文头长度,默认值为4个字节。

· maxPacketSize:指定MySQL协议可以携带的数据的最大大小,默认值为16MB。

· idleTimeout:指定连接的空闲时间的超时长度。如果某个连接的空闲时间超过idleTimeout的值,则该连接将关闭资源并回收,单位为毫秒,默认为30分钟。

· charset:初始化连接字符集,默认为utf8。

· txIsolation:初始化前端连接事务的隔离级别,后续的txIsolation值为客户端的配置值。默认值为REPEATED_READ,对应的数字为3。

· sqlExecuteTimeout:执行SQL语句的超时时间,若SQL语句的执行时间超过这个值,则会直接关闭连接,单位为秒,默认值为300秒。

2.2.6、心跳属性

· processorCheckPeriod:清理NIOProcessor前后端空闲、超时、关闭连接的时间间隔,单位为毫秒,默认为1秒。

· dataNodeIdleCheckPeriod:对后端连接进行空闲、超时检查的时间间隔,单位为毫秒,默认为300秒。

· dataNodeHeartbeatPeriod:对后端的所有读、写库发起心跳的间隔时间,单位为毫秒,默认为10秒。

2.2.7、分布式事务开关属性

handleDistributedTransactions是分布式事务开关:0为不过滤分布式事务;1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤);2为不过滤分布式事务,但是记录分布式事务日志。主要用于控制是否允许跨库事务,配置如下:

0

2.2.8、useOffHeapForMerge属性

该属性用于配置是否启用非堆内存处理跨分片结果集,1为开启,0为关闭,Mycat从1.6版本开始支持此属性。配置如下:


0

2.2.9全局表一致性检测

其原理是通过在全局表中增加_MYCAT_OP_TIME字段来进行一致性检测,为BIGINT类型。create语句通过Mycat执行时会自动加上这个字段,其他情况下需要手工添加。1为开启、0为关闭,Mycat从1.6版本开始支持此属性。配置如下:


0

全局表一致性检测功能的使用说明及步骤如下。

(1)在所有全局表中增加一个BIGINT类型的内部列,列名为_mycat_op_time(alter table t add column_mycat_op_time bigint [not null default 0]),同时建议在该列建立索引(alter table t add index_op_idx(_mycat_op_time))。

(2)在对全局表进行crud时,可以将内部列当作不存在,建议不要对内部列进行update、insert等操作,否则会在Log日志中出现警告语句“不用操作内部列”。

(3)因为全局表中多了一个内部列,所以在对全局表进行 insert 时必须带有列名,意味着SQL插入的语句必须是insert into t(id,name)values(xx,xx),而不能使用insert into t values(xx,xx),否则会报列数不对的异常。这样的操作可能给开发工程师带来不便,将来会改善这个问题。

2.2.10、useSqlStat属性

开启SQL实时统计,1为开启、0为关闭。配置如下:


0

3、 schema.xml配置文件

schema.xml作为Mycat中重要的配置文件之一,涵盖了Mycat的逻辑库、表、分片规则、分片节点及数据源。

3.1、schema标签


schema标签用于定义Mycat实例中的逻辑库。Mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分不同的逻辑库,如果不配置schema标签,则所有的表配置都会属于同一个默认的逻辑库。





如上所示配置了两个不同的逻辑库,逻辑库的概念等同于MySQL数据库中的Database概念,我们在查询逻辑库中的表时,需要切换到该逻辑库下才可以查询其中的表。

3.1.1、dataNode属性

该属性用于绑定逻辑库到具体的Database上,







3.1.2、checkSQLschema属性

当该值设置为true时,如果我们执行语句 ** select*from TESTDB.travelrecord; ** ,则Mycat会把schema字符去掉,把SQL语句修改为**select*from travelrecord;** 可避免发送到后端数据库执行时报“**(ERROR 1146(42S02):Table'testdb.travelrecord'doesn't exist)”错误。

不过,即使设置该值为true,如果语句所带的schema名字不是schema指定的名字,例如** select*from db1.travelrecord;** ,那么Mycat并不会删除db1这个字符串。如果没有定义该库,则会报错,在SQL语句中最好不带这个字段。

3.1.3、sqlMaxLimit属性

当该属性设置为某个数值时,每次执行的SQL语句如果没有加上limit语句,MyCat也会自动在 limit 语句后面加上对应的数值。例如设置值为 100,则执行** select*from TESTDB.travelrecord;** 的效果和执行** select*from TESTDB.travelrecord limit 100;** 的效果一样。

如果不设置该值,则Mycat默认会把查询到的信息全部返回,所以在正常使用的过程中还是建议设置该值,避免过多的数据返回。

当然,如果在SQL语句中也显式地指定了limit的大小则不受该属性的约束。需要注意的是,如果运行SQL语句的schema为非拆分库的,那么该属性不会生效,需要手动在SQL语句后面添加limit。

3.2、table标签

table标签定义了Mycat中的逻辑表,所有需要拆分的表都需要在table标签中定义。


3.2.1、name属性

定义逻辑表的名称,如同我们在数据库中执行create table语句的表名一样,同一个schema标签中定义的table的名字必须唯一。

3.2.2、dataNode属性

定义逻辑表所属的dataNode,该属性的值需要与dataNode标签中name属性的值相互对应。如果需要定义过多的dn,则可以使用如下方法减少配置


3.2.3、rule属性

该属性用于指定逻辑表要使用的规则的名字,规则的名字在 rule.xml 中定义,必须与tableRule标签中name属性的值一一对应。

3.2.4、ruleRequired属性

该属性用于指定表是否绑定分片规则,如果配置为true,但没有配置具体的rule,则程序会报错。

3.2.5、primaryKey属性

逻辑表对应真实表的主键,例如:分片的规则是使用非主键进行分片,那么在使用主键查询时,就会发送查询语句到所有配置的dn上;如果使用该属性配置真实表的主键,那么Mycat会缓存主键与具体dn的信息,再次使用主键进行查询时就不会进行广播式的查询了,而是直接把 SQL 语句发送到具体的 dn。但是尽管配置了该属性,如果缓存并没有命中,则还是会把该SQL语句发送给所有的dn执行来获得数据。

3.2.6、type属性

该属性定义了逻辑表的类型,目前逻辑表只有“全局表”和“普通表”两种类型。

· 全局表:type的值是global,代表全局表。

· 普通表:不指定该值为global的所有表。

3.2.7、autoIncrement属性

MySQL对于非自增长主键使用last_insert_id()是不会返回结果的,只会返回0。所以,只有对定义了自增长主键的表使用last_insert_id()才可以返回主键的值。Mycat目前提供了自增长主键功能,但是如果对应的 MySQL 节点上的表没有定义 auto_increment,那么在 Mycat 层调用last_insert_id()也是不会返回结果的。

由于insert操作时没有带入分片键,所以Mycat会先取下这个表对应的全局序列,然后赋值给分片键。

如果要使用这个功能,则最好配合数据库模式的全局序列。使用 autoIncrement="true"指定这个表使用自增长主键,这样Mycat才不会抛出“分片键找不到”的异常。使用autoIncrement="false"来禁用这个功能,autoIncrement的值默认为false。

3.2.8、needAddLimit属性

指定表是否需要自动在每个语句的后面加上limit限制。由于使用了分库分表,所以数据量有时会特别大。如果恰巧忘记加上数量限制,那么查询所有的数据需要一定的时间。

所以,添加该属性后Mycat将会自动为我们在查询语句后面加上LIMIT 100。如果语句中有limit限制,则不会重复添加。该属性默认为true,你也可以把该值设置为false来禁用默认的行为。

3.3、childTable标签

childTable标签用于定义E-R分片的子表,通过标签上的属性与父表进行关联。





3.3.1、name属性

定义子表的名称。

3.3.2、joinKey属性

插入子表时会使用这个值查找父表存储的数据节点。

3.3.3、parentKey属性

parentKey为与父表建立关联关系的列名。程序首先获取 joinKey的值,再通过parentKey属性指定的列名产生查询语句,通过执行该语句得知父表存储在哪个分片上,从而确定子表存储的位置。

3.3.4、primaryKey属性

同table标签所描述的。

3.3.5、needAddLimit属性

同table标签所描述的。

3.4、dataNode标签

dataNode标签定义了Mycat中的数据节点,也就是我们通常所说的数据分片。一个dataNode标签就是一个独立的数据分片。

如下所示为使用名为localhost1的数据库实例上的db1物理数据库组成一个数据分片,我们通过名字dn1标识这个分片。

dataNode标签的相关属性如表所示:

3.4.1、name属性

定义数据节点的唯一名字,我们需要在table标签上应用这个名字,来建立表与分片的对应关系。

3.4.2、dataHost属性

该属性用于定义该分片所属的数据库实例,属性值引用自 dataHost 标签上定义的 name属性。

3.4.3、database属性

该属性用于定义该分片所属数据库实例上的具体的库,这里使用两个维度来定义分片:实例+具体的库。因为每个库上的表结构是一样的,所以这样就可以轻松地对表进行水平拆分。

3.5、dataHost标签

作为schema.xml中的最后一个标签,该标签在Mycat逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离和心跳语句。

writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
select user()
password="root">

3.5.1、name属性

唯一标识dataHost标签,供上层标签使用。

3.5.2、maxCon属性

指定每个读写实例连接池的最大连接数。内嵌标签writeHost、readHost都会使用这个属性的值来实例化连接池的最大连接数。

3.5.3、minCon属性

指定每个读写实例连接池的最小连接数,初始化连接池的大小。

3.5.4、balance属性

负载均衡类型,目前的取值有如下4种。

· balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

· balance="1":全部的readHost与stand by writeHost都参与select语句的负载均衡,简而言之,当为双主双从模式(M1→S1,M2→S2,并且 M1 与 M2 互为主备)时,在正常情况下,M2、S1和S2都参与select语句的负载均衡。

· balance="2":所有的读操作都随机地在writeHost、readHost上分发。

· balance="3":所有的读请求都随机分发到writeHost对应的readHost上执行,writeHost不负担读压力,注意balance=3只在Mycat 1.4及之后的版本中有,在Mycat 1.3中没有。

3.5.5、writeType属性

负载均衡类型目前的取值有两种。

· writeType="0":所有的写操作都发送到配置的第1个writeHost上,writeHost1挂了则切到 writeHost2 上,重新恢复 writeHost1 节点后,不会再切回来,还是以 writeHost2为准,切换记录在配置文件dnindex.properties中。

· writeType="1":所有的写操作都随机地发送到配置的writeHost上,Mycat 1.5版本以后不再推荐使用该值。

3.5.6、switchType属性

·-1表示不自动切换。

· 1为默认值,表示自动切换。

· 2表示基于MySQL主从同步的状态决定是否切换,心跳语句如下:

· 3表示基于MySQL Galary Cluster的切换机制(适合集群,Mycat 1.4.1及以上版本支持),心跳语句如下:

3.5.7、tempReadHostAvailable属性

如果配置了writeHost属性,下面的readHost依旧可用,则默认值为0。

3.6、heartbeat标签

这个标签内指明了用于后端数据库进行心跳检查的语句。

3.7、writeHost标签、readHost标签

这两个标签都指定Mycat后端数据库的相关配置,用于实例化后端连接池。唯一的不同是,writeHost指定写实例,readHost指定读实例,组成这些读写实例来满足系统的要求。

在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost也将不可用;另一方面,Mycat会自动检测到writeHost宕机,并切换到备用的writeHost上。

3.7.1、host属性

用于标识不同的实例,对于writeHost,我们一般使用*M1;对于readHost,我们一般使用*S1。

3.7.2、url属性

后端实例的连接地址,如果使用native的dbDriver,则一般为address:port形式;如果使用JDBC 或其他 dbDriver,则需要特殊指定。在使用 JDBC 时,则可以写为 jdbc:MySQL://localhost:3306/。

3.7.3、user属性

后端存储实例的用户名。

3.7.4、password属性

后端存储实例的密码。

3.7.5、weight属性

在readHost中作为读节点的权重(Mycat在1.4版本以后才有)。

3.7.6、usingDecrypt属性

同server.xml中usingDecrypt的配置。

4、sequence配置文件

在实现分库分表的情况下,数据库自增主键已经无法保证在集群中是全局唯一的主键,因此,Mycat提供了全局sequence,并且提供了本地配置、数据库配置等多种实现方式。

4.1、本地文件方式

采用该方式,Mycat将sequence配置到classpath目录的sequence_conf.properties文件中。

在sequence_conf.properties文件中做如下配置:

HOTNEWS.HISIDS=
HOTNEWS.MINID=1001
HOTNEWS.MAXID=2000
HOTNEWS.CURID=1000

其中HISIDS表示使用过的历史分段(一般无特殊需要则可不配置),MINID表示最小的ID值,MAXID表示最大的ID值,CURID表示当前的ID值。

要启用这种方式,则首先需要在server.xml中配置如下参数:


0

注意:sequnceHandlerType配置为0,表示使用本地文件方式。


insert into table1(id,name) values(next value for MYCATSEQ_GLOBAL,'test');

采用这种方式的缺点是Mycat重新发布后,配置文件中的sequence会恢复到初始值;优点是本地加载且读取速度较快。

4.2、数据库方式

在数据库中创建一张名为 sequence 的表,有 sequence 的当前值(current_value)、步长(increment int类型,指每次读取多少个sequence,假设为K)等信息。

sequence的获取步骤如下。

(1)初次使用sequence时,根据传入的sequence名称,从数据库表中读取current_value、increment到Mycat中,并将数据库中的current_value修改为current_value+increment的值。

(2)Mycat将读取到的current_value+increment作为本次使用的sequence值,在下次使用时,sequence自动加1,当使用increment次后,执行与步骤1相同的操作。

(3)Mycat负责维护这张表,用到那些sequence时,只需要在这张表中插入一条记录即可。若某次读取的sequence没有用完系统就宕机了,则本次已经读取sequence且未使用的值将会被丢弃。

要启用这种方式,则需要在server.xml中配置如下参数:


1

注意:sequnceHandlerType需要配置为1,表示使用数据库方式生成sequence。

数据库配置如下:

(1)创建存放MYCAT_SEQUENCE的表:

create table MYCAT_SEQUENCE (name varchar(50) not null, current_value int not null , increment int not null default 100,primary key(name) )engine = InnoDB;

name、current_value和increment分别是sequence的名称、当前value和增长步长。increment可理解为Mycat从数据库中批量读取100个(默认值)sequence来使用,用完这些值后,再从数据库中读取。

插入一条sequence语句:


insert into MYCAT_SEQUENCE (name ,current_value ,increment ) values ('GLOBAL',100000,100)

(2)创建相关的function

4.3、本地时间戳方式

4.4、其他方式

4.4.1、使用catlet注解方式

4.4.2、也可以使用ZooKeeper方式实现

4.5、自增长主键

Mycat自增长主键和返回生成主键ID的实现如下:

(1)MySQL本身对非自增长主键使用last_insert_id()只会返回0。

(2)MySQL对定义自增长的主键才可以用last_insert_id()返回主键的值。

Mycat目前提供了自增长主键功能,但是如果对应的 MySQL 节点上的数据表没有定义auto_increment,那么在Mycat层调用last_insert_id()也是不会返回结果的。

正确的配置方式如下:

(1)MySQL定义自增长主键。

(2)Mycat定义主键自增。

在table标签中增加autoIncrement="true":

(3)Mycat对应sequence_db_conf.properties增加相应的设置。

(4)在数据库的mycat_sequence表中增加TABLE1表的sequence记录。

5、zk-create.yaml配置文件

在介绍配置之前,先介绍几个概念。Mycat Zone指的是分布于不同地域(Zone)的Mycat Cluster,Zone的命名建议用地理位置来标识,比如北京联通机房1。Cluster是Mycat集群,一个Cluster包含一个或多个Mycat Server。一般来讲,一个Zone都有一组主备Mycat负载均衡器LB,LB与同一中心内的Mycat Cluster组成一对多关系,即一个LB可以服务一个中心内的所有Cluster的负载均衡请求,也可以是多个LB,每个负担不同的Mycat Cluster的流量。此外,建议每个LB都有一个Backup,Backup平时并不连接Mycat Cluster,但监测到LB Master下线以后,就立即开始连接Mycat Cluster并开始工作。它们的关系大概可以用一组箭头来表示:Zone→Mycat Cluster→Mycat Server→MySQL,如图所示:

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
湖人主帅操作被质疑,詹姆斯需放权,前全明星后卫被忽视?

湖人主帅操作被质疑,詹姆斯需放权,前全明星后卫被忽视?

谢说篮球
2024-11-30 17:20:35
官宣不足三月就分手?未出世的孩子,是压死黄晓明的最后一根稻草

官宣不足三月就分手?未出世的孩子,是压死黄晓明的最后一根稻草

橘子大娱社
2024-11-29 20:50:02
事关213万北京市民!换领身份证要注意这些事——

事关213万北京市民!换领身份证要注意这些事——

BRTV新闻
2024-11-30 13:37:51
湖人93-101雷霆!无奈的不是输球,是詹姆斯评价新秀,就夸他一人

湖人93-101雷霆!无奈的不是输球,是詹姆斯评价新秀,就夸他一人

鱼崖大话篮球
2024-11-30 18:12:12
全卖光了,贵州一家人套现42亿,把麻烦留给了9万股民

全卖光了,贵州一家人套现42亿,把麻烦留给了9万股民

蜉蝣说
2024-11-12 17:00:01
1978年一青年高考被拒,之后身份震动北京,10年后成最年轻副省长

1978年一青年高考被拒,之后身份震动北京,10年后成最年轻副省长

阿胡
2024-01-05 13:18:14
李佩霞:大量生活照被扒,美腿抢镜,丈夫始终没露面,身份成谜!

李佩霞:大量生活照被扒,美腿抢镜,丈夫始终没露面,身份成谜!

来条娱吃
2024-11-08 11:16:49
我国“上将”军衔每个月薪资多少,待遇怎样?没有你想的那么夸张

我国“上将”军衔每个月薪资多少,待遇怎样?没有你想的那么夸张

世界就是这么精彩
2024-09-08 16:45:29
巴沙尔也麻烦了 叙利亚自由军攻入阿勒颇

巴沙尔也麻烦了 叙利亚自由军攻入阿勒颇

桑未落
2024-11-29 11:29:33
湖人93-101不敌雷霆,赛后遭遇四个坏消息,詹眉+雷迪克全曝弊端

湖人93-101不敌雷霆,赛后遭遇四个坏消息,詹眉+雷迪克全曝弊端

篮球资讯达人
2024-11-30 14:08:02
泰晤士报:沙特获得2034世界杯主办权可能没有投票而是鼓掌通过

泰晤士报:沙特获得2034世界杯主办权可能没有投票而是鼓掌通过

直播吧
2024-11-30 10:34:14
曼奇尼:如果能重来我不会离开意大利去沙特,那是个错误决定

曼奇尼:如果能重来我不会离开意大利去沙特,那是个错误决定

直播吧
2024-11-30 15:48:07
人形机器人概念股:六大企业引领未来智能新篇章

人形机器人概念股:六大企业引领未来智能新篇章

小佩棋不蹦迪
2024-11-30 15:05:17
“全国优秀县委书记”于伟东,拟任新职

“全国优秀县委书记”于伟东,拟任新职

鲁中晨报
2024-11-30 16:16:08
CCTV5直播,辽宁男篮冲4连胜追榜首,深圳不可忽视,张镇麟将体测

CCTV5直播,辽宁男篮冲4连胜追榜首,深圳不可忽视,张镇麟将体测

替补席看球
2024-11-30 17:39:17
河南一场婚礼中途长时间停电,400多人离席家长气哭“脸丢尽了”,律师:可主张赔偿

河南一场婚礼中途长时间停电,400多人离席家长气哭“脸丢尽了”,律师:可主张赔偿

北青网-北京青年报
2024-11-30 16:56:09
“人老3个坎,熬过就长寿”,“三坎”是哪3年?老年人要注意!

“人老3个坎,熬过就长寿”,“三坎”是哪3年?老年人要注意!

今日养生之道
2024-11-29 15:54:56
泽连斯基首次表态:领土先让俄罗斯占着,不过…

泽连斯基首次表态:领土先让俄罗斯占着,不过…

观察者网
2024-11-30 09:19:53
43岁范冰冰现状:“大膀子”让人不敢认,把男主持人比得像“小弟”

43岁范冰冰现状:“大膀子”让人不敢认,把男主持人比得像“小弟”

圈里的甜橙子
2024-11-29 19:09:39
上海最新人事:金彪任崇明区副区长

上海最新人事:金彪任崇明区副区长

上观新闻
2024-11-30 14:36:05
2024-11-30 19:52:49
原克技术
原克技术
专注于分享前沿技术和相关文章
22文章数 229关注度
往期回顾 全部

科技要闻

官宣!华为+广汽,联手造车!

头条要闻

90后富豪花4500万买一根香蕉吃 曾连3次放巴菲特鸽子

头条要闻

90后富豪花4500万买一根香蕉吃 曾连3次放巴菲特鸽子

体育要闻

历史第一!詹姆斯再创里程碑宝刀不老

娱乐要闻

恶意炒作!李行亮麦琳和好后口碑崩塌

财经要闻

雪松爆雷前实控人张劲在香港抛售房产

汽车要闻

比亚迪方程豹豹8推送首次OTA 新增暴力模式

态度原创

家居
旅游
教育
游戏
公开课

家居要闻

现代设计感 温馨两居室

旅游要闻

驻意大利使馆提醒旅意中国公民注意风险防范

教育要闻

【考研政治】每日考点精炼48

仓鼠版智谋?《Warframe》公布全新PvPvE模式

公开课

一块玻璃,如何改变人类世界?

无障碍浏览 进入关怀版