MongoDBV3.0.7版本(shard+replica)集群的搭建及验证
集群的模块介绍:




环境规划:
端口及安装路径规划:
用途 | IP | 端口 | 备注 | 安装路径 |
ConfigeServer | 172.16.16.120 | 30001 | /db/configS | |
172.16.16.121 | 30001 | /db/configS | ||
172.16.16.122 | 30001 | /db/configS | ||
share1 | 172.16.16.124 | 40001 | Shard1主节点 | /db/shard1 |
172.16.16.125 | 40001 | Shard1副本节点 | /db/shard1 | |
172.16.16.126 | 40001 | Shard1仲裁节点 | /db/shard1 | |
share2 | 172.16.16.125 | 40002 | Shard2主节点 | /db/shard2 |
172.16.16.126 | 40002 | Shard2副本节点 | /db/shard2 | |
172.16.16.131 | 40002 | Shard2仲裁节点 | /db/shard2 | |
share3 | 172.16.16.126 | 40003 | Shard3主节点 | /db/shard3 |
172.16.16.131 | 40003 | Shard3副本节点 | /db/shard3 | |
172.16.16.124 | 40003 | Shard3仲裁节点 | /db/shard3 | |
share4 | 172.16.16.121 | 40004 | Shard4主节点 | /db/shard4 |
172.16.16.124 | 40004 | Shard4副本节点 | /db/shard4 | |
172.16.16.125 | 40004 | Shard4仲裁节点 | /db/shard4 | |
mongos | 172.16.16.124 | 50001 | 生产环境中一般直接部署在应用端 | /db/mongos |
172.16.16.125 | 50001 | /db/mongos | ||
172.16.16.126 | 50001 | /db/mongos | ||
172.16.16.131 | 50001 | /db/mongos |
搭建步骤:
下载mongodb(https://www.mongodb.org/downloads ) ,目前的最新版本是 3.0.7
opt]# tar zxvf mongodb-linux-x86_64-rhel55-3.0.7.gz
opt]# mv mongodb-linux-x86_64-rhel55-3.0.7 /usr/local/mongodb
opt]# useradd mongo
opt]# passwd mongo
Changing password for user mongo.
New UNIX password:
BAD PASSWORD: it is too simplistic/systematic
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
opt]# chown -R mongo:mongo /usr/local/mongodb/
opt]# chown -R mongo:mongo /db
创建相关模块存放路径:
创建configeServer目录(172.16.16.120/121/122):
#mkdir -p /db/configS/data & mkdir -p /db/configS/log (存放ConfigServer的数据、日志)
创建shard1目录(172.16.16.124/125/126):
#mkdir -p /db/shard1/data & mkdir -p /db/shard1/log (存放shard1的数据、日志)
创建shard2目录(172.16.16.125/126/131 ):
#mkdir -p /db/shard2/data & mkdir -p /db/shard2/log (存放shard2的数据、日志)
创建shard3目录(172.16.16.126/131/124 ):
#mkdir -p /db/shard3/data & mkdir -p /db/shard3/log (存放shard3的数据、日志)
创建shard4目录(172.16.16.131/124/125 ):
#mkdir -p /db/shard4/data & mkdir -p /db/shard4/log (存放shard4的数据、日志)
创建mongos目录(172.16.16.124/125/126/131)
#mkdir -p /db/mongos/log (由于mongos只做路由使用,不存数据,所以只需要建立log目录)
模块配置及启动:
configServer(172.16.16.120/121/122)配置及服务启动:
#vim /usr/local/mongodb/conf/configServer.conf
#!/bin/bash
systemLog:
destination: file
path: "/db/configS/log/configServer.log" #日志存储位置
logAppend: true
storage:
journal: #journal配置
enabled: true
dbPath: "/db/configS/data" #数据文件存储位置
directoryPerDB: true #是否一个库一个文件夹
engine: wiredTiger #数据引擎
wiredTiger: #WT引擎配置
engineConfig:
cacheSizeGB: #设置为6G,默认为物理内存的一半
directoryForIndexes: true #是否将索引也按数据库名单独存储
journalCompressor: zlib
collectionConfig: #表压缩配置
blockCompressor: zlib
indexConfig: #索引配置
prefixCompression: true
net: #端口配置
port: 30001 #另外两台需要分别修改为30002、30003
processManagement: #配置启动管理方式
fork: true
sharding: #分片配置
clusterRole: configsvr #分片角色
conf]$ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/configServer.conf
mongos(172.16.16.124/125/126/131)配置及服务启动:
#vim /usr/local/mongodb/conf/mongos.conf
#!/bin/bash
systemLog:
destination: file
path: "/db/mongos/log/mongos.log"
logAppend: true
net:
port:
sharding:
configDB: 172.16.16.120:,172.16.16.121:,172.16.16.122:
processManagement:
fork: true
conf]$ /usr/local/mongodb/bin/mongos -f /usr/local/mongodb/conf/mongos.conf
shard1分片+副本集配置及服务启动(172.16.16.124/125/126 ):
#vim /usr/local/mongodb/conf/shard1.conf
#!/bin/bash
systemLog:
destination: file
path: "/db/shard1/log/shard1.log" #日志存储位置
logAppend: true
storage:
journal: #journal配置
enabled: true
dbPath: "/db/shard1/data" #数据文件存储位置
directoryPerDB: true #是否一个库一个文件夹
engine: wiredTiger #数据引擎
wiredTiger: #WT引擎配置
engineConfig:
cacheSizeGB: #设置为6G,默认为物理内存的一半
directoryForIndexes: true #是否将索引也按数据库名单独存储
journalCompressor: zlib
collectionConfig: #表压缩配置
blockCompressor: zlib
indexConfig: #索引配置
prefixCompression: true
net: #端口配置
port:
processManagement: #配置启动管理方式
fork: true
sharding: #分片配置
clusterRole: shardsvr
replication:
replSetName: shard1 #配置副本集名称
conf]$ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard1.conf
shard2分片+副本集配置及服务启动(172.16.16.125/126/131 ):
#vim /usr/local/mongodb/conf/shard2.conf
#!/bin/bash
systemLog:
destination: file
path: "/db/shard2/log/shard2.log" #日志存储位置
logAppend: true
storage:
journal: #journal配置
enabled: true
dbPath: "/db/shard2/data" #数据文件存储位置
directoryPerDB: true #是否一个库一个文件夹
engine: wiredTiger #数据引擎
wiredTiger: #WT引擎配置
engineConfig:
cacheSizeGB: #设置为6G,默认为物理内存的一半
directoryForIndexes: true #是否将索引也按数据库名单独存储
journalCompressor: zlib
collectionConfig: #表压缩配置
blockCompressor: zlib
indexConfig: #索引配置
prefixCompression: true
net: #端口配置
port:
processManagement: #配置启动管理方式
fork: true
sharding: #分片配置
clusterRole: shardsvr
replication:
#oplogSizeMB:
replSetName: shard2 #配置副本集名称
启动shard2 mongod:
conf]$ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard2.conf
shard3分片+副本集配置及服务启动(172.16.16.126/131/124 ):
#vim /usr/local/mongodb/conf/shard3.conf
#!/bin/bash
systemLog:
destination: file
path: "/db/shard3/log/shard3.log" #日志存储位置
logAppend: true
storage:
journal: #journal配置
enabled: true
dbPath: "/db/shard3/data" #数据文件存储位置
directoryPerDB: true #是否一个库一个文件夹
engine: wiredTiger #数据引擎
wiredTiger: #WT引擎配置
engineConfig:
cacheSizeGB: #设置为6G,默认为物理内存的一半
directoryForIndexes: true #是否将索引也按数据库名单独存储
journalCompressor: zlib
collectionConfig: #表压缩配置
blockCompressor: zlib
indexConfig: #索引配置
prefixCompression: true
net: #端口配置
port:
processManagement: #配置启动管理方式
fork: true
sharding: #分片配置
clusterRole: shardsvr
replication:
#oplogSizeMB:
replSetName: shard3 #配置副本集名称
conf]$ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard3.conf
shard4分片+副本集配置及服务启动(172.16.16.131/124/125 ):
#vim /usr/local/mongodb/conf/shard4.conf
#!/bin/bash
systemLog:
destination: file
path: "/db/shard4/log/shard4.log" #日志存储位置
logAppend: true
storage:
journal: #journal配置
enabled: true
dbPath: "/db/shard4/data" #数据文件存储位置
directoryPerDB: true #是否一个库一个文件夹
engine: wiredTiger #数据引擎
wiredTiger: #WT引擎配置
engineConfig:
cacheSizeGB: #设置为6G,默认为物理内存的一半
directoryForIndexes: true #是否将索引也按数据库名单独存储
journalCompressor: zlib
collectionConfig: #表压缩配置
blockCompressor: zlib
indexConfig: #索引配置
prefixCompression: true
net: #端口配置
port:
processManagement: #配置启动管理方式
fork: true
sharding: #分片配置
clusterRole: shardsvr
replication:
#oplogSizeMB:
replSetName: shard4 #复制集名
conf]$ /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/shard4.conf
集群配置:
副本集配置(在每个 shard的主节点上进行配置及初始化,否则会初始化失败 ):
shard1的副本集配置(主节点、副本节点、仲裁节点):
bin]$ ./mongo 172.16.16.124:40001
MongoDB shell version: 3.0.7
connecting to: 172.16.16.124:/test
> use admin
switched to db admin
> config = { _id:"shard1", members:[
{_id:0,host:"172.16.16.124:40001"},
{_id:1,host:"172.16.16.125:40001"},
{_id:2,host:"172.16.16.126:40001",arbiterOnly:true}]
} #以下为输出
{
"_id" : "shard1",
"members" : [
{
"_id" : ,
"host" : "172.16.16.124:40001"
},
{
"_id" : ,
"host" : "172.16.16.125:40001"
},
{
"_id" : ,
"host" : "172.16.16.126:40001",
"arbiterOnly" : true
}
]
}
> rs.initiate(config); #初始化配置
{ "ok" : }
shard2的副本集配置(主节点、副本节点、仲裁节点):
bin]$ ./mongo 172.16.16.125:40002
MongoDB shell version: 3.0.7
connecting to: 172.16.16.125:/test
> use admin
switched to db admin
> config = { _id:"shard2", members:[
{_id:0,host:"172.16.16.125:40002"},
{_id:1,host:"172.16.16.126:40002"},
{_id:2,host:"172.16.16.131:40002",arbiterOnly:true}]
} #以下为输出
{
"_id" : "shard2",
"members" : [
{
"_id" : ,
"host" : "172.16.16.125:40002"
},
{
"_id" : ,
"host" : "172.16.16.126:40002"
},
{
"_id" : ,
"host" : "172.16.16.131:40002",
"arbiterOnly" : true
}
]
}
> rs.initiate(config); #初始化配置
{ "ok" : }
shard3的副本集配置(主节点、副本节点、仲裁节点):
bin]$ ./mongo 172.16.16.126:40003
MongoDB shell version: 3.0.7
connecting to: 172.16.16.126:/test
> use admin
switched to db admin
> config = { _id:"shard3", members:[
{_id:0,host:"172.16.16.126:40003"},
{_id:1,host:"172.16.16.131:40003"},
{_id:2,host:"172.16.16.124:40003",arbiterOnly:true}]
} #以下为输出
{
"_id" : "shard3",
"members" : [
{
"_id" : ,
"host" : "172.16.16.126:40003"
},
{
"_id" : ,
"host" : "172.16.16.131:40003"
},
{
"_id" : ,
"host" : "172.16.16.124:40003",
"arbiterOnly" : true
}
]
}
> rs.initiate(config); #初始化配置
{ "ok" : }
shard4的副本集配置(主节点、副本节点、仲裁节点):
bin]$ ./mongo 172.16.16.131:40004
MongoDB shell version: 3.0.7
connecting to: 172.16.16.131:/test
> use admin
switched to db admin
> config = { _id:"shard4", members:[
{_id:0,host:"172.16.16.131:40004"},
{_id:1,host:"172.16.16.124:40004"},
{_id:2,host:"172.16.16.125:40004",arbiterOnly:true}]
} #以下为输出
{
"_id" : "shard4",
"members" : [
{
"_id" : ,
"host" : "172.16.16.131:40004"
},
{
"_id" : ,
"host" : "172.16.16.124:40004"
},
{
"_id" : ,
"host" : "172.16.16.125:40004",
"arbiterOnly" : true
}
]
}
> rs.initiate(config); #初始化配置
{ "ok" : }
分片配置
bin]$ ./mongo 172.16.16.124:50001
mongos> use admin
switched to db admin
mongos> db.runCommand({addshard:"shard1/172.16.16.124:40001,172.16.16.125:40001,172.16.16.126:40001"});
{ "shardAdded" : "shard1", "ok" : } mongos>db.runCommand({addshard:"shard2/172.16.16.125:40002,172.16.16.126:40002,172.16.16.131:40002"});
{ "shardAdded" : "shard2", "ok" : } mongos>db.runCommand({addshard:"shard3/172.16.16.126:40003,172.16.16.131:40003,172.16.16.124:40003"});
{ "shardAdded" : "shard3", "ok" : } mongos>db.runCommand({addshard:"shard4/172.16.16.131:40004,172.16.16.124:40004,172.16.16.125:40004"});
{ "shardAdded" : "shard4", "ok" : }
查看配置是否生效(仲裁不被列出 ):
mongos> db.runCommand( { listshards : 1 } );
{
"shards" : [
{
"_id" : "shard1",
"host" : "shard1/172.16.16.124:40001,172.16.16.125:40001"
},
{
"_id" : "shard2",
"host" : "shard2/172.16.16.125:40002,172.16.16.126:40002"
},
{
"_id" : "shard3",
"host" : "shard3/172.16.16.126:40003,172.16.16.131:40003"
},
{
"_id" : "shard4",
"host" : "shard4/172.16.16.124:40004,172.16.16.131:40004"
}
],
"ok" :
}
集群测试
bin]$ ./mongo 172.16.16.131:50001
MongoDB shell version: 3.0.7
connecting to: 172.16.16.131:/test
mongos> use ljaidb
switched to db ljaidb
mongos> for (var i=1;i<=10000;i++) db.ljaitable.save({"name":"ljai","age":27,"addr":"fuzhou"})
WriteResult({ "nInserted" : })
mongos> db.ljaitable.stats()
{
"sharded" : false,
"primary" : "shard1",
"ns" : "ljaidb.ljaitable",
"count" : ,
"size" : ,
"avgObjSize" : ,
"storageSize" : ,
"capped" : false,
"wiredTiger" : {
"metadata" : {
"formatVersion" :
}
mongos> db.printShardingStatus()
--- Sharding Status ---
sharding version: {
"_id" : ,
"minCompatibleVersion" : ,
"currentVersion" : ,
"clusterId" : ObjectId("5625fc29e3c17fdff8517b73")
}
shards:
{ "_id" : "shard1", "host" : "shard1/172.16.16.124:40001,172.16.16.125:40001" }
{ "_id" : "shard2", "host" : "shard2/172.16.16.125:40002,172.16.16.126:40002" }
{ "_id" : "shard3", "host" : "shard3/172.16.16.126:40003,172.16.16.131:40003" }
{ "_id" : "shard4", "host" : "shard4/172.16.16.124:40004,172.16.16.131:40004" }
balancer:
Currently enabled: yes
Currently running: yes
Balancer lock taken at Tue Oct :: GMT+ (CST) by DataServer-::::Balancer:
Failed balancer rounds in last attempts:
Migration Results for the last hours:
No recent migrations
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "test", "partitioned" : false, "primary" : "shard1" }
{ "_id" : "ljaidb", "partitioned" : false, "primary" : "shard1" }
bin]$ ./mongo 172.16.16.124:40001
MongoDB shell version: 3.0.7
connecting to: 172.16.16.124:/test
shard1:PRIMARY> show dbs
ljaidb .000GB
local .000GB
shard1:PRIMARY> use ljaidb
switched to db ljaidb
shard1:PRIMARY> show tables
ljaitable
shard1:PRIMARY> db.ljaitable.find().count()
bin]$ ./mongo 172.16.16.125:40002
MongoDB shell version: 3.0.7
connecting to: 172.16.16.125:/test
shard2:PRIMARY> show dbs
local .000GB
指定数据库和集合进行分片:
bin]$ ./mongo 172.16.16.124:50001
MongoDB shell version: 3.0.7
connecting to: 172.16.16.124:/test
mongos> use admin
switched to db admin
mongos> db.runCommand( { enablesharding :"lymdb"});
{ "ok" : }
mongos> db.runCommand( { shardcollection : "lymdb.lymtable",key : {_id: 1} } )
{ "collectionsharded" : "lymdb.lymtable", "ok" : }
通过java或者python驱动,连接mongo集群测试:
import java.util.ArrayList;
import java.util.List; import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress; public class TestMongoDBShards { public static void main(String[] args) {
try {
List<ServerAddress> addresses = new ArrayList<ServerAddress>();
ServerAddress address1 = new ServerAddress("172.16.16.124" , 50001);
ServerAddress address2 = new ServerAddress("172.16.16.125" , 50001);
ServerAddress address3 = new ServerAddress("172.16.16.126" , 50001);
ServerAddress address4 = new ServerAddress("172.16.16.131" , 50001);
addresses.add(address1);
addresses.add(address2);
addresses.add(address3); MongoClient client = new MongoClient(addresses);
DB db = client.getDB( "lymdb" );
DBCollection coll = db.getCollection( "lymtable" ); // BasicDBObject object = new BasicDBObject();
// object.append( "id" , 1); // DBObject dbObject = coll.findOne(object); for(int i=1;i<=1000000;i++) {
DBObject saveData=new BasicDBObject();
saveData.put("id", i);
saveData.put("userName", "baiwan" + i);
saveData.put("age", "26");
saveData.put("gender", "m"); coll.save(saveData);
} // System. out .println(dbObject); } catch (Exception e) {
e.printStackTrace();
}
// TODO Auto-generated method stub } }
python连接代码:
#encoding=UTF-8
import datetime ISOTIMEFORMAT = '%Y-%m-%d %X' from pymongo import MongoClient
conn = MongoClient("172.16.16.124",50001)
db = conn.funodb
def dateDiffInSeconds(date1,date2):
timedelta = date2 - date1
return timedelta.days*24*3600 +timedelta.seconds
db.funotable.drop()
date1 = datetime.datetime.now()
for i in range(0,1000000): db.funotable.insert({"name":"ljai","age":i,"addr":"fuzhou"})
c = db.funotable.find().count()
print("count is ",c)
date2 = datetime.datetime.now()
print(date1)
print(date2)
print("消耗:",dateDiffInSeconds(date1,date2),"seconds")
conn.close()
测试是否自动分片:
mongos> db.lymtable.getShardDistribution() Shard shard1 at shard1/172.16.16.124:40001,172.16.16.125:40001
data : 96.46MiB docs : 1216064 chunks : 4
estimated data per chunk : 24.11MiB
estimated docs per chunk : 304016 Shard shard2 at shard2/172.16.16.125:40002,172.16.16.126:40002
data : 44.9MiB docs : 565289 chunks : 4
estimated data per chunk : 11.22MiB
estimated docs per chunk : 141322 Shard shard3 at shard3/172.16.16.126:40003,172.16.16.131:40003
data : 99.39MiB docs : 1259979 chunks : 4
estimated data per chunk : 24.84MiB
estimated docs per chunk : 314994 Shard shard4 at shard4/172.16.16.124:40004,172.16.16.131:40004
data : 76.46MiB docs : 958668 chunks : 4
estimated data per chunk : 19.11MiB
estimated docs per chunk : 239667 Totals
data : 317.22MiB docs : 4000000 chunks : 16
Shard shard1 contains 30.4% data, 30.4% docs in cluster, avg obj size on shard : 83B
Shard shard2 contains 14.15% data, 14.13% docs in cluster, avg obj size on shard : 83B
Shard shard3 contains 31.33% data, 31.49% docs in cluster, avg obj size on shard : 82B
Shard shard4 contains 24.1% data, 23.96% docs in cluster, avg obj size on shard : 83B
MongoDBV3.0.7版本(shard+replica)集群的搭建及验证的更多相关文章
- redis集群与分片(2)-Redis Cluster集群的搭建与实践
Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...
- Redis Cluster集群的搭建与实践
Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Re ...
- Redis Cluster 伪集群的搭建
简介 为何要搭建Redis集群?Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系统的Hbase或者是MogoDB ...
- Kafka 0.9+Zookeeper3.4.6集群搭建、配置,新Client API的使用要点,高可用性测试,以及各种坑 (转载)
Kafka 0.9版本对java client的api做出了较大调整,本文主要总结了Kafka 0.9在集群搭建.高可用性.新API方面的相关过程和细节,以及本人在安装调试过程中踩出的各种坑. 关于K ...
- Redis 5.0.7 讲解,单机、集群模式搭建
Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...
- 相同版本的CDH集群间迁移hdfs以及hbase
前言 由于项目数据安全的需要,这段时间看了下hadoop的distcp的命令使用,不断的纠结的问度娘,度娘告诉我的结果也让我很纠结,都是抄来抄去, 还好在牺牲大量的时间的基础上还终于搞出来了,顺便写这 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十)安装hadoop2.9.0搭建HA
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二)安装hadoop2.9.0
如何搭建配置centos虚拟机请参考<Kafka:ZK+Kafka+Spark Streaming集群环境搭建(一)VMW安装四台CentOS,并实现本机与它们能交互,虚拟机内部实现可以上网.& ...
- linux虚拟机环境快速搭建redis5.x版本的主从集群总结
文/朱季谦 我在阿里云服务器上曾参与过公司redis集群的搭建,但时间久了,都快忘记当时的搭建过程了,故而决定在虚拟机centOS 7的环境,自行搭建一套redis5.x版本的集群,该版本集群的搭建比 ...
随机推荐
- 会务准备期间材料准备工作具体实施总结 ----(vim技巧应用, python信息提取与整合, microsoft word格式调整批量化)
会务准备期间材料准备工作具体实施总结(vim, python, microsoft word) span.kw { color: #007020; font-weight: bold; } code ...
- 前端必须了解的布局常识:普通流(normal flow)
目录 一.概述 二.块级元素和内联元素 常见的块级元素 BFC 常见的行内元素 IFC 三.哪些情况会脱离普通流 浮动 绝对定位 固定定位 display:none 四.总结 五.参考资料 一.概述 ...
- 用JAVA日志来写诗
工欲善其事,必先利其器 很多程序员可能都忘了记录应用程序的行为是一件多么重要的事,当遇到多线程环境下高压力导致的并发bug时,你就能体会到记录log的重要性. 有的人很高兴的就在代码里加上了这么句: ...
- httpRuntime与ASP.NET 运行时及IIS处理模型
配置 ASP.NET HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求,配置节及其描述如下所示. <httpRuntime executionTimeout="1 ...
- Ado.net[登录,增删改查,Get传值,全选,不选,批量删除,批量更新]
[虽然说,开发的时候,我们可以使用各种框架,ado.net作为底层的东西,作为一个合格的程序员,在出问题的时候我们还是要知道如何调试] 一.增删改查 cmd.ExecuteReader();执行查询, ...
- 为什么document.firstChild找到的不是html节点
DOM是针对HTML4.01开发的,我们现在是XHTML1.0. 所以要想使用核心DOM中的属性和方法,必须去掉DTD类型定义. <!DOCTYPE html PUBLIC "-//W ...
- Linux解决乱码问题
主要的关注点是本身文件的编码和Linux的编码是否相同, 如果不相同的话,那么修改 例如: 就OK了,如果还是有问题的话,那么就查看一下连接工具的编码是否设置的有问题. 一般情况下,主要注意这些问题, ...
- 第 31 章 项目实战-PC 端固定布局[3]
学习要点: 1.搜索区 2.插入大图 3.搜索框 主讲教师:李炎恢 本章主要开始使用学习用 HTML5 和 CSS3 来构建 Web 页面,第一个项目采用 PC 端固定布局来实现. 一.搜索区 本节课 ...
- jquery右键菜单
点击这里体验效果 如果要屏蔽页面原来的右键菜单,请设置disable_native_context_menu:true 以下是源代码: <!DOCTYPE html> <html&g ...
- 关于图片的PNG与JPG、JIF格式
一:GIF(Graphics Interchange Format) 简介 GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像. 它实际上是一种压缩文档,采用LZW压 ...