mysql5.6在Windows下编译,试探过程记录.

编译指定的mysql版本,最好搜索英文 " Building MySQL on Windows"

mysql 编译方案:

1. 最初只支持linux shell编译. 需要bision
2. 后来支持configure编译,依旧需要bision(5.1版本)
3. 后来利用cmake编译(mysql5.6.10不支持configure安装了,提供了CMAKE安装方式 ),依旧需要bision.
可能最初版本如何编译,已经没有人知道了..
最开始mysql(3.23.49)利用shell编译(是否能在windows上跑是个问题,系统兼容性),远程debug即可,后来引入cmake管理依赖. (bision一直存在)
configure安装

教程:

1. 在普通cmd下执行cmake,会出错. 不太了解内部原理. ( 如果不是遇到@周晓瑜,这个坎肯定跨不过去,计算机就是这样,搭建环境是一个大坎. 是什么就是什么,入门太难了)
D:\Program Files (x86)\mysql_source_mysql_for_debug\mysql-5.6.27>cmake -G "Visual Studio 12 2013"
-- Running cmake version 3.4.0-rc2
-- Could NOT find Git (missing:  GIT_EXECUTABLE)
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:111 (PROJECT):
  No CMAKE_C_COMPILER could be found.
CMake Error at CMakeLists.txt:111 (PROJECT):
  No CMAKE_CXX_COMPILER could be found.
-- Configuring incomplete, errors occurred!
See also "D:/Program Files (x86)/mysql_source_mysql_for_debug/mysql-5.6.27/CMake
Files/CMakeOutput.log".
See also "D:/Program Files (x86)/mysql_source_mysql_for_debug/mysql-5.6.27/CMake
Files/CMakeError.log".

1.2 到visual的cmd去执行(第二个方案,去学习cmake,自己配置半天)

还是不对,发现不是2013 , 根据提示删除CMakeCache.txt和CMakeFiles目录. 看看这两个里是啥,学习下.

cmake -G "Visual Studio 10 2010"

1.3 bision说缺少 dll .
  下载安装,发现不兼容.

  然后发现下载的是 bin.zip包,不是gnu32.bision的setup包. 需要自己安装所有的依赖.

解决方案: 重新下载bison的setup安装包

1.4 不能有空格,不然 visual 里面执行的时候报 找不到文件.(百度搜索后 明白) 导致m4找不到.

 重新安装到 bison到无大写,无数字的目录.
 并将 mysql源目录移到无空格目录下.
 1.5 遇到 3>sql_locale.cc
2>.\sql_locale.cc(621) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
3>..\sql\sql_locale.cc(621) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
2>.\sql_locale.cc(789) : error C2146: 语法错误 : 缺少“}”(在标识符“嗒忇喃嵿嗒苦”的前面)
3>..\sql\sql_locale.cc(789) : error C2146: 语法错误 : 缺少“}”(在标识符“嗒忇喃嵿嗒苦”的前面)
2>.\sql_locale.cc(789) : error C2146: 语法错误 : 缺少“;”(在标识符“嗒忇喃嵿嗒苦”的前面)
2>.\sql_locale.cc(789) : error C2143: 语法错误 : 缺少“;”(在“字符串”的前面)
3>..\sql\sql_locale.cc(789) : error C2146: 语法错误 : 缺少“;”(在标识符“嗒忇喃嵿嗒苦”的前面)
2>.\sql_locale.cc(789) : error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
3>..\sql\sql_locale.cc(789) : error C2143: 语法错误 : 缺少“;”(在“字符串”的前面)
2>.\sql_locale.cc(789) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
3>..\sql\sql_locale.cc(789) : error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
2>.\sql_locale.cc(789) : error C2059: 语法错误 : “}”
3>..\sql\sql_locale.cc(789) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
2>.\sql_locale.cc(791) : error C2146: 语法错误 : 缺少“}”(在标识符“嗒珖嗒”的前面)
3>..\sql\sql_locale.cc(789) : error C2059: 语法错误 : “}”
2>.\sql_locale.cc(791) : error C2146: 语法错误 : 缺少“;”(在标识符“嗒珖嗒”的前面)
3>..\sql\sql_locale.cc(791) : error C2146: 语法错误 : 缺少“}”(在标识符“嗒珖嗒”的前面)
2>.\sql_locale.cc(791) : error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
3>..\sql\sql_locale.cc(791) : error C2146: 语法错误 : 缺少“;”(在标识符“嗒珖嗒”的前面)
2>.\sql_locale.cc(791) : error C2059: 语法错误 : “字符串”
3>..\sql\sql_locale.cc(791) : error C4430: 缺少类型说明符 – 假定为 int。注意: C++ 不支持默认 int
2>.\sql_locale.cc(791) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
3>..\sql\sql_locale.cc(791) : error C2059: 语法错误 : “字符串”
2>.\sql_locale.cc(791) : error C2059: 语法错误 : “}”
3>..\sql\sql_locale.cc(791) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
2>.\sql_locale.cc(793) : error C2146: 语法错误 : 缺少“}”(在标识符“嗒多珌嗒曕珝嗒班嗒距”的前面)
3>..\sql\sql_locale.cc(791) : error C2059: 语法错误 : “}”
2>.\sql_locale.cc(793) : error C2146: 语法错误 : 缺少“;”(在标识符“嗒多珌嗒曕珝嗒班嗒距”的前面)
3>..\sql\sql_locale.cc(793) : error C2146: 语法错误 : 缺少“}”(在标识符“嗒多珌嗒曕珝嗒班嗒距”的前面)
2>.\sql_locale.cc(793) : error C2143: 语法错误 : 缺少“;”(在“字符串”的前面)
3>..\sql\sql_locale.cc(793) : error C2146: 语法错误 : 缺少“;”(在标识符“嗒多珌嗒曕珝嗒班嗒距”的前面)
字符集问题
用notepad++打开sql_locale.cc
在菜单“格式”中选择“以UTF-8格式编码”,保存

1.6 SIGABRT
 “TestIfly.exe”: 已加载“C:\Windows\SysWOW64\ntdll.dll”,Cannot find or open the PDB file
 程序“[8868] TestIfly.exe: 本机”已退出,返回值为 126 (0x7e)。
 查看调用堆栈,将mysql\sql\mysqld.cc将DBUG_ASSERT(0);  注释掉. 可以成功启动了.

1.7 启动sqld后立马退出了.

搜索了" windows 编译 mysql ",见下面附件"windows 编译mysql-5.1.59"

1 将mysql\win\data整个文件夹拷贝到mysql根目录下将mysql\win\data整个文件夹拷贝到mysql根目录下  
2 、 将mysql\sql\share整个文件夹拷贝到mysql根目录下 
3、 打开vs2008编译整个代码,在cmd中到mysql\sql\Debug\执行mysqld.exe –debug 

最终胜利完成.

 在cmd中到mysql\client\Debug\ 下执行mysql -uroot –p 

14、 要调试的话,直接在vs2008中将mysqld的进程加入

使用vs2008进行调试

测试---》附加到进程




选择mysqld


代码运行最终是为了学习细节和调用堆栈:

可设置的断点,

1.MySQL源码分析以及目录结构 含启动() 网络监听

1. 比如查询的总入口是sql/sql_select.cc 中的 handle_select 函数。

看如何解析sql和通过explain 改变抽象语法树 (见参考文章 动手写 sql 解析 )

2.比如写入口

1.事务的原子性实现, . 不同隔离级别下的读实现 

     Mysql Innodb中undo-log和MVCC多版本一致性读  的实现(源码解析)http://blog.sina.com.cn/s/blog_4673e603010111ty.html

Mysql中的MVCChttp://blog.csdn.net/chen77716/article/details/6742128 

        多版本并发控制:PostgreSQL vs InnoDB  http://wangyuanzju.blog.163.com/blog/static/130292009107101544125/

2. bin log ,redo log, unlog的使用 

Mysql Innodb中undo-log和MVCC多版本一致性读  的实现(源码解析)http://blog.sina.com.cn/s/blog_4673e603010111ty.html

3. 写如何锁

http://dev.mysql.com/doc/refman/5.5/en/innodb-monitors.html


 

ps: visual studio的增强.

1. 类似eclipse里的toggle mark occurrences   https://visualstudiogallery.msdn.microsoft.com/4b92b6ad-f563-4705-8f7b-7f85ba3cc6bb Highlight all occurrences of selected word 免费

2. ctrl + /  ,输入 open 文件名. 类似 eclipse里 open type

3. ctrl+, ( 编辑--->定位到)可以直接查找方法.

4. ouline eclipse  

这个更好 Visual Assist X http://www.cr173.com/soft/32656.html

VSCommands for Visual Studio 2010
  https://visualstudiogallery.msdn.microsoft.com/d491911d-97f3-4cf6-87b0-6a2882120acf/

附件:

 windows 编译mysql-5.1.59



1、 下载源码 http://dev.mysql.com/downloads/mysql/  我用的版本号是mysql-5.1.59,下载完
成后解压到自己的一个指定目录即可。 2、 下载CMAKE,安装后,软件中会提示要不要加入path,这个选中加入path,然后在CMD
中测试是否安装成功。下载地址http://www.cmake.org 3、 我电脑中装有vs2008,大家确保自己装好这个。 
4、 下载bision,因为Mysql的词法和语法分析是使用的lex和yacc,下载地址:
http://gnuwin32.sourceforge.net/packages/bison.htm,具体是什么用,我自己也不是很清楚,看其他人说是作词法和语法的分析,这个下面再学习。 
5、 在解压缩包中有win目录, 到该目录下执行cscript configure.js 
WITH_INNOBASE_STORAGE_ENGINE WITH_PARTITION_STORAGE_ENGINE MYSQL_SERVER_SUFFIX=-pro 具体参数的用途Google一下。 6、 执行win目录下的build-vs9.bat批处理文件,这个在cmd中执行。 7、 做一个my.ini文件,内容如下: # set basedir to your installation path basedir=D:/mysql 
# set datadir to the location of your data directory datadir=D:/mysql/win/data 
将my.ini放到C:\WINDOWS下 
8、 找到sql_locale.cc文件,在sql目录下,另存为UTF-8格式,覆盖原文件 9、 修改文件\mysql\sql\mysqld.cc中的test_lc_time_sz函数,将代码  
if ((*loc)->max_month_name_length != max_month_len ||  (*loc)->max_day_name_length != max_day_len)   { 
DBUG_PRINT("Wrong max day name(or month name) length for locale:",("%s", (*loc)->name));  
 DBUG_ASSERT(0);   

} 注释掉,我这边也是,看网上其他人也是,这边不注释掉,编译不通过。Mysqld出问题。 10、 将mysql\win\data整个文件夹拷贝到mysql根目录下  11、 将mysql\sql\share整个文件夹拷贝到mysql根目录下 12、 打开vs2008编译整个代码,在cmd中到mysql\sql\Debug\执行mysqld.exe –debug 13、 在cmd中到mysql\client\Debug\ 下执行mysql -uroot –p 

14、 要调试的话,直接在vs2008中将mysqld的进程加入

发布了371 篇原创文章 · 获赞 69 · 访问量 87万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览