??xml version="1.0" encoding="utf-8" standalone="yes"?> 基本的安装: 修改密码Q?/strong> 允许地址202.11.10.253上用root用户Q密码dboomysql来连接mysql的所有数据库Q付l所有权限?br />
实质上是修改了自带的database:mysql中userq一张表Q与PostgreSQL需要修攚w|文件相比还是方便一些?br />
另外是MySQL的GUI客户?MySQL Administrator)也比PostgreSQL的漂亮很多?/p>
停止MySQLQ?br />
bin/mysqladmin -u root shutdown -p 安装完成后,按照q篇文章配置双机互备Q?br />
http://hi.baidu.com/%CA%AB%D5%B9/blog/item/3b99dbc48140f7ca38db49f7.html 四、初始化集群 应该改ؓ—?br />
四、初始化集群 q样的集配|两台机器都是一LQ所以有2个管理节点,2个SQL节点Q?个数据节炏V集的验证Q从M一台机器登上去操作数据都能双写?/p>
可以看到集群节点的信息?br />
从官方网站上看到的例子都是用了多?台的机器来做的集,仅用两台来做的方法好像是大家Ҏq么做的?br />
可以查看到错误日志了?br />
解决ҎQ?/em>删除dataQ重新install_db 启动成功了?br />
之前的说法是max版支持集,standard版不支持Q但是官方下载点里已l看不出M关于max,standard的标志。官方网站上又说5.0版本已经包含了MySQL ClusterQ所以还是下了个5.0的试试,l果是可以的?/p>
linux下官方网站的安装说明q是挺明的Q一步一步做是了?br />
遇到了一个问题与q篇文章一模一Phttp://www.91linux.com/html/linux_pub/fedora/20071114/8195.html
按它的方法修改之后再?/p>
cd /usr/local/mysql
bin/mysqld_safe --user=mysql &
Starting mysqld daemon with databases from /var/lib/mysql
看到上面q一行说明启动成功?/p>
bin/mysqladmin -u root password yourpassword
允许q程讉KQ?/strong>bin/mysql -u root -p
grant all on *.* to root@"202.11.10.253" Identified by "dboomysql"
但是q篇文章有笔误:
在Server1?br />
# ndbd --nodeid=3 --initial
在Server2?br />
# ndbd --nodeid=4 --iniitial
在Server1?br />
# ndbd --ndb_nodeid=3 --initial
在Server2?br />
# ndbd --ndb_nodeid=4 --initialndb_mgm -e show
管集群配置完毕Q但是应用程序与数据库徏立连接不能用其中Q何一台机器的真实IPQ否则一旦该机器|络q接出问题还是不行,所以还是要lDB集群的机器配|虚拟IP以供外部讉K?/p>
遇到q的问题Q?br />
无法mysqld_safe启动Q也找不到日?br />
解决ҎQ?/em>加启动参C指定日志mysqld_safe --log-error=/var/log/mysqld.log
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
没辙Qgoogle呗,好像是系l数据库mysql里host表的权限有问题什么的Q而mysqlq个库是之前安装时初始化q的?/p>
rm -rf /usr/local/mysql/data
cd /usr/local/mysql
scripts/mysql_install_db --user=mysql
chown -R root .
chown -R mysql data
chgrp -R mysql .
bin/mysqld_safe --log-error=/var/log/mysqld.log --ndb_nodeid=5 --user=mysql &
btw, mysql官方|的forum好像不能“qx昄”Q好不方ѝ?/p>
关闭ClusterQ在理节点所在的机器上:
/usr/local/mysql/ndb_mgm -e shutdown
关闭SQL节点的mysqld服务Q?br />
/usr/local/mysql/bin/mysqladmin -uroot shutdown
]]>
]]>
从网上看C些关于存储v量数据的讨论Q?br />1、分表、分数据?br />Ҏ一定的规则把不同的数据库表分开
~点Q有一定风险,因ؓ一旦分开存放的两个数据库表有朝一日需要“联表”操作,那么郁闷了Q而且最好是把几个数据量大的表分开Q单独拎出来几个表意义很不大,而且业务逻辑层的代码需要知道自p处理的数据存在哪个服务器里,有一点儿奇怪?br />
例如Q(来自ball_leiQ?/font>
我现在采用的架构采用数据库群的方式,每个客户的数据单独存在一台数据库服务器上Q所有的客户Ҏ一定的规则安排存放的数据库服务器,在主数据库服务器上有一?索引表保存客户与数据库服务器的对应关p,每台数据库服务器中用于存放这些数据的表按照月份分?2张,每张存放当月的全部客L数据Q目前计出单台服务?单表需要容U?亿条数据Qƈ且每台服务器在这U方式下可以容纳10000个客L数据Q以后客h量增加时只需要增加数据库服务器即可?
E序逻辑Q我采用业务逻辑层的概念Q对外提供应用服务器接口Q全部的客户端通过应用服务器接口进行业务运,应用服务器我也采用服务器的概念Q有一个主的应用服务器Q有几个副应用服务器Q全部客L只知道该d用服务器的地址Q上U时登陆d用服务器Q然后主应用服务器根据各台应用服务器的负载情况返回给客户端真正的登陆地址Q副应用服务器的地址Q,然后客户端再登陆C面进行业务处理,每台应用服务器都能够讉K各台数据服务器进行数据提取?br />
问题Q需要每台应用服务器都配备一个公|ip么,q是有其他的方式可以只需要一个公|ip可以l全部的服务器公用?Nat能够实现么?或者能否进行更好的负蝲均衡Q就是客L的各U业务都可以在不同的服务器上q算
改进Q?br />用户规则配置应该不大Q所以也可以做成配置一ơLoad到内存中?br />
如此大数据量的项目竟不用Oracle,实在让h费解。我现在的月数据量大?.5亿,用了3台HP
SUPERDEMO,9个CUSTERMOR DB。其中一个CATALOG数据库,相当于你的客L引?
你的插入操作很多Q所以徏议少建几个烦引,其实一些业务完全可以在数据库中完成Q通过触发器,U束和存储过E,q样性能会有大的提高。大数据的表Q分区的是必须的,当然Q还需要更完善的维护计划,否则很容易,你的业务可能׃因ؓ性能问题挂v了?/font>
1、通过Q数据库+文g)方式q行数据存储
2、集方?/p>
q有当初选修的“分布式数据库”,不知道这个概忉|不是能够zȝ生的用到目中来。。?br />
大型应用随着用户量访问越来越大,增加数据库存储和做好数据库冗余可以增加系l的可靠性和性能?/p>
无需修改客户端应用程序,无需变更应用服务器或数据库服务器软g。C-JDBC的JDBC driver把SQLh转给C-JDBC controller(负责在databases之间做负载均衡)
The database is distributed and replicated among several nodes and C-JDBC load balances the queries between these nodes.
p一句话太׃h了!
上周的某一个上午,搞定C-JDBC的安装配|啦~
主要Ҏ官方的user guide和这好? http://huaronghu.spaces.live.com/blog/cns!B9A68E1C1CA857AD!288.entry
在c-jdbc-2.0.2-bin/config/controller目录中创Z个c-jdbc controller的配|文件?br />试验Ӟ创徏的配|文件ؓQuud-controller-distributed.xml 注意QController和VirtualMachine的配|文件不能采用相同的文g?br /> 2007-03-07 15:16:52,390 INFO controller.loadbalancer.RAIDb1 Adding blocking tas
最后都整好?但是遇到一个warn的logQ?br />backend.DatabaseBackend.postgreSQLNode155 Statement.getGeneratedKeys not supported c-jdbc serverUCؓc-jdbc controllerQ聆听请求们 jdbc:cjdbc://host1:port1,host2:port2/database 然后可以在代码中insert/update几个记录Q再单独到各个数据库中去查一下,应该都受到媄响就对了?br /> 2、Configuring C-JDBC with Hibernate
准备工作Q?/strong>
环境Qwindows,postgreSQL,JDK
建立数据库“们”,安装若干db在若qserver上,所以如果用商业数据库的话Q就会需要好几套的钱哪?br />安装C-JDBCQ?br />下蝲了binary版的c-jdbc-2.0.2-bin.zipQ解压到作ؓC-JDBC server的机器上Qe.g. C:\software\c-jdbc-2.0.2-binQ,
讄环境变量,新增pȝ变量:CJDBC_HOME =C:\software\c-jdbc-2.0.2-bin
把实际用的数据库的JDBC driverQ例如mysql-connector-java-3.1.12-bin.jar Qpostgresql-8.0.309.jdbc2.jarQ拷贝到c-jdbc/drivers ?br />
配置文gQ?/strong>
在c-jdbc-2.0.2-bin/config/virtualdatabase目录中创拟数据库配置文g?br />里面DatabaseBackend 标签中定义的是被集的数据库?br />试验Ӟ创徏了文Ӟpostgresql-raidb1-distribution.xmlQ用了2个postgreSQL数据库,采用了全复制的方法?br />注意Q如果采用全复制Q所以在2个数据库上徏库、徏表的全部脚本都要完全相同Q否则将会报出mismatch的错误?br />目前感觉配置里面最有用的配|就?lt;AuthenticationManager>Q?lt;DatabaseBackend>?lt;LoadBalancer>Q还没有仔细看)?br />配置时可以参考已l提供的例子Qc-jdbc-2.0.2-bin/config/RAIDb-1-full-example.xmlQ里面对每一个属性都有比较详l的注释QDatabaseBackend中还有各个开源数据库q接的例子,心的?/p>
<?
xml version="1.0" encoding="UTF8"
?>
<!
DOCTYPE C-JDBC PUBLIC "-//ObjectWeb//DTD C-JDBC 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-2.0.2.dtd"
>
<
C-JDBC
>
<
VirtualDatabase
name
="myDB"
maxNbOfConnections
="20"
minNbOfThreads
="1"
maxNbOfThreads
="20"
blobEncodingMethod
="hexa"
>
<
AuthenticationManager
>
<
Admin
>
<
User
username
="admin"
password
="c-jdbc"
/>
</
Admin
>
<
VirtualUsers
>
<
VirtualLogin
vLogin
="boss"
vPassword
="boss"
/>
</
VirtualUsers
>
</
AuthenticationManager
>
<
DatabaseBackend
name
="postgreSQLNode114"
driver
="org.postgresql.Driver"
url
="jdbc:postgresql://10.10.0.114:5432/clusterdb"
connectionTestStatement
="select now()"
>
<
DatabaseSchema
dynamicPrecision
="column"
/>
<
ConnectionManager
vLogin
="boss"
rLogin
="postgres9"
rPassword
="12345"
>
<
RandomWaitPoolConnectionManager
poolSize
="20"
/>
</
ConnectionManager
>
</
DatabaseBackend
>
<
DatabaseBackend
name
="postgreSQLNode155"
driver
="org.postgresql.Driver"
url
="jdbc:postgresql://10.10.0.155:5432/clusterdb"
connectionTestStatement
="select now()"
>
<
DatabaseSchema
dynamicPrecision
="column"
/>
<
ConnectionManager
vLogin
="boss"
rLogin
="postgres"
rPassword
="abcde"
>
<
RandomWaitPoolConnectionManager
poolSize
="20"
/>
</
ConnectionManager
>
</
DatabaseBackend
>
<
RequestManager
>
<
RequestScheduler
>
<
RAIDb-1Scheduler
level
="passThrough"
/>
</
RequestScheduler
>
<
RequestCache
>
<
MetadataCache
maxNbOfMetadata
="10000"
maxNbOfField
="0"
/>
<
ParsingCache
backgroundParsing
="false"
maxNbOfEntries
="5000"
/>
<
ResultCache
granularity
="table"
maxNbOfEntries
="100000"
pendingTimeout
="0"
>
<
ResultCacheRule
queryPattern
="default"
timestampResolution
="1000"
>
<
EagerCaching
/>
</
ResultCacheRule
>
</
ResultCache
>
</
RequestCache
>
<
LoadBalancer
>
<
RAIDb-1
>
<
RAIDb-1-LeastPendingRequestsFirst
/>
</
RAIDb-1
>
</
LoadBalancer
>
</
RequestManager
>
</
VirtualDatabase
>
</
C-JDBC
>
<?
xml version="1.0" encoding="UTF8"
?>
<!
DOCTYPE C-JDBC-CONTROLLER PUBLIC "-//ObjectWeb//DTD C-JDBC-CONTROLLER 2.0.2//EN" "http://c-jdbc.objectweb.org/dtds/c-jdbc-controller-2.0.2.dtd"
>
<
C-JDBC-CONTROLLER
>
<
Controller
port
="25322"
>
<
Report
/>
<
JmxSettings
>
<
RmiJmxAdaptor
port
="1091"
/>
</
JmxSettings
>
<
VirtualDatabase
configFile
="postgresql-raidb1-distribution.xml"
virtualDatabaseName
="myDB"
autoEnableBackends
="true"
checkpointName
="Initial_empty_recovery_log"
/>
</
Controller
>
</
C-JDBC-CONTROLLER
>
启动Q?/strong>
在c-jdbc-2.0.2-bin\bin目录下,q行controller.bat -f ../config/controller/uud-controller-distributed.xml
unix用户使用controller.sh来启动controller
截图Q(下回补)
凑合看一下吧Q控制台的正常输出:
C:\software\c-jdbc-2.0.2-bin\bin>controller.bat -f ../config/controller/uud-cont
roller-distributed.xml
2007-03-07 15:16:44,017 INFO controller.core.Controller C-JDBC controller (2.0.
2)
2007-03-07 15:16:44,439 INFO controller.core.Controller Loading configuration f
ile: ../config/controller/uud-controller-distributed.xml
2007-03-07 15:16:44,752 INFO controller.core.Controller JMX is enabled
2007-03-07 15:16:44,830 INFO controller.core.Controller Starting JMX server on
host: 10.10.0.155
2007-03-07 15:16:46,376 INFO backend.DatabaseBackend.postgreSQLNode114 Adding c
onnection manager for virtual user "boss"
2007-03-07 15:16:46,501 INFO backend.DatabaseBackend.postgreSQLNode155 Adding c
onnection manager for virtual user "boss"
2007-03-07 15:16:46,642 INFO controller.RequestManager.myDB Request manager wil
l parse requests with the following granularity: TABLE
2007-03-07 15:16:46,657 WARN controller.virtualdatabase.myDB No recovery log ha
s been configured, enabling backend without checkpoint.
2007-03-07 15:16:48,641 INFO backend.DatabaseBackend.postgreSQLNode114 Detected
backend as: PostgreSQL
2007-03-07 15:16:49,063 WARN backend.DatabaseBackend.postgreSQLNode114 Statemen
t.getGeneratedKeys not supported.
2007-03-07 15:16:49,579 INFO backend.DatabaseBackend.postgreSQLNode114 Gatherin
g database schema
2007-03-07 15:16:49,782 INFO controller.RequestManager.myDB Setting new virtual
database schema.
2007-03-07 15:16:49,782 INFO cjdbc.controller.cache Setting new database schema
.
2007-03-07 15:16:49,782 INFO controller.loadbalancer.RAIDb1 Adding blocking tas
k worker thread for backend postgreSQLNode114
2007-03-07 15:16:49,797 INFO controller.loadbalancer.RAIDb1 Adding non blocking
task worker thread for backend postgreSQLNode114
2007-03-07 15:16:49,797 INFO controller.RequestManager.myDB Database backend po
stgreSQLNode114 is now enabled
2007-03-07 15:16:50,922 INFO backend.DatabaseBackend.postgreSQLNode155 Detected
backend as: PostgreSQL
2007-03-07 15:16:51,328 WARN backend.DatabaseBackend.postgreSQLNode155 Statemen
t.getGeneratedKeys not supported.
2007-03-07 15:16:52,172 INFO backend.DatabaseBackend.postgreSQLNode155 Gatherin
g database schema
2007-03-07 15:16:52,390 INFO controller.RequestManager.myDB Virtual database sc
hema merged with new schema.
2007-03-07 15:16:52,390 INFO cjdbc.controller.cache Merging new database schema
k worker thread for backend postgreSQLNode155
2007-03-07 15:16:52,390 INFO controller.loadbalancer.RAIDb1 Adding non blocking
task worker thread for backend postgreSQLNode155
2007-03-07 15:16:52,406 INFO controller.RequestManager.myDB Database backend po
stgreSQLNode155 is now enabled
2007-03-07 15:16:52,422 WARN VirtualDatabaseWorkerThread.myDB.metadata Metadata
key [getMaxColumnsInIndex] is not compatible. (Backends are: [jdbc:postgresql:/
/10.10.0.114:5432/clusterdb] and [jdbc:postgresql://10.10.0.155:5432/clu
sterdb] ; Values are:[32] and [0])
2007-03-07 15:16:52,422 INFO controller.core.Controller Adding VirtualDatabase
myDB
2007-03-07 15:16:52,437 INFO controller.core.Controller Waiting for connections
on 0.0.0.0:25322
2007-03-07 15:16:52,469 INFO controller.core.Controller Controller started on 2
007.03.07 10 at 03:16:52 下午 GMT+08:00
2007-03-07 15:16:52,484 INFO controller.core.Controller Controller 10.10.0.
155:25322 ready, listening to requests ...
遇到q的问题Q?br />1?br />刚启动没一会儿Q就看到config文gd错误Q控制台信息也就此结束?br />解决ҎQcontroller.bat -f filename中filename的相对\径和文g名竟焉写错了,汗。。。?br />
2?br />启动Ӟ控制台抛出ERROR以及exceptionQ大意是connection failed, IP没有配置到pg_hba.conf?br />解决ҎQ虽然是q本机的一个数据库Q但是由于数据库q接的url里面写的是IP地址Q所以仍然要把本机的IP地址配置到pg_hba.conf以允许其讉K?br />
3?br />q是启动时抛错了QConnection test failed(org.postgresql.util.PSQLException:Backend start-up failed:FATAL:role "boss_user" does not exist.)
解决ҎQ原来是在自己写?xml配置文g中,DatabaseBackend标签里面写的用户名和密码需要是真实数据库的真实用户名和密码?/p>
至今不知道是什么问?有什么媄?
代码部分Q?/strong>
只需要修改应用程序用到的jdbc driver的配|,把c-jdbc/drivers/目录下的c-jdbc-driver.jar拯到应用程序的工程里,q加入到class-path中?br />之前是?Class.forName("com.somevendor.jdbcDriver.Driver") 去连接某特定的数据库
现在是?Class.forName("org.objectweb.cjdbc.driver.Driver") l一处理?br />q接字符ԌDriverManager.getConnection("jdbc:cjdbc://localhost:25322/mycjdbc") 取得数据库连接?/p>
其他所有通过c-jdbc来访问的DB们称为db backends.
host是指跑着c-jdbc controller的机器IPQport是指controller监听客户端链接的端口Q默认端口号Q?5322
注意Q不仅真正的DB安装多个在多个机器上Qc-jdbc controller也可以安在不同的机器?q样可以防止一个c-jdbc 坏掉带来的风险?br />例如Q?/p>
Class.forName(
"
org.objectweb.cjdbc.driver.Driver
"
);
DriverManager.getConnection(
"
jdbc:cjdbc://c1.objectweb.org,c2.objectweb.org/tpcw
"
);
//
不验证用户名密码
DriverManager.getConnection(
"
jdbc:cjdbc://host/db?user=me&password=secret
"
)
//
验证用户名密码的写法1
DriverManager.getConnection(
"
jdbc:cjdbc://host/db;user=me;password=secret
"
)
//
验证用户名密码的写法2
问题Q?br />1、管理C-JDBCQ不知道C-JDBC需要啥理Q不q好像是已經有一個簡單的 Desktop Application 可以控制盔R?administration 介面, 最重要的是, 他結合了 JMX , 可以讓整個監控的環境更完?. Q等待尝试)
2、不知道通过C-JDBC来操作速度如何
3、RAIdb?U类型,采取哪个更好Q把表分开在不同server上对联表查应该不会有影响吧?
其他Q?br />1、Configuring C-JDBC with Jakarta Tomcat
Copy the c-jdbc-driver.jar file to the lib directory of your web application (for example: $TOMCAT_HOME/webapps/mywebapp/WEB-INF/lib).
There are many ways to obtain connections from a Tomcat application. Just ensure that you are using org.objectweb.cjdbc.driver.Driver as the driver class name and that the JDBC URL is a C-JDBC URL
C-JDBC just has to be defined as any JDBC driver in Hibernate, leaving the syntax set to the proper database. Here is a configuration example to use Hibernate with a C-JDBC cluster made of Sybase backends:
## C-JDBC
hibernate.dialect net.sf.hibernate.dialect.SybaseDialect
hibernate.connection.driver_class org.objectweb.cjdbc.driver.Driver
hibernate.connection.username user
hibernate.connection.password pass
hibernate.connection.url jdbc:cjdbc://localhost:25322/test
]]>
MySQL, windows下的卸蝲
停掉MySQL的服务(控制面板Q管理工P服务Q?br />在MySQL_HOME/bin/> 下输入mysqld-nt -remove
再通过控制面板卸蝲MySQLE序.
最好再删除安装目录
一些命令:
show databases; 可以看到mySQL中目前都有哪些database
show tables; 可以看到该database中有哪些?br />describe tablename; 可以看到某表的结?br />
|站和文档:
官方|站Q?a >http://www.mysql.org/
中文文档Q?a >http://dev.mysql.com/doc/refman/5.1/zh/index.html