LVS+MYCAT+读写分离+MYSQL主备同步部署手册

1          配置MYSQL主备同步…. 2

1.1       测试环境… 2

1.2       配置主数据库… 2

1.2.1         编辑my.cnf文件… 2

1.2.2         重启数据库… 2

1.3       锁定主数据库DDL操作… 2

1.4       主备已有数据同步… 2

1.5       停止从服务… 3

1.6       配置备用数据库… 3

1.6.1         编辑my.cnf文件… 3

1.6.2        登录主数据库查看master状态… 3

1.6.3        执行change master to系列命令… 3

1.7       重启从服务… 4

1.8       解锁主数据库… 4

1.9       验证主从同步… 4

2     MYCAT安装与配置…. 4

2.1       MYCAT安装… 4

2.2       参数设置… 4

2.2.1         rule.xml 4

2.2.2         server.xml 5

2.2.3         router.xml 6

2.2.4         schema.xml 6

2.3       启动和使用MyCat. 7

2.3.1         启动MyCat 7

2.3.2         访问MyCat 7

2.3.3         自测… 7

3     KEEPALIVED配置…. 7

4     mycat服务器执行脚本…. 10

5          总体测验…. 11

5.1       网络架构图… 11

5.2       客户机测试环境… 12

5.3       MYSQL主备同步测试… 12

5.4       MYCAT测试… 13

5.4.1         配置mycat主从策略和分片策略… 13

5.4.2         测试mycat连接… 19

5.4.3         测试mycat读写分离… 20

5.4.4         测试mycat数据节点容错… 20

5.4.5         测试mycat节点容错… 21

1      配置MYSQL主备同步

1.1  测试环境

mysql版本:5.6.24;

操作系统版本:Linux-3.13-0-32

主数据库IP:192.168.10.3;

主数据库名:db351353;

备用数据库IP:192.168.10.4;

备用数据库名:db352354。

1.2  配置主数据库

1.2.1           编辑my.cnf文件

#服务器唯一ID,一般取IP最后一段

server_id = 3

#启用二进制日志

log_bin=mysql_bin

#需要备份的数据库名  多个库以逗号分隔

Binlog_do_db =db351353

#若涉及及同步函数或者存储过程需要配置,否则主备会产生异常不能同步

log_bin_trust_function_creators=TRUE

1.2.2           重启数据库

# service myql.server restart

1.3  锁定主数据库DDL操作

mysql> flush tables with read lock;

1.4  主备已有数据同步

用navicat for mysql将主数据库数据同步到备数据库

1.5  停止从服务

mysql>stop slave;

1.6  配置备用数据库

1.6.1           编辑my.cnf文件

#服务器唯一ID,一般取IP最后一段

server_id = 5

1.6.2      登录主数据库查看master状态

mysql>show master status;

1.6.3       执行change master to系列命令

mysql> change master to

master_host=’192.168.10.3′,

master_user=’iom’,–该用户要有Repl_slave_priv权限,没有可用grant replication slave on *.* to ‘iom’@’%’ identified by ‘xf4851213’授权

master_password=’123’,

master_log_file=’mysql_bin.000005’, –根据主服务器show master status出来的File结果填写

master_log_pos=1192; –根据主服务器show master status出来的Position结果填写

1.7  重启从服务

mysql>start slave;

1.8  解锁主数据库

mysql> unlock tables;

1.9  验证主从同步

在备份数据库上执行

mysql>show slave status;

slave_IO_running和slave_SQL_running 为yes。

主数据库新建一个表,往表里插入几条数据,备份数据库可以同步过来表和表中的数据。

2       MYCAT安装与配置

2.1  MYCAT安装

参见 MyCat_In_Action_CN.doc

2.2  参数设置

重点介绍rule.xml schema.xml router.xml server.xml log4j.xml

2.2.1           rule.xml

分片规则配置文件,mycat支持的所有分片规则都在这个文件里。定义一个规则需要两个节点,一个是tableRule,一个是function。

以一致性哈希分片为例,function节点定义了分片规则的实现类与初始化参数和分片规则的算法名称。

属性name为规则算法名称

class为规则实现类

property子节点为初始化规则的参数,使用seed count virtualBucketTimes就可初始化一致性哈希规则

<function name=”murmur” class=”org.opencloudb.route.function.PartitionByMurmurHash”>

<property name=”seed”>0</property><!– 默认是0–>

<property name=”count”>2</property><!– 要分片的数据库节点数量,必须指定,否则没法分片–>

<property name=”virtualBucketTimes”>160</property><!– 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍–>

</function>

tableRule节点定义了分片规则名(注意此处是规则名,前面的function节点的name属性是算法名)rule子节点指定用来分片的数据库表字段和分片算法名,也就是前面的function节点的name属性。

<tableRule name=”sharding-by-murmur”>

<rule>

<columns>id</columns>

<algorithm>murmur</algorithm>

</rule>

</tableRule>

任何自定义的分片规则也可以这样配置

2.2.2           server.xml

此文件用来配置mycat全局参数

<system>节点

<property name=”defaultSqlParser”>druidparser</property>,指定SQL解析器,默认是fdbparser,经测试druidparser效率更高

<property name=”sequnceHandlerType”>1</property>,指定mycat自动序列号生成方式。0:在借助本地文件生成序列号,1:借助数据库生成序列号,更多信息请参考Mycat in action

<property name=”serverPort”>8066</property>指定mycat服务端口号,mycat通过这个端口接收数据库客户端的访问请求。

另外还有一个9066端口没有出现在配置文件中,用来接收mycat监控命令、查询mycat运行状况、重新加载配置文件等。更多信息请参考Mycat in action。

<user>节点

name属性指定mycat用户名

<property name=”password”>password</property><!—用户密码–>

<property name=”schema”>database_name</property><!—数据库名,用客户端建立连接后要操作的数据库名 –>

<property name=”readOnly”>false</property><!—指定是不是只读库–>

可以有多个user节点。

2.2.3           router.xml

<queryRouter schema=”schema”><!—没太搞清楚这个文件的意义,我把schema属性、<name>、<queryNode>都配置成了一样的,而且都与要连接的数据库名保持一致 –>

<!—schema的值会在schema.xml用到 –>

<dataNode>

<name>dataNodeName</name>

<queryNode>queryNode</queryNode>

</dataNode>

</queryRouter>

2.2.4           schema.xml

<schema name=”TESTDB” checkSQLschema=”true” sqlMaxLimit=”100″>

其中checkSQLschema表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 TESTDB,则可能写为select * from TESTDB.aaa,此时会自动过滤TESTDB,SQL变为select * from aaa,若不会出现上述写法,则可以关闭属性为false

<schema name=”schema”><!—就是router.xml命名的schema–>

<table name=”table_name” <!—要与它代理的数据库物理表名一致–>

primaryKey=”pk” <!—被用作主键的字段名–>

dataNode=”dataNodeName” <!—下面将会出现的dataNode节点–>

rule=”sharding-by-murmur”<!—rule.xml的tableRule节点name属性值,指定这个节点表示用这个规则执行分片–>

authIncrement=”true”><!—插入数据时是否由mycat自动生成分片,指定true时,如果insert sql内没有指定主键的值,而主键又是自增长的,mycat会自动插入生成主键的代码,并在生成主键时按照指定的分片规则将数据保存到数据库–>

<!—mycat有自己的自增序列命令,更多信息请参考Mycat in action–>

<!—此处可以指定多个table子节点,一个table节点表示一张表–>

</schema>

<dataNode name=”dataNodeName” dataHost=”localhost“ database=”database”/>

<!—分别是节点名,就是schema节点里的table子节点dataNode属性

dataHost是节点主机名,在下面要出现的dataHost定义

database数据库名

–>

<dataHost name=”localhost” maxCon=”1000” minCon=”10” balance=”0”

wrteType=”0” dbType=”mysql” dbDriver=”native>

<!—name属性是dataHost名

maxCon minCon分别是连接到物理数据库的最大最小连接数

dbType指定数据库类型

dbDriver只有两个取值,分别是native和jdbc。native为mycat自带驱动,只支持mysql,jdbc为使用jdbc实现连接数据库,指定什么数据库的jdbc驱动就可以访问什么数据库,更灵活,但效率不如native

可以有多个dataHost节点

–>

<heartbeat>select 1</heartbeat><!—保持连接不断的心跳sql–>

<writeHost host=”hostM1” url=”localhost:3306” user=”user” password=”password”>

<reeadHost host=”hostS1” url=”localhost:3306″ user=”root” password=”123456″/>

</writeHost>

<!—可以有多个writeHost,一个writeHost里要吧有多个readHost–>

</dataHost>

2.3  启动和使用MyCat

2.3.1           启动MyCat

# mycat console

2.3.2           访问MyCat

访问MyCat同访问MySQL的方式完全相同, 常用访问方式如下:

mysql –h 127.0.0.1 –u test –p test -P8066 –DTESTDB

2.3.3           自测

可以自己编写一些语句进行测试,看是否按规则进行分配。

3      KEEPALIVED配置

编辑/etc/keepalived/keepalived.cnf文件,红色字体是为mycat新加的

global_defs {

router_id LVS_MASTER   #BACKUP上修改为LVS_BACKUP

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.10.252       #virtual server

192.168.10.253       #mycat

}

}

virtual_server 192.168.10.252 8080 {

delay_loop 6

lb_algo rr

lb_kind DR

#lb_kind NAT

#    persistence_timeout 3

protocol TCP

real_server 192.168.10.3 8080 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 8080

}

}

real_server 192.168.10.4 8080 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 8080

}

}

}

virtual_server 192.168.10.253 8066 {

delay_loop 6

lb_algo rr

lb_kind DR

#lb_kind NAT

#    persistence_timeout 3

protocol TCP

real_server 192.168.10.3 8066 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 8066

}

}

real_server 192.168.10.4 8066 {

weight 3

TCP_CHECK {

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

connect_port 8066

}

}

}

4      mycat服务器执行脚本

lvs_mycat.sh脚本内容:

#!/bin/bash

VIP=192.168.10.253

case “$1” in

start)

ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

/sbin/route add -host $VIP dev lo:0

echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce

echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore

echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p >/dev/null 2>&1

echo “lvs_vip server start ok!”;;

stop)

ifconfig lo:0 down

/sbin/route del $VIP >/dev/null 2>&1

echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo “0” >/proc/sys/net/ipv4/conf/lo/arp_announce

echo “0” >/proc/sys/net/ipv4/conf/all/arp_ignore

echo “0” >/proc/sys/net/ipv4/conf/all/arp_announce

echo “lvs_vip server stoped.”;;

*)

echo “arg start|stop.”

exit 1

esac

exit 0

在脚本所在目录执行#./lvs_mycat.sh start;脚本主要作用是为服务器的回环接口设定虚拟IP,并屏蔽该IP的arp请求和应答。

5      总体测验

5.1  网络架构图

客户机IP:192.168.10.1

负载机VIP:192.168.10.253

主mycat和mysql1在同一个服务器上,IP为:192.168.10.3

从mycat和mysql2在同一个服务器上,IP为:192.168.10.4

mysql1上创建两个数据库db351353(主),db352354(备),mysql2上创建两个数据库db352354(主),db351353(备);mysql2上db351353是mysql1上db351353的备用库,mysql1上的db352354是mysql2上db352354的备用库。

5.2  客户机测试环境

安装navicat for mysql,创建5个数据连接:

  • 直连mysql1数据库 连接名:mysql1 ip:168.10.3 端口:3306
  • 直连mysql2数据库 连接名:mysql2 ip:168.10.4 端口:3306
  • 直连主mycat 连接名:mycat1 ip:168.10.3 端口:8066
  • 直连从myca2 连接名:mycat2 ip:168.10.4 端口:8066
  • 连接lvs 连接名:keepalived ip:168.10.253 端口:8066

5.3  MYSQL主备同步测试

在mysql1上的db351353 添加数据:

DROP TABLE IF EXISTS `so`;

CREATE TABLE `so` (

`so_nbr` int(8) NOT NULL DEFAULT ‘0’,

`local_net_id` int(8) DEFAULT NULL,

`proc_inst_id` int(8) DEFAULT NULL,

`prod_id` varchar(8) DEFAULT NULL,

PRIMARY KEY (`so_nbr`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `so` VALUES (‘1’, ‘351’, null, null);

在mysql2上的db352354添加数据:

DROP TABLE IF EXISTS `so`;

CREATE TABLE `so` (

`so_nbr` int(8) NOT NULL DEFAULT ‘0’,

`local_net_id` int(8) DEFAULT NULL,

`proc_inst_id` int(8) DEFAULT NULL,

`prod_id` varchar(8) DEFAULT NULL,

PRIMARY KEY (`so_nbr`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `so` VALUES (‘2’, ‘352’, null, null);

在各自的备份库上能查到对应的数据,可参考1.9

5.4  MYCAT测试

5.4.1           配置mycat主从策略和分片策略

按so表本地网水平分片,351和353放到节点dn1,352和354放到节点dn2。

5.4.1.1        schema.xml内容:

红色字体为注释,实际文件里没有,注意dn2节点的主从连接库顺序,按说明应该配在前面的写入数据库为主数据库,后面的写入数据库为从数据库,但dn2节点却正好相反,原因待查。

<?xml version=”1.0″?>

<!DOCTYPE mycat:schema SYSTEM “schema.dtd”>

<mycat:schema xmlns:mycat=”http://org.opencloudb/”>

<schema name=”TESTDB” checkSQLschema=”false” sqlMaxLimit=”100″>

<table name=”prod” primaryKey=”prod_id” type=”global”  dataNode=”dn1,dn2″ />

<table name=”so” primaryKey=”so_nbr” dataNode=”dn1,dn2″

rule=”sharding-by-intfile”>

</table>

</schema>

<dataNode name=”dn1″ dataHost=”hostdn1″ database=”db351353″ />

<dataNode name=”dn2″ dataHost=”hostdn2″ database=”db352354″ />

<dataHost name=”hostdn1″ maxCon=”1000″ minCon=”10″ balance=”1″

writeType=”0″ dbType=”mysql” dbDriver=”native”>

<heartbeat>select user()</heartbeat>

<!– can have multi write hosts –>

<writeHost host=”hostM1″ url=”192.168.10.3:3306″ user=”iom”–dn1节点主连接库

password=”xf4851213″>

<!–                   <readHost host=”hostS1″ url=”192.168.10.4:3306″ user=”iom” password=”123″ /> –>

</writeHost>

<writeHost host=”hostM2″ url=”192.168.10.4:3306″ user=”iom”–dn1节点从连接库

password=”123″/>

</dataHost>

<dataHost name=”hostdn2″ maxCon=”1000″ minCon=”10″ balance=”1″

writeType=”0″ dbType=”mysql” dbDriver=”native”>

<heartbeat>select user()</heartbeat>

<writeHost host=”host2M1″ url=”192.168.10.3:3306″ user=”iom” –dn2节点从连接库

password=”xf4851213″>

<!–                    <readHost host=”hostS1″ url=”192.168.0.3:3306″ user=”iom” password=”xf4851213″ />–>

</writeHost>

<writeHost host=”host2M2″ url=”192.168.10.4:3306″ user=”iom”–dn2节点主连接库

password=”123″/>

</dataHost>

</mycat:schema>

5.4.1.2        rule.xml内容

红色字体为注释,实际文件里没有。

<?xml version=”1.0″ encoding=”UTF-8″?>

<!–

– Licensed under the Apache License, Version 2.0 (the “License”);

– you may not use this file except in compliance with the License.

– You may obtain a copy of the License at

–      http://www.apache.org/licenses/LICENSE-2.0

– Unless required by applicable law or agreed to in writing, software

– distributed under the License is distributed on an “AS IS” BASIS,

– WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

– See the License for the specific language governing permissions and

– limitations under the License.

–>

<!DOCTYPE mycat:rule SYSTEM “rule.dtd”>

<mycat:rule xmlns:mycat=”http://org.opencloudb/”>

<tableRule name=”rule1″>

<rule>

<columns>id</columns>

<algorithm>func1</algorithm>

</rule>

</tableRule>

<tableRule name=”rule2″>

<rule>

<columns>user_id</columns>

<algorithm>func1</algorithm>

</rule>

</tableRule>

<tableRule name=”sharding-by-intfile”>

<rule>

<columns>local_net_id</columns> –按本地网分片

<algorithm>hash-int</algorithm>

</rule>

</tableRule>

<tableRule name=”auto-sharding-long”>

<rule>

<columns>id</columns>

<algorithm>rang-long</algorithm>

</rule>

</tableRule>

<tableRule name=”mod-long”>

<rule>

<columns>id</columns>

<algorithm>mod-long</algorithm>

</rule>

</tableRule>

<tableRule name=”sharding-by-murmur”>

<rule>

<columns>id</columns>

<algorithm>murmur</algorithm>

</rule>

</tableRule>

<function name=”murmur” class=”org.opencloudb.route.function.PartitionByMurmurHash”>

<property name=”seed”>0</property><!– 默认是0–>

<property name=”count”>2</property><!– 要分片的数据库节点数量,必须指定,否则没法分片–>

<property name=”virtualBucketTimes”>160</property><!– 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍–>

<!–

<property name=”weightMapFile”>weightMapFile</property>

节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 –>

<!–

<property name=”bucketMapPath”>/etc/mycat/bucketMapPath</property>

用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 –>

</function>

<function name=”hash-int” class=”org.opencloudb.route.function.PartitionByFileMap”>

<property name=”mapFile”>partition-hash-int.txt</property>

</function>

<function name=”rang-long” class=”org.opencloudb.route.function.AutoPartitionByLong”>

<property name=”mapFile”>autopartition-long.txt</property>

</function>

<function name=”mod-long” class=”org.opencloudb.route.function.PartitionByMod”>

<!– how many data nodes  –>

<property name=”count”>3</property>

</function>

<function name=”func1″ class=”org.opencloudb.route.function.PartitionByLong”>

<property name=”partitionCount”>8</property>

<property name=”partitionLength”>128</property>

</function>

</mycat:rule>

5.4.1.3        partition-hash-int内容:

红色字体为注释,实际文件里没有。

351=0         –分配到dn1节点

352=1          –分配到dn2节点

353=0

354=1

5.4.2           测试mycat连接

客户机navicat打开mycat1连接,能看到一个数据库TESTDB,数据库中能查到db351353和db352354两个数据库的所有数据。mycat2连接亦同。

5.4.3           测试mycat读写分离

测试目的:由4.4.1.1可知,dn1连接的主数据库是mysql1的db351353,从数据库是mysql2的db351353,balance值为1,此模式下从数据库也为读数据库。mycat增删改操作应通过mysql1的db351353进行,读操作应通过mysql2的db351353进行。

测试方法:客户机通过navicat的mysql2连接更改db351353的so表记录,这样db351353在mysql1和mysql2上有两份不同的数据,在客户机navicat的mycat1连接上查看so表本地网为351的数据是否与mysql2相同,如相同则测试通过。测试过后要恢复mysql2上db351353的数据,以免影响剩余的测试。

5.4.4           测试mycat数据节点容错

测试目的:由4.4.1.1可知,dn1连接的主数据库是mysql1的db351353,从数据库是mysql2的db351353,如果mysql1服务挂掉,dn1节点的增删改操作应自动切换到mysql2的db351353。

测试方法:在mysql1主机上执行 #service mysql.server stop; 在客户机navicat的mycat1连接上看是否能正常查询so表数据,如果查询正常,修改so表本地网为351的数据,在客户机navicat的mysql2连接上查看db351353的so表数据是否和修改的一样,如果一样则测试通过。

注意:如果mysql1服务重新启动,则mysql1的db351353为从数据库,不会重新变为主数据库。

5.4.5           测试mycat节点容错

测试目的:mycat1和mycat2单个节点宕掉,不影响客户机使用数据库。

测试方法:客户机navicat使用keepalived连接,能正常查询和增删改数据。在mycat1上执行#mycat stop;客户机keepalived连接仍能正常使用。mycat1上执行#mycat console,mycat2上执行#mycat stop,客户机keepalived连接能正常使用。mycat2上执行#mycat console,客户机keepalived连接能正常使用,且数据请求路由和keepalived所配lb_algo策略相同。

LVS+MYCAT+读写分离+MYSQL主备同步部署手册的更多相关文章

  1. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  2. LVS+MYCAT读写分离+MYSQL同步部署手册(第三版)

    1      配置MYSQL主备同步 1.1    测试环境 mysql版本:5.6.24: 操作系统内核版本:Linux-3.13-0-32 主数据库IP:192.168.10.3: 主数据库名:d ...

  3. Mycat实现读写分离,主备热切换

    实验环境:ubutu server 14 Master IP:172.16.34.212 Slave IP:172.16.34.34.156 Mycat server IP:172.16.34.219 ...

  4. MyCat读写分离+MySql主从(一主一从)

    数据库一直在项目担当着一位核心的角色,是所有项目结构中的底层,说白了,我们程序员进行项目开发都是在和数据打交道,而数据都是保存在数据库中,如mysql.oracle.postgresql等等,如果一个 ...

  5. MySQL主备同步延迟

    今天看到mycat的日志,发现在wrapper.log中频繁warning:slave延迟23006秒 查看数据指标: show engine innodb status正常,而且slave的拷贝点在 ...

  6. mysql主从同步+mycat读写分离+.NET程序连接mycat代理

    背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...

  7. Mysql之Mycat读写分离及分库分表

    ## 什么是mycat ```basic 1.一个彻底开源的,面向企业应用开发的大数据库集群 2.支持事务.ACID.可以替代MySQL的加强版数据库 3.一个可以视为MySQL集群的企业级数据库,用 ...

  8. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  9. MySQL高可用(一)主备同步:MySQL是如何保证主备一致的

    主备同步,也叫主从复制,是MySQL提供的一种高可用的解决方案,保证主备数据一致性的解决方案. 在生产环境中,会有很多不可控因素,例如数据库服务挂了.为了保证应用的高可用,数据库也必须要是高可用的. ...

随机推荐

  1. JavaScript选项卡/页签/Tab的实现

    选项卡,也称页签,英文用Tab(Module-Tabs)表示.Tab将不同的内容重叠放在一个布局块内,重叠的内容区里每次只有其中一个是可见的. Tab可以在相同的空间里展示更多的信息,它把相似的主题分 ...

  2. 关于 RTL8723BS 同时开启 STA/AP 模式

    最近接到一个调试 wifi 驱动的任务,使用的是 rtl8723bs 芯片组.要求是让无线设备工作在 station 模式的时候同时开启一个 ap 热点.简单来讲就是连接其他 wifi 的同时发出一个 ...

  3. [PHP]Yii2框架的坑

    [PHP]Yii2框架的坑.md-/Users/zjh/Documents/我的文章/[PHP]Yii2框架的坑 html{font-family: sans-serif;-ms-text-size- ...

  4. instanceof

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例. instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. result ...

  5. 配置WebSite的IIS时遇到的问题与解决方法

    http://www.cnblogs.com/mingmingruyuedlut/archive/2011/11/04/2235630.html#commentform

  6. u3d_shader_surface_shader_2

    http://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html http://my.oschina.net/u/138823/blog/181 ...

  7. S2结业考试的第一次测验

    错题分析: 1:java中的错误处理是通过异常处理模型来实现的,那么异常处理模块能处理的错误是: A:运行时错误 B:逻辑错误 C:语法错误 D:内部错误 正确答案是:A 解析:运行时异常都是Runt ...

  8. koala编译scss文件时不支持中文字体的解决方案

    第一种方案:在scss文件第一行加上这行代码@charset "utf-8"; 第二种方案: scss文件编译时候使用ruby环境,出现 Syntax error: Invalid ...

  9. http应用优化和加速说明-负载均衡

    负载均衡技术       现代企业信息化应用越来越多的采用B/S应用架构来承载企业的关键业务,因此,确保这些任务的可靠运行就变得日益重要.随着越来越多的企业实施数据集中,应用的扩展性.安全性和可靠性也 ...

  10. Debian 8.2 下安装MySQL5.7.9 Generic Binaries

    安装过程参考了Installing MySQL on Unix/Linux Using Generic Binaries 首先检查是否安装libaio shell> apt-cache sear ...