处理mysql代码编译问题
在windows平台下编译mysql的源代码,根据其版本的不同要求的编译器不同,例如3。23的版本可以采用Micorsoft Vitual C++ 6.0,windows xp平台,进行编译,但是5.1的源代码则需要Vitual Studio 2003或以上的编译平台才可以。因为目前工作平台是windows xp操作系统,已安装Micorsoft Vitual C++ 6.0编译平台,本人比较熟于此平台操作,出于方便性考虑,采用了VC6.0平台,这也是为什么下载5.1版本的源代码之后不可以用VC6.0编译的问题。
正确选择好平台后,还需要熟悉VC6.0平台的相关设置问题,比如多个工程的编译问题,因为以前基本没有涉及过多个工程的问题,因此在开始的编译阶段出现了诸多问题:
Ø Mysql主要是通过mysqld.exe来启动服务器的,因此我们的首要任务是要编译调试mysqld这个工程,刚开始打开工程时默认是选择mysqlmanage工程,这时进行编译生成就只有mysqlmanage.exe ,不会生成mysqld的,这也是第一个错误,当时一直很纳闷,后来才知道,是多工程编译的问题,多工程编译就是把一个项目的多个工程放到同一个工作空间中进行编译,在编译之前可以自己选择要编译的工程,这个通过选择“工程”下面的“设置活动工程”就可以设定了,在此我们首先将其设置为mysqld工程。
Ø 设置后工程之后就可以对mysqld工程进行编译了,首次编译出现下面的错误:
看提示是说在当前目录下的strxmov.asm中有一个未知符号ml,但是不知道怎么解决,后来在网上搜索后发现其解决方法:
将源代码中的strings目录中noMASM目录下的STRINGS.DSP和STRINGS.DSW两个文件拷贝到strings目录下,选择覆盖即可。
然后重新编译mysqld工程,这次的编译一帆风顺,直接生成了exe文件。
Ø 生成之后就可以按照mysql手册上说的构建mysql了,其具体操作如下:
1. 创建安装MySQL的目录。例如,要安装到C:/mysql,使用命令:
2. C:/> mkdir C:/mysql3. C:/> mkdir C:/mysql/bin4. C:/> mkdir C:/mysql/data5. C:/> mkdir C:/mysql/share6. C:/> mkdir C:/mysql/scripts如果想要编译其它客户端程序并连接到MySQL,你还需要创建几个目录:
C:/> mkdir C:/mysql/includeC:/> mkdir C:/mysql/libC:/> mkdir C:/mysql/lib/debugC:/> mkdir C:/mysql/lib/opt因为我们使用的是mysql的客户端程序连接到mysql的,所以不需要上述目录。7. 将下面的目录从workdir目录复制到C:/mysql目录:
8. C:/> cd /workdir9. C:/workdir> copy client_release/*.exe C:/mysql/bin10. C:/workdir> copy client_debug/mysqld.exe C:/mysql/bin/mysqld-debug.exe11. C:/workdir> xcopy scripts/*.* C:/mysql/scripts /E12. C:/workdir> xcopy share/*.* C:/mysql/share /E
至此构建完毕mysql,接下来我们就可以安装mysql进行测试,安装mysql需要在cmd命令行终端中进行,我们在windows“开始”的“运行”中输入cmd 就可以打开命令行终端了,在终端中输入cd /D c:/mysql/bin切换到bin目录,然后输入mysqld -install
就可以安装mysql为服务了,继续输入net start mysql就可以启动服务了,这里我们发现提示10060错误,无法启动,查阅手册2.3.14节可以发现mysql启动需要配置默认服务配置文件my.ini这个文件默认保存在windows目录下,手册的说明如下:
可以通过文本编辑器(例如记事本)来创建并修改选项文件。例如,如果MySQL安装在E:/mysql下,数据目录在D:/MySQLdata,你可以创建选项文件并设置[mysqld]来指定basedir和datadir参数的值:
[mysqld]# set basedir to your installation pathbasedir=E:/mysql# set datadir to the location of your data directorydatadir=D:/MySQLdata请注意应使用(正)斜线而不是反斜线在选项文件中指定Windows路径名。如果使用反斜线,则必须使用双斜线:
[mysqld]# set basedir to your installation pathbasedir=C://Program Files//MySQL//MySQL Server 5.1# set datadir to the location of your data directorydatadir=D://MySQLdata 据此,在windows目录下新建my.ini配置文件,内容如下:
[mysqld]
basedir=c:/mysql
#bind-address=192.168.1.12
datadir=c:/mysql/data
[WinMySQLadmin]
Server=c:/mysql/bin/mysqld.exe
user=root
password=admin
注意目录中的/不可以换成/,因为这是基于Linux中的,所以是按照linux格式写的。如果一定要用windows下的格式,可以换成//,
本以为就此OK了,重新启动服务器还是无法启动,后来查看data目录中的mysql.err错误文件,提示:System error 1067 has occurred. Fatal error: Can't open privilege tables: Table 'mysql.host' doesn't exist我想可能拷贝的数据库的问题,要运行mysql数据库服务器必须得有些初始数据,开始我从安装的二进制分发版中的data中拷贝了一下数据库,放到了构建的data目录中,构建的是3.23版本,拷贝的数据文件是4.1版本的,由于数据库的不兼容,造成无法启动服务器。明白之后从网上下载了一个3.23的安装版的mysql,安装后将其数据库文件拷贝到构建的data目录中,启动成功。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xdxiaodao/archive/2008/05/27/2488140.aspx
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xdxiaodao/archive/2008/05/27/2488140.aspx