工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表分类:mysql/db

今天又细读了mysql手册的集群部分

今天又细读了下mysql手册的集群部分,更深的理解了些疑问.

最近好懒,发现我现在越来越懒了,怎么办?

Can't locate DBI.pm in @INC (@INC contains:

 ./run-all-tests
Can't locate DBI.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr
/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib
/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/per
l5/site_perl/5.8.1/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/s
ite_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2 /usr/l
ib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.5/
i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/
i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.1/
i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5
/usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/
vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at ./run-all-tests line 36.
BEGIN failed--compilation aborted at ./run-all-tests line 36.

出现这个错误,同上一篇类似,也就是你的DBI模块没装.同样的方法,到ISO文件里找到 perl-DBI-1.40-5.i386.rpm,上传,安装

再次执行,出了新的问题.

 ./run-all-tests
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-th
read-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.
8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2/
i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.1/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0/i386
-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /
usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_pe
rl /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-mul
ti /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-mul
ti /usr/lib/perl5/vendor_perl/5.8.1/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-mul
ti /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/per
l5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl
.) at (eval 51) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: ExampleP, Proxy, Sponge.
 at /www/servers/mysqlclu/sql-bench/server-cfg line 247

这里就是DBD的问题了.再把 perl-DBD-MySQL-2.9004-3.1.i386.rpm 装一下

但时安装时又出了个错.

rpm -ivh /www/perl-DBD-MySQL-2.9004-3.1.i386.rpm
warning: /www/perl-DBD-MySQL-2.9004-3.1.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
error: Failed dependencies:
        libmysqlclient.so.14 is needed by perl-DBD-MySQL-2.9004-3.1.i386
    Suggested resolutions:
        mysql-4.1.7-4.RHEL4.1.i386.rpm

这个是程序的依懒关系,也和版本有关.

到这里,可以按照上面的方法,再一个个找出来安装(比较麻烦),或者干脆加个参数 --nodeps 去掉这个依懒关系的检查.就可以安装了,但这样的话,有可能会安装后也不能正常使用.如果这样,那就办法了,只有一个个找出来装了.

install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains:

在装好mysql后,用mysql自身提供一些测试程序时,时常会有这样的错误.这是因为这些测试程序都是用perl写的,也就是用perl连接数据库有些问题.

如提示下面这个错误,是说你的系统里少装了一个DBD的模块.可以用rpm -qa | grep "name"来查找你所有的东东有没装.

 ./run-all-tests
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains:
/usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5
/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-lin
ux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/
perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.1/i38
6-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr
/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_pe
rl/5.8.3 /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/
perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.5/
i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi
 /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_
perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.1/i386-linux-t
hread-multi /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/pe
rl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_per
l/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/l
ib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at (eval 51) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: ExampleP, Proxy, Sponge.
 at /www/servers/mysqlclu/sql-bench/server-cfg line 247

在网上找了下,但没找到具体的原因和安装方法.但觉得是DBD的模块问题.网上也没找到有这个模块.就在RHEL4的ISO文件里找,在第二张光盘里有一个 perl-DBD-MySQL-2.9004-3.1.i386.rpm ,把这个上传,安装就OK了

 

mysql集群,负载均衡

昨天作了一个mysql的集群测试.用了三台机.一台作管理(实际上是作数据同步用),两个节点.两个节点间的数据,是实时同步的,但在存储引擎里得用ndbcluster.只是简单测试了这个集群效果.因为之前一直不太理解,他这个数据是如何同步.原来是通过管理机来实现实时的同步.这样的话,我觉得,在写数据频繁的应用上,效率不好(网上很多文章也这样说.更多的是说mysql的集群问题太多,限制太多),但在select的应用上,确实有不错的效果,以及达到分流效果.

这里所说的集群,是mysql官方的方法做的.和其它集群应用是不同的.如LVS.在LVS里,管理机是实现分流调度的.而mysql这里的管理机,只不过是起到一个数据同步的作用,没有分流的作用.这样的话,应用上,限制就比较多了

不过,这个数据同步问题解决了.要是再加一层LVS来作分流调度,应该是一个比较理想的mysql集群负载均衡了.至少在读频繁的应用上,会有不错的效果.但在写频繁的应用上,就有待测试了

此次所有的mysql版本是5.0,45

还有,在mysql集群上还有一个问题,就是那些数据都存储在内存上,也就是需要很大的内存.这里也是一个限制了.不过,在5.1版以后的这个问题,会有改善.

接下来,将会作这一系列的测试

 

mysql max 版本的下载相关问题

最近要做mysql集群,今天就准备下载回来装一下.可跑到mysql的官网上看,却怎么也找不到mysql的MAX版本,因为做集群的就要这个版本.奇怪了,以前都有的,怎么现在没有了.难不成mysql不对企业版开源也不发布这个版本了.找了半天都见不到,烦了.网上搜了下也没结果.没办法,只有看官网的说明文档了.只是E文太差,看得比较辛苦

MySQL 5.0 Reference Manual  的 16.3.1. Building MySQL Cluster from Source Code 这一节说明如下:

NDB, the Cluster storage engine, is available in binary distributions for Linux, Mac OS X, and Solaris. We are working to make Cluster run on all operating systems supported by MySQL, including Windows.

If you choose to build from a source tarball or the MySQL 5.0 BitKeeper tree, be sure to use the --with-ndbcluster option when running configure. You can also use the BUILD/compile-pentium-max build script. Note that this script includes OpenSSL, so you must either have or obtain OpenSSL to build successfully, or else modify compile-pentium-max to exclude this requirement. Of course, you can also just follow the standard instructions for compiling your own binaries, and then perform the usual tests and installation procedure. See Section 2.4.15.3, “Installing from the Development Source Tree”.

You should also note that compile-pentium-max installs MySQL to the directory /usr/local/mysql, placing all MySQL Cluster executables, scripts, databases, and support files in subdirectories under this directory. If this is not what you desire, be sure to modify the script accordingly.

(原文http://dev.mysql.com/doc/refman/5.0/en/mysql-cluster-building.html)

可以在编译时加个参数,或是自己编译,这样就爽了.今天又学到新知识了.

之前还在想,如果mysql的社区版不支持这个,那不是很麻烦.想做集群也没得做了,要做也只得花M了.呵呵.看来是多虑了

这几天也看了些文章,有的说mysql做集群不稳定,有的说很稳定.看来是要看具体的应用了.不过,要自己测试过就知道是怎样了.

 

mysql当前版本

MySQL开发过程中,同时存在多个发布系列,每个发布处在成熟度的不同阶段:

·         MySQL 5.2是最新开发的发布系列,是将执行新功能的系列。不久的将来可以使用Alpha发行,以便感兴趣的用户进行广泛的测试。

·         MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布;没有增加会影响稳定性的新功能。

·         MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布;没有增加会影响该系列的重要功能。

·         MySQL 4.03.23是旧的稳定(产品质量)发布系列。该版本不再使用,新的发布只用来修复特别严重的漏洞(以前的安全问题)。

我们不认为有完全的冻结版,因为任何版本均需要对漏洞进行修复和其它修复。对于“某种程度的冻结”,我们是指我们可以在产品发布中增加一些不会影响当前工作的小东西。自然,前一系列的相关漏洞修复会移植到后面的系列。

数据库编码处理

数据库编码处理
 
/usr/local/mysql/bin/mysqldump -uroot -p --default-character-set=latin1 --extended-insert=FALSE bbs > R_Dumpbbs.sql
 
sed -e '/^--/d' -e '/^\/\*/d' -e '/^$/d' -e 's/latin1_bin/utf8_bin/' -e 's/latin1/utf8/' R_Dumpbbs.sql > R_Dumpbbs_modi.sql
 
/usr/local/mysql/bin/mysql -uroot -p --default-character-set=gb2312 bbs < R_Dumpbbs_modi.sql
 

解释一下:
第一行是导出,其中latin1是原来数据库的编码,--extended-insert=FALSE是为了导出为多行Insert,不然可能因为Insert语句过长出错;
第二行修改,sed语句是把可能出错的一些内容删掉,还有把导入时设置的表和字段类型改成utf8;
第三行是导入,gb2312是输入文件用的编码类型,个人理解是这样的:原来数据库使用latin编码,但存储数据的时候是用gb2312,其间mysql会对其进行转换,所以导出的时候用的是latin编码,但是其中的内容其实是gb2312的,所以导入的时候采用gb2312编码,因为第二行中已经把标类型改成utf8了,所以建出来的表是utf8的,而数据会通过mysql自己把gb2312转成utf8,这样进到数据库中的数据就是utf8的了。
因为之前导出的时候没有使用--extended-insert=FALSE,造成导入超慢(虽然导出500m只用了不到5分钟),导了4小时了都还没100m,所以目前还在转,估计晚上的时候就会因为Insert语句太长处错了。
不过之前有拿其中一个表测试了一下,好像没问题(判断方法:在phpmyadmin底下看到的内容没有乱码)。
先这样,如果有新进展会继续更新的。如果有错,请指正。

PS:因为论坛白天的时候不能关,所以要再次导出要等到晚上了,使用--extended-insert=FALSE以后估计需要4小时才能导出,不过导入的时候可能只要半小时左右就可以了。
PS2:个人认为该方法并不局限于vbb数据库转码,可以适用于所有mysql数据的编码转换。
 
win下可使用类似如下语句处理。


mysqldump -uroot -p --quick --compatible=mysql40 --default-character-set=latin1 --extended-insert=FALSE test1 > d:/zzz.sql

mysql -uroot -p --default-character-set=gb2312 test2 < d:/zzz.sql

 
 
1.导出4.0兼容sql文件
 
2.导入到指定库
 
经过验证1G数据导出约10分钟不到 字符替换10分钟不到,导入约半小时。
此命令同时适合unix系统.

关于Illegal mix of collations错误的解决方法_mysql

在网上搜索了下,有同样问题的挺多,但似乎没一个解决方法.

我觉得是字符集原因,才会出现这个错误.

如你建库时选用了GBK,在程序里没有设置GBK的话,就会出现这个错误.

设置方法如下:

SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary

$dbcharset为你的字符集,如上面的GBK.$dbcharset='gbk';这样设置后,就正常了.

如是用默认的话,应该是不会有这个错误的.

如有任何问题, 欢迎在此讨论

Records:5912345678