mysql5.1在windows上的编译方法

mysql5.1在windows下的编译方法

编译步骤

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

也能正常关闭。