mysql5.1在windows下的编译方法

承接上篇,自从对postgreSQL兴趣索然后(运行不起来,不让是超级用户),我就想换mysql了,虽然mysql 让可恶的oracle持有,但毕竟是开源的,使用最广的,评价最高的,就从mysql开始一探DBMS的奥秘吧。

 

编译步骤

1、从mysql.com上下载最新源码mysql-5.1.35.zip,近40M,需要点耐心 -- 中间网站提示我不是可信任的用户,让我填表确认,填了几次都不行,最后将fixfox关了,干了会活再回来有能下载了,呵呵,是不是ORACLE故意制造麻烦,也未可知;

2、解压,阅读INSTALL-SOURCE和INSTALL-WIN-SOURCE这两个安装文件,发现文件写的一塌糊涂,前言不搭后语,总算看了个大概顺序,开始编译安装;

3、编译环境

需要VC2005及以上--呵呵,正好我机器上有个盗版的

编译还需要cmake,这个久仰大名,就是没有用过,从http://www.cmake.org下载了个最新的CMake 2.6,很快安装完成,安装目录D:/CMake 2.6;

4、执行脚本

win/configure.js WITH_INNOBASE_STORAGE_ENGINE WITH_PARTITION_STORAGE_ENGINE MYSQL_SERVER_SUFFIX=-pro

我想支持事务,所以用INNOBASE引擎,这个好像比较出名,在mysql之前已经被oracle收购

5、制作工程

执行win/build-vs8.bat

提示找不到cmake,估计是cmake安装后路径没有加进来,加上

set PATH=%PATH%;D:/CMake 2.6/bin

继续build-vs8.bat成功,cmake真不多,自动给做了一个MySql.sln

6、编译

用vc2005打开MySql.sln ,就是一对工程,开始编译吧,呵呵,一起顺利。但最后提示失败。郁闷!

根据错误提示找到sql_locale.cc文件,发现里面都是乱字符,大概看了一下,这个文件大至是个本地化文件,显示各地的月、星期的表示方法,但印度、日本、韩国、中国等字体都是乱字符,造成字符串""的双引号被转义了,造成了语法错误。我开始不相信有问题,又重新解压了这个文件,发现就是由问题。没办法,baidu一下解决办法,发现查不到,google一下,查到一些信息(呵呵,google就是比百度强)

解决办法:先在ultraEdit中转换为utf-8,然后再在vc2005中打开就没有问题了,看来是文件格式问题。

重新编译就成功了。

7、运行

好不容易在sql/debug目录下找到mysqld.exe(该死的文档中没有说),运行一把,已启动就报错。还好,提示了位置在mysqld.cc中的static void test_lc_time_sz(),哼哼,谁叫我们有源码,直接打开源码看,这个函数调用的就是前面编译不通过的sql_locale.cc,单步跟踪一下,发现原来到日本语的时候,其字符串有三个汉字大小,按宽字符应该是长度为3,当mysql.cc中按utf8字符算长度,长度一下扩大一倍,变成6了,所以对不少,直接 assert退出,google了一下无解,一怒之下将test_lc_time_sz()函数完全屏蔽,呵呵,mysqld就可以正常运行了。(难道这个问题一直没有发现,奇怪)

8、整一个运行环境

按照install文档的说法(当然其目录是错误的,完全按照其说明都找不到文件,郁闷),做了一个安装路径

mkdir D:/mysql
mkdir D:/mysql/bin
mkdir D:/mysql/data
mkdir D:/mysql/share
mkdir D:/mysql/scripts

mkdir D:/mysql/include
mkdir D:/mysql/lib
mkdir D:/mysql/lib/debug
mkdir D:/mysql/lib/opt

mkdir C:/mysql/sql-bench

copy D:/Downloads/mysql-5.1.35/client/debug/*.exe D:/mysql/bin
copy D:/Downloads/mysql-5.1.35/sql/debug/mysqld.exe D:/mysql/bin/mysqld-debug.exe
xcopy D:/Downloads/mysql-5.1.35/scripts/*.* D:/mysql/scripts /E
xcopy D:/Downloads/mysql-5.1.35/sql/share/*.* D:/mysql/share /E

copy D:/Downloads/mysql-5.1.35/libmysql/debug/mysqlclient.lib D:/mysql/lib/debug
copy D:/Downloads/mysql-5.1.35/libmysql/libmysql.* D:/mysql/lib/debug
copy D:/Downloads/mysql-5.1.35/zlib/debug/zlib.* D:/mysql/lib/debug
copy D:/Downloads/mysql-5.1.35/libmysql/debug/mysqlclient.lib d:/mysql/lib/opt
copy D:/Downloads/mysql-5.1.35/include/*.h D:/mysql/include
copy D:/Downloads/mysql-5.1.35/libmysql/libmysql.def D:/mysql/include

 

在d:/mysqld-debug --console运行

提示一堆错误,有仔细看文档,需要建立一个配置文件

echo %WINDIR%

c:/windows

在这个目录下创建一个文本文件:my.ini

内容

[mysqld]
# set basedir to your installation path
basedir=D:/mysql
# set datadir to the location of your data directory
datadir=D:/mysql/data
注意是/不是/,别搞错了

运行
mysqld-debug.exe --console
打印
Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

查了半天没有找到原因,天晚了,回去睡觉,明天继续。

 

早上有读文档,google,仍旧没有头绪,网上都是直接binary安装,没有源码编译安装,无前人经验。

分析应该是缺少一些配置文件,找目录,发现win下有个data目录,里面有个mysql目录,下面有timezone, host等文件,貌似配置文件,呵呵。

将win/data目录copy 到d:/mysql/data后,在启动mysqld-debug --console就oK了

 

9、测试运行环境

mysqladmin version status proc
mysqlshow -u root mysql
mysql test
mysql -u root -e "select Host, Db, User from db" mysql

my god!,都行

关闭server

mysqladmin -u root shutdown

也能正常关闭。

 

 

呵呵,费了两天功夫,终于装好了。不过locale这地方总是不太放心,也许有隐患,各位mysql高手如果有解决方法,请给我留言,多谢。

 

不过还不错,后面准备边单步跟踪边学习mysql,争取尽快了解DBMS背后的秘密。

 

 

 

你可能感兴趣的:(mysql5.1在windows下的编译方法)