??xml version="1.0" encoding="utf-8" standalone="yes"?>
select * from 表名 where to_days(旉字段? = to_days(now());
昨天
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 旉字段? <= 1
7?br />
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(旉字段?
q?0?br />
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(旉字段?
本月
SELECT * FROM 表名 WHERE DATE_FORMAT( 旉字段? '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
上一?br />
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 旉字段? '%Y%m' ) ) =1
]]>
%M 月名?January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前~的月份的日期(1st, 2nd, 3rd, {等。)
%Y q? 数字, 4 ?nbsp;
%y q? 数字, 2 ?nbsp;
%a ~写的星期名?Sun……Sat)
%d 月䆾中的天数, 数字(00……31)
%e 月䆾中的天数, 数字(0……31)
%m ? 数字(01……12)
%c ? 数字(1……12)
%b ~写的月份名?Jan……Dec)
%j 一q中的天?001……366)
%H 时(00……23)
%k 时(0……23)
%h 时(01……12)
%I 时(01……12)
%l 时(1……12)
%i 分钟, 数字(00……59)
%r 旉,12 时(hh:mm:ss [AP]M)
%T 旉,24 时(hh:mm:ss)
%S U?00……59)
%s U?00……59)
%p AM或PM
%w 一个星期中的天?0=Sunday ……6=Saturday Q?nbsp;
%U 星期(0……52), q里星期天是星期的第一?nbsp;
%u 星期(0……52), q里星期一是星期的W一?nbsp;
%% 一个文?#8220;%”?nbsp;
所有的其他字符不做解释被复制到l果中?nbsp;
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
, '%Y %m'
]]>
mysqladmin start
/ect/init.d/mysql start (前面为mysql的安装\?
2.linux下重启mysql的命令:
mysqladmin restart
/ect/init.d/mysql restart (前面为mysql的安装\?
3.linux下关闭mysql的命令:
mysqladmin shutdown
/ect/init.d/mysql shutdown (前面为mysql的安装\?
4.q接本机上的mysqlQ?/p>
q入目录mysql\binQ再键入命omysql -uroot -pQ?回R后提C入密码?/p>
退出mysql命oQexitQ回车)
5.修改mysql密码Q?/p>
mysqladmin -u用户?-p旧密?password 新密?/p>
或进入mysql命o行SET PASSWORD FOR root=PASSWORD("root");
6.增加新用戗(注意Qmysql环境中的命o后面都带一个分号作为命令结束符Q?/p>
grant select on 数据?* to 用户名@dL identified by "密码"
如增加一个用户test密码?23Q让他可以在ML上登录,q对所有数据库有查询、插入、修攏V删除的权限。首先用以root用户q入mysqlQ然后键入以下命令:
grant select,insert,update,delete on *.* to " Identified by "123";
二、有关MySQL数据库方面的操作
必须首先d到mysql中,有关操作都是在mysql的提C符下进行,而且每个命o以分L?/p>
1、显C数据库列表?/p>
show databases;
2、显C库中的数据表:
use mysqlQ?Q/打开?/p>
show tables;
3、显C数据表的结构:
describe 表名;
4、徏库:
create database 库名;
5、徏表:
use 库名Q?/p>
create table 表名(字段讑֮列表)Q?/p>
6、删库和删表:
drop database 库名;
drop table 表名Q?/p>
7、将表中记录清空Q?/p>
delete from 表名;
8、显C中的记录Q?/p>
select * from 表名;
9、编码的修改
如果要改变整个mysql的编码格式:
启动mysql的时候,mysqld_safe命o行加?/p>
--default-character-set=gbk
如果要改变某个库的编码格式:在mysql提示W后输入命o
alter database db_name default character set gbk;
三、数据的导入导出
1、文本数据{到数据库?/p>
文本数据应符合的格式Q字D|据之间用tab键隔开Qnull值用来代ѝ例Q?/p>
1 name duty 2006-11-23
数据传入命o load data local infile "文g? into table 表名;
2、导出数据库和表
mysqldump --opt news > news.sqlQ将数据库news中的所有表备䆾到news.sql文gQnews.sql是一个文本文Ӟ文g名Q取。)
mysqldump --opt news author article > author.article.sqlQ将数据库news中的author表和article表备份到author.article.sql文gQ?author.article.sql是一个文本文Ӟ文g名Q取。)
mysqldump --databases db1 db2 > news.sqlQ将数据库dbl和db2备䆾到news.sql文gQnews.sql是一个文本文Ӟ文g名Q取。)
mysqldump -h host -u user -p pass --databases dbname > file.dump
是把host上的以名字userQ口令pass的数据库dbname导入到文件file.dump?/p>
mysqldump --all-databases > all-databases.sqlQ将所有数据库备䆾到all-databases.sql文gQall-databases.sql是一个文本文Ӟ文g名Q取。)
3、导入数?/p>
mysql < all-databases.sqlQ导入数据库Q?/p>
mysql>source news.sql;Q在mysql命o下执行,可导入表Q?/p>
一、连接MySQL
格式Q?mysql -hL地址 -u用户?Qp用户密码
1、例1Q连接到本机上的MYSQL?/p>
首先在打开DOSH口Q然后进入目?mysqlbinQ再键入命omysql -uroot -pQ回车后提示你输密码Q如果刚安装好MYSQLQ超U用户root是没有密码的Q故直接回R卛_q入到MYSQL中了QMYSQL的提C符是: mysql>?/p>
2、例2Q连接到q程L上的MYSQL。假设远E主机的IP为:110.110.110.110Q用户名为root,密码为abcd123。则键入以下命oQ?/p>
mysql -h110.110.110.110 -uroot -pabcd123
Q注:u与root可以不用加空|其它也一P
3、退出MYSQL命oQ?exit Q回车)?/p>
二、修改密?/p>
格式Qmysqladmin -u用户?-p旧密?password 新密?/p>
1、例1Q给root加个密码ab12。首先在DOS下进入目录mysqlbinQ然后键入以下命令:
mysqladmin -uroot -password ab12
注:因ؓ开始时root没有密码Q所?p旧密码一就可以省略了?/p>
2、例2Q再root的密码改为djg345?/p>
mysqladmin -uroot -pab12 password djg345
三、增加新用户。(注意Q和上面不同Q下面的因ؓ是MySQL环境中的命oQ所以后面都带一个分号作为命令结束符Q?/p>
格式Qgrant select on 数据?* to 用户名@dL identified by \"密码\"
?、增加一个用户test1密码为abcQ让他可以在ML上登录,q对所有数据库有查询、插入、修攏V删除的权限。首先用以root用户q入MySQLQ然后键入以下命令:
grant select,insert,update,
delete on *.* to test1@\"%\" Identified by \"abc\";
但例1增加的用h十分危险的,你想如某个h知道test1的密码,那么他就可以在internet上的M一台电脑上d你的MySQL数据库ƈ对你的数据可以ؓ所Ʋؓ了,解决办法见例2?/p>
?、增加一个用户test2密码为abc,让他只可以在localhost上登录,q可以对数据库mydbq行查询、插入、修攏V删除的操作Qlocalhost指本C机,即MySQL数据库所在的那台LQ,q样用户即用知道test2的密码,他也无法从internet上直接访问数据库Q只能通过MySQLL上的web|讉K?/p>
grant select,insert,update,
delete on mydb.* to test2@localhost identified by \"abc\";
如果你不想test2有密码,可以再打一个命令将密码消掉?/p>
grant select,insert,update,delete on mydb
.* to test2@localhost identified by \"\";
在上面讲了登录、增加用戗密码更改等问题。下面我们来看看MySQL中有x据库斚w的操作。注意:你必首先登录到MySQL中,以下操作都是在MySQL的提C符下进行的Q而且每个命o以分L束?/p>
一、操作技?/p>
1、如果你打命令时Q回车后发现忘记加分P你无重打一遍命令,只要打个分号回R可以了。也是说你可以把一个完整的命o分成几行来打Q完后用分号作结束标志就完成?/p>
2、你可以使用光标上下键调Z前的命o。但以前我用q的一个MySQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win?/p>
二、显C命?/p>
1、显C数据库列表Q?/p>
show databases;
刚开始时才两个数据库Qmysql和test。MySQL库很重要它里面有MYSQL的系l信息,我们改密码和新增用户Q实际上是用这个库q行操作?/p>
2、显C库中的数据表:
use mysqlQ?Q/打开库,学过FOXBASE的一定不会陌生吧
show tables;
3、显C数据表的结构:
describe 表名;
4、徏库:
create database 库名;
5、徏表:
use 库名Q?/p>
create table 表名 (字段讑֮列表)Q?/p>
6、删库和删表:
drop database 库名;
drop table 表名Q?/p>
7、将表中记录清空Q?/p>
delete from 表名;
8、显C中的记录Q?/p>
select * from 表名;
三、一个徏库和以及插入数据的实?/p>
drop database if exists school; //如果存在SCHOOL则删?/p>
create database school; //建立库SCHOOL
use school; //打开库SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ’深圳’,
year date
); //l束
//以下为插入字D?/p>
insert into teacher values(’’,’glchengang’,’深圳一?#8217;,’1976-10-10’);
insert into teacher values(’’,’jack’,’深圳一?#8217;,’1975-12-23’);
注:在徏表中Q?Q将ID设ؓ长度?的数字字D?int(3)q让它每个记录自动加一:auto_incrementq不能ؓI?not null而且让他成ؓdDprimary keyQ?Q将NAME设ؓ长度?0的字W字D(3Q将ADDRESS设ؓ长度50的字W字D,而且~省gؓ深圳。varchar和char有什么区别呢Q只有等以后的文章再说了。(4Q将YEAR设ؓ日期字段?/p>
如果你在MySQL提示W键入上面的命o也可以,但不方便调试。你可以以上命令原样写入一个文本文件中假设为school.sqlQ然后复制到c:\\下,q在DOS状态进入目录\\mysql\\binQ然后键入以下命令:
mysql -uroot -p密码 < c:\\school.sql
如果成功Q空Z行无M昄Q如有错误,会有提示。(以上命o已经调试Q你只要?/的注释去掉即可用)?/p>
四、将文本数据转到数据库中
1、文本数据应W合的格式:字段数据之间用tab键隔开Qnull值用\\n来代ѝ?/p>
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一?1975-12-23
2、数据传入命?load data local infile \"文g名\" into table 表名?/p>
注意Q你最好将文g复制到\\mysql\\bin目录下,q且要先用use命o打表所在的库?/p>
五、备份数据库Q?/p>
1、mysqldump --opt school>school.bbb
mysqldump --opt school>school.bbb
Q命令在DOS的\\mysql\\bin目录下执行)
注释:数据库school备䆾到school.bbb文gQschool.bbb是一个文本文Ӟ文g名Q取,打开看看你会有新发现?/p>
后记Q其实MySQL的对数据库的操作与其它的SQLcL据库大同异Q您最好找本将SQL的书看看。我在这里只介绍一些基本的Q其实我也就只懂q些了,呵呵。最好的MYSQL教程q是“晏子“译的“MYSQL中文参考手?#8220;不仅免费每个相关|站都有下蝲Q而且它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式,在查扑և数命令的时候不太方ѝ?/p>
2、修改登录密?/p>
1) mysqladmin -u用户?-p旧密?password 新密?
例:mysqladmin -u root password 21century
注:因ؓ开始时root没有密码Q所?p旧密码一就可以省略了?/p>
2)直接修改user表的root用户口oQ?/p>
mysql> user mysql;
mysql> update user set pasword=password('21century') where user='root';
mysql> flush privileges;
注:flush privileges的意思是强制h内存授权表,否则用的q是~冲中的口o?/p>
3、测试密码是否修Ҏ?
1Q不用密码登?
[root@test1 local]# mysql
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
昄错误Q说明密码已l修攏V?/p>
2Q用修改后的密码d:
[root@test1 local]# mysql -u root -p
Enter password: (输入修改后的密码21century)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 177 to server version: 3.23.48
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
成功Q?/p>
q是通过mysqladmin命o修改口oQ也可通过修改库来更改口o?/p>
4、启动和停止:
启动QMysql?.23.15版本开始作了改动,默认安装后服务要用MySQL用户来启动,不允许root用户启动?/p>
如果非要用root用户来启动,必须加上--user=root参数(./safe_mysqld --user=root &)停止Qmysqladmin -u root -p shutdown?/p>
5、导出meeting数据库:
mysqldump -uroot -p21century meeting > db_meeting.sql
ghdbname数据?
mysqldump -uroot -p21century dbname < xxx.sql
导入数据库还可用cM于oracle中@my_script.sql的方式一ơ执行大量sql语句Q这在用mysqldump不v作用旉常有用?/p>
例:#./mysql -uroot -p < /home/xuys/db_meeting_2003.sql
(注:create database、use databasename、create table和insert into语句都可写在上面的脚步文件中)
6、给表改?
RENAME TABLE ztemp TO zteMP4;
7、修改字D属性:
ALTER TABLE bbabase CHANGE news_id id VARCHAR(5) NOT NULL;
8、在表中的content后增加一字段Q?/p>
ALTER TABLE bbabase ADD leave_time DATETIME NOT NULL AFTER
2.在linux中切换到 /var/ftp/pub目录下,修改jdk1.6的用权限:#chmod u+x jdk-6u10-linux-i586-rpm.bin
3.解压q安装:#./ jdk-6u10-linux-i586-rpm.bin (默认安装?usr/java?
4.环境变量配置Q?/p>
#vi /etc/profile
在该profile文g中添加:
JAVA_HOME=/usr/java/jdk1.6.0_10
JRE_HOME=/usr/java/jdk1.6.0_10/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
d完毕保存退?/p>
#source /etc/profile
#java -version
昄 java version "1.6.0_10" (jdk1.6安装成功)
卸蝲rpm版的jdkQ?/p>
#rpm -qa|grep jdk
昄Qjdk-1.6.0_10-fcs
卸蝲Q?rpm -e --nodeps jdk-1.6.0_10-fcs
应用E序client
database proxy
database集群
在本ơ实战中Q应用程序clientZc3p0q接后端的database proxy。database proxy负责理client实际讉Kdatabase的\q略,采用开源框架amoeba。database集群采用mysql的master-slave的replicationҎ。整个环境的l构囑֦下所C:
实战步骤与详?/p>
一.搭徏mysql的master-slave环境
1Q分别在host1Q?0.20.147.110Q和host2Q?0.20.147.111Q上安装mysqlQ?.0.45Q,具体安装Ҏ可见官方文档
2Q配|master
首先~辑/etc/my.cnfQ添加以下配|:
log-bin=mysql-bin #slave会基于此log-bin来做replication
server-id=1 #master的标C?br />
binlog-do-db = amoeba_study #用于master-slave的具体数据库
然后d专门用于replication的用P
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@10.20.147.111 IDENTIFIED BY '111111';
重启mysqlQ得配|生效:
/etc/init.d/mysqld restart
最后查看master状态:
3Q配|slave
首先~辑/etc/my.cnfQ添加以下配|:
server-id=2 #slave的标C?/p>
配置生效后,配置与master的连接:
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.20.147.110',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='111111',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=161261;
其中MASTER_HOST是master机的ipQMASTER_USER和MASTER_PASSWORD是我们刚才在master上添加的用户QMASTER_LOG_FILE和MASTER_LOG_POS对应与master status里的信息
最后启动slaveQ?/p>
mysql> start slave;
4Q验证master-slave搭徏生效
通过查看slave机的logQ?var/log/mysqld.logQ:
100703 10:51:42 [Note] Slave I/O thread: connected to master 'repl@10.20.147.110:3306', replication started in log 'mysql-bin.000003' at position 161261
如看C上信息则证明搭徏成功Q如果有问题也可通过此log扑֎?/p>
?搭徏database proxy
此次实战中database proxy采用amoeba Q它的相关信息可以查阅官Ҏ档,不在此详q?/p>
1Q安装amoeba
下蝲amoebaQ?.2.0-GAQ后解压到本圎ͼD:\openSource\amoeba-mysql-1.2.0-GAQ,卛_成安?/p>
2Q配|amoeba
先配|proxyq接和与各后端mysql服务器连接信息(D:\openSource\amoeba-mysql-1.2.0-GA\conf\amoeba.xmlQ:
<server>
<!-- proxy serverl定的端?-->
<property name="port">8066</property>
<!-- proxy serverl定的IP -->
<!--
<property name="ipAddress">127.0.0.1</property>
-->
<!-- proxy server net IO Read thread size -->
<property name="readThreadPoolSize">20</property>
<!-- proxy server client process thread size -->
<property name="clientSideThreadPoolSize">30</property>
<!-- mysql server data packet process thread size -->
<property name="serverSideThreadPoolSize">30</property>
<!-- socket Send and receive BufferSize(unit:K) -->
<property name="netBufferSize">128</property>
<!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
<property name="tcpNoDelay">true</property>
<!-- 对外验证的用户名 -->
<property name="user">root</property>
<!-- 对外验证的密?-->
<property name="password">root</property>
</server>
<server>
<!-- proxy serverl定的端?-->
<property name="port">8066</property>
<!-- proxy serverl定的IP -->
<!--
<property name="ipAddress">127.0.0.1</property>
-->
<!-- proxy server net IO Read thread size -->
<property name="readThreadPoolSize">20</property>
<!-- proxy server client process thread size -->
<property name="clientSideThreadPoolSize">30</property>
<!-- mysql server data packet process thread size -->
<property name="serverSideThreadPoolSize">30</property>
<!-- socket Send and receive BufferSize(unit:K) -->
<property name="netBufferSize">128</property>
<!-- Enable/disable TCP_NODELAY (disable/enable Nagle's algorithm). -->
<property name="tcpNoDelay">true</property>
<!-- 对外验证的用户名 -->
<property name="user">root</property>
<!-- 对外验证的密?-->
<property name="password">root</property>
</server>
以上是proxy提供lclient的连接配|?/p>
<dbServerList>
<dbServer name="server1">
<!-- PoolableObjectFactory实现c?-->
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>
<!-- 真实mysql数据库端?-->
<property name="port">3306</property>
<!-- 真实mysql数据库IP -->
<property name="ipAddress">10.20.147.110</property>
<property name="schema">amoeba_study</property>
<!-- 用于登陆mysql的用户名 -->
<property name="user">root</property>
<!-- 用于登陆mysql的密?-->
<property name="password"></property>
</factoryConfig>
<!-- ObjectPool实现c?-->
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
<dbServer name="server2">
<!-- PoolableObjectFactory实现c?-->
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>
<!-- 真实mysql数据库端?-->
<property name="port">3306</property>
<!-- 真实mysql数据库IP -->
<property name="ipAddress">10.20.147.111</property>
<property name="schema">amoeba_study</property>
<!-- 用于登陆mysql的用户名 -->
<property name="user">root</property>
<!-- 用于登陆mysql的密?-->
<property name="password"></property>
</factoryConfig>
<!-- ObjectPool实现c?-->
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
</dbServerList>
<dbServerList>
<dbServer name="server1">
<!-- PoolableObjectFactory实现c?-->
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>
<!-- 真实mysql数据库端?-->
<property name="port">3306</property>
<!-- 真实mysql数据库IP -->
<property name="ipAddress">10.20.147.110</property>
<property name="schema">amoeba_study</property>
<!-- 用于登陆mysql的用户名 -->
<property name="user">root</property>
<!-- 用于登陆mysql的密?-->
<property name="password"></property>
</factoryConfig>
<!-- ObjectPool实现c?-->
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
<dbServer name="server2">
<!-- PoolableObjectFactory实现c?-->
<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
<property name="manager">defaultManager</property>
<!-- 真实mysql数据库端?-->
<property name="port">3306</property>
<!-- 真实mysql数据库IP -->
<property name="ipAddress">10.20.147.111</property>
<property name="schema">amoeba_study</property>
<!-- 用于登陆mysql的用户名 -->
<property name="user">root</property>
<!-- 用于登陆mysql的密?-->
<property name="password"></property>
</factoryConfig>
<!-- ObjectPool实现c?-->
<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
<property name="maxActive">200</property>
<property name="maxIdle">200</property>
<property name="minIdle">10</property>
<property name="minEvictableIdleTimeMillis">600000</property>
<property name="timeBetweenEvictionRunsMillis">600000</property>
<property name="testOnBorrow">true</property>
<property name="testWhileIdle">true</property>
</poolConfig>
</dbServer>
</dbServerList>
以上是proxy与后端各mysql数据库服务器配置信息Q具体配|见注释很明白了
最后配|读写分ȝ略:
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="LRUMapSize">1500</property>
<property name="defaultPool">server1</property>
<property name="writePool">server1</property>
<property name="readPool">server2</property>
<property name="needParse">true</property>
</queryRouter>
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
<property name="LRUMapSize">1500</property>
<property name="defaultPool">server1</property>
<property name="writePool">server1</property>
<property name="readPool">server2</property>
<property name="needParse">true</property>
</queryRouter>
从以上配|不然发玎ͼ写操作\由到server1QmasterQ,L作\由到server2QslaveQ?/p>
3Q启动amoeba
在命令行里运行D:\openSource\amoeba-mysql-1.2.0-GA\amoeba.bat卛_Q?/p>
log4j:WARN log4j config load completed from file:D:\openSource\amoeba-mysql-1.2.0-GA\conf\log4j.xml
log4j:WARN ip access config load completed from file:D:\openSource\amoeba-mysql-1.2.0-GA/conf/access_list.conf
2010-07-03 09:55:33,821 INFO net.ServerableConnectionManager - Server listening on 0.0.0.0/0.0.0.0:8066.
?client端调用与试
1Q编写client调用E序
具体E序l节׃详述了,只是一个最普通的Zmysql driver的jdbc的数据库操作E序
2Q配|数据库q接
本clientZc3p0Q具体数据源配置如下Q?/p>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:8066/amoeba_study" />
<property name="user" value="root" />
<property name="password" value="root" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="1" />
<property name="maxIdleTime" value="1800" />
<property name="acquireIncrement" value="1" />
<property name="maxStatements" value="0" />
<property name="initialPoolSize" value="1" />
<property name="idleConnectionTestPeriod" value="1800" />
<property name="acquireRetryAttempts" value="6" />
<property name="acquireRetryDelay" value="1000" />
<property name="breakAfterAcquireFailure" value="false" />
<property name="testConnectionOnCheckout" value="true" />
<property name="testConnectionOnCheckin" value="false" />
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:8066/amoeba_study" />
<property name="user" value="root" />
<property name="password" value="root" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="1" />
<property name="maxIdleTime" value="1800" />
<property name="acquireIncrement" value="1" />
<property name="maxStatements" value="0" />
<property name="initialPoolSize" value="1" />
<property name="idleConnectionTestPeriod" value="1800" />
<property name="acquireRetryAttempts" value="6" />
<property name="acquireRetryDelay" value="1000" />
<property name="breakAfterAcquireFailure" value="false" />
<property name="testConnectionOnCheckout" value="true" />
<property name="testConnectionOnCheckin" value="false" />
</bean>
值得注意是,client端只需q到proxyQ与实际的数据库没有M关系Q因此jdbcUrl、user、password配置都对应于amoeba暴露出来的配|信?/p>
3Q调用与试
首先插入一条数据:insert into zone_by_id(id,name) values(20003,'name_20003')
通过查看masterZ的日?var/lib/mysql/mysql_log.logQ?/p>
100703 11:58:42 1 Query set names latin1
1 Query SET NAMES latin1
1 Query SET character_set_results = NULL
1 Query SHOW VARIABLES
1 Query SHOW COLLATION
1 Query SET autocommit=1
1 Query SET sql_mode='STRICT_TRANS_TABLES'
1 Query SHOW VARIABLES LIKE 'tx_isolation'
1 Query SHOW FULL TABLES FROM `amoeba_study` LIKE 'PROBABLYNOT'
1 Prepare [1] insert into zone_by_id(id,name) values(?,?)
1 Prepare [2] insert into zone_by_id(id,name) values(?,?)
1 Execute [2] insert into zone_by_id(id,name) values(20003,'name_20003')
得知写操作发生在masterZ
通过查看slaveZ的日?var/lib/mysql/mysql_log.logQ?/p>
100703 11:58:42 2 Query insert into zone_by_id(id,name) values(20003,'name_20003')
得知slave同步执行了这条语?/p>
然后查一条数据:select t.name from zone_by_id t where t.id = 20003
通过查看slaveZ的日?var/lib/mysql/mysql_log.logQ?/p>
100703 12:02:00 33 Query set names latin1
33 Prepare [1] select t.name from zone_by_id t where t.id = ?
33 Prepare [2] select t.name from zone_by_id t where t.id = ?
33 Execute [2] select t.name from zone_by_id t where t.id = 20003
得知L作发生在slaveZ
q且通过查看slaveZ的日?var/lib/mysql/mysql_log.log发现q条语句没在master上执?/p>
通过以上验证得知单的master-slave搭徏和实战得以生?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/cutesource/archive/2010/07/03/5710645.aspx