阅读更多
编译步骤
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
也能正常关闭。