操作环境准备
1.在Win7上安装好Visual Studio 2013
2.下载MySQL 5.7.25源代码
3.安装CMake https://cmake.org/ 安装的时候,选择在PATH中加入
4.安装Bison: http://gnuwin32.sourceforge.net/packages/bison.htm 安装路径不要有空格
5.安装perl tool:ActivePerl-5.16.3.1604-MSWin32-x64-298023.msi
为了验证成功,可以执行以下命令:
C:\Users\Administrator>where bison C:\GnuWin32\bin\bison.exe C:\Users\Administrator>where cmake C:\CMake\bin\cmake.exe C:\Users\Administrator>where perl C:\Perl64\bin\perl.exe
如果出现找不到,那就自己加path就行了
编译操作如下:
1. MySQL5.7.25的源文件存放在D:\Code_workspace\mysql-5.7.25目录下
D:\Code_workspace\mysql-5.7.25>dir 驱动器 D 中的卷是 软件 卷的序列号是 5D84-49C8 D:\Code_workspace\mysql-5.7.25 的目录 2018-12-21 11:52. 2018-12-21 11:52 .. 2018-12-21 11:52 BUILD 2018-12-21 11:52 client 2018-12-21 11:52 cmake 2018-12-21 11:39 27,753 CMakeLists.txt 2018-12-21 11:52 cmd-line-utils 2018-12-21 11:39 13,900 config.h.cmake 2018-12-21 11:39 25,850 configure.cmake 2018-12-21 11:39 17,987 COPYING 2018-12-21 11:52 dbug 2018-12-21 11:52 Docs 2018-12-21 11:39 66,241 Doxyfile-perfschema 2018-12-21 11:52 extra 2018-12-21 11:52 include 2018-12-21 11:39 333 INSTALL 2018-12-21 11:52 libbinlogevents 2018-12-21 11:52 libbinlogstandalone 2018-12-21 11:52 libevent 2018-12-21 11:52 libmysql 2018-12-21 11:52 libmysqld 2018-12-21 11:52 libservices 2018-12-21 11:52 man 2018-12-21 11:52 mysql-test 2018-12-21 11:52 mysys 2018-12-21 11:52 mysys_ssl 2018-12-21 11:52 packaging 2018-12-21 11:52 plugin 2018-12-21 11:52 rapid 2018-12-21 11:39 2,478 README 2018-12-21 11:52 regex 2018-12-21 11:52 scripts 2018-12-21 11:52 sql 2018-12-21 11:52 sql-common 2018-12-21 11:52 storage 2018-12-21 11:52 strings 2018-12-21 11:52 support-files 2018-12-21 11:52 testclients 2018-12-21 11:52 unittest 2018-12-21 11:39 88 VERSION 2018-12-21 11:52 vio 2018-12-21 11:52 win 2018-12-21 11:52 zlib 8 个文件 154,630 字节 35 个目录 18,364,108,800 可用字节
2.将boost文件存放在D:\Code_workspace\boost_1_59_0目录下
3.创建BLD文件夹并进入该文件夹。
D:\Code_workspace\mysql-5.7.25>mkdir BLD D:\Code_workspace\mysql-5.7.25>cd BLD D:\Code_workspace\mysql-5.7.25\BLD>
4.执行下面的命令,会下载boost文件夹,并在BLD文件夹下创建相关的项目文件:
D:\Code_workspace\mysql-5.7.25\BLD>cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST="D:\Code_workspace\boost_1_59_0" -- Building for: Visual Studio 12 2013 CMake Deprecation Warning at CMakeLists.txt:28 (CMAKE_POLICY): The OLD behavior for policy CMP0018 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. CMake Deprecation Warning at CMakeLists.txt:34 (CMAKE_POLICY): The OLD behavior for policy CMP0022 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. CMake Deprecation Warning at CMakeLists.txt:41 (CMAKE_POLICY): The OLD behavior for policy CMP0045 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. CMake Deprecation Warning at CMakeLists.txt:42 (CMAKE_POLICY): The OLD behavior for policy CMP0042 will be removed from a future version of CMake. The cmake-policies(7) manual explains that the OLD behaviors of all policies are deprecated and that a policy should be set to OLD only under specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. -- Running cmake version 3.15.0-rc1 -- Could NOT find Git (missing: GIT_EXECUTABLE) -- Configuring with MAX_INDEXES = 64U -- The C compiler identification is MSVC 18.0.21005.1 -- The CXX compiler identification is MSVC 18.0.21005.1 -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/cl.exe -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/cl.exe -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/cl.exe -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/cl.exe -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- CMAKE_GENERATOR: Visual Studio 12 2013 -- Looking for sys/types.h CMake Warning (dev) at C:/CMake/share/cmake-3.15/Modules/CheckIncludeFile.cmake:80 (message): Policy CMP0075 is not set: Include file check macros honor CMAKE_REQUIRED_LIBRARIES. Run "cmake --help-policy CMP0075" for policy details. Use the cmake_policy command to set the policy and suppress this warning. CMAKE_REQUIRED_LIBRARIES is set to: ws2_32 For compatibility with CMake 3.11 and below this check is ignoring it. Call Stack (most recent call first): C:/CMake/share/cmake-3.15/Modules/CheckTypeSize.cmake:230 (check_include_file) CMakeLists.txt:190 (CHECK_TYPE_SIZE) This warning is for project developers. Use -Wno-dev to suppress it. -- Looking for sys/types.h - found -- Looking for stdint.h -- Looking for stdint.h - found -- Looking for stddef.h -- Looking for stddef.h - found -- Check size of void * -- Check size of void * - done -- SIZEOF_VOIDP 4 -- MySQL 5.7.25 -- Packaging as: mysql-5.7.25-win32 -- Local boost dir D:/Code_workspace/boost_1_59_0 -- Found D:/Code_workspace/boost_1_59_0/boost/version.hpp -- BOOST_VERSION_NUMBER is #define BOOST_VERSION 105900 -- BOOST_INCLUDE_DIR D:/Code_workspace/boost_1_59_0 -- Found Threads: TRUE -- Looking for include file crypt.h -- Looking for include file crypt.h - not found -- Looking for getnameinfo -- Looking for getnameinfo - not found -- Looking for inet_ntop -- Looking for inet_ntop - not found -- Looking for log2 -- Looking for log2 - found -- Looking for isinf -- Looking for isinf - found -- Performing Test HAVE_CXX_ISINF -- Performing Test HAVE_CXX_ISINF - Success -- Check size of struct timespec -- Check size of struct timespec - failed -- Performing Test HAVE_VISIBILITY_HIDDEN -- Performing Test HAVE_VISIBILITY_HIDDEN - Success -- Check size of struct sockaddr_in6 -- Check size of struct sockaddr_in6 - done -- Check size of struct in6_addr -- Check size of struct in6_addr - done -- Performing Test HAVE_IMPLICIT_DEPENDENT_NAME_TYPING -- Performing Test HAVE_IMPLICIT_DEPENDENT_NAME_TYPING - Success -- Looking for chown -- Looking for chown - not found -- Looking for include file numa.h -- Looking for include file numa.h - not found -- Looking for include file numaif.h -- Looking for include file numaif.h - not found -- NUMA library missing or required version not available -- Check size of socklen_t -- Check size of socklen_t - failed -- Check size of off64_t -- Check size of off64_t - failed -- Looking for unistd.h -- Looking for unistd.h - not found -- Performing Test HAVE_STRINGOP_OVERFLOW -- Performing Test HAVE_STRINGOP_OVERFLOW - Failed -- Performing Test HAVE_NO_UNUSED_CONST_VAR -- Performing Test HAVE_NO_UNUSED_CONST_VAR - Failed -- Cannot find system sasl libraries. -- WITH_PROTOBUF=bundled -- Performing Test HAVE_NO_SIGN_COMPARE -- Performing Test HAVE_NO_SIGN_COMPARE - Failed -- Performing Test HAVE_NO_UNUSED_TYPEDEFS -- Performing Test HAVE_NO_UNUSED_TYPEDEFS - Failed -- Performing Test HAVE_NO_IGNORED_QUALIFIERS -- Performing Test HAVE_NO_IGNORED_QUALIFIERS - Failed -- Performing Test HAVE_NO_RETURN_TYPE -- Performing Test HAVE_NO_RETURN_TYPE - Failed -- Performing Test HAVE_NO_UNUSED_FUNCTION -- Performing Test HAVE_NO_UNUSED_FUNCTION - Failed -- Performing Test HAVE_MAYBE_UNINITIALIZED -- Performing Test HAVE_MAYBE_UNINITIALIZED - Failed -- Performing Test HAVE_UNUSED_BUT_SET -- Performing Test HAVE_UNUSED_BUT_SET - Failed -- protobuf version is 2.6 -- Performing Test HAVE_SYS_THREAD_SELFID -- Performing Test HAVE_SYS_THREAD_SELFID - Failed -- Performing Test HAVE_SYS_GETTID -- Performing Test HAVE_SYS_GETTID - Failed -- Performing Test HAVE_PTHREAD_GETTHREADID_NP -- Performing Test HAVE_PTHREAD_GETTHREADID_NP - Failed -- Performing Test HAVE_INTEGER_PTHREAD_SELF -- Performing Test HAVE_INTEGER_PTHREAD_SELF - Failed -- Performing Test HAVE_STRINGOP_TRUNCATION -- Performing Test HAVE_STRINGOP_TRUNCATION - Failed -- Creating LDAP authentication SASL client library. -- You need to set WITH_SASL path to build LDAP SASL client authentication plugin. -- Library mysqlclient depends on OSLIBS ws2_32;Secur32 -- MERGE_CONVENIENCE_LIBRARIES TARGET mysqlclient -- MERGE_CONVENIENCE_LIBRARIES LIBS clientlib;dbug;strings;vio;mysys;mysys_ssl;zlib;yassl;taocrypt;auth_win_client -- MERGE_CONVENIENCE_LIBRARIES MYLIBS clientlib;dbug;strings;vio;mysys;mysys_ssl;zlib;yassl;taocrypt;auth_win_client -- Looking for include file endian.h -- Looking for include file endian.h - not found -- Check size of long long -- Check size of long long - done -- Check size of long -- Check size of long - done -- Check size of int -- Check size of int - done -- Check if the system is big endian -- Searching 16 bit integer -- Check size of unsigned short -- Check size of unsigned short - done -- Using unsigned short -- Check if the system is big endian - little endian -- Performing Test HAVE_CAST_FUNCTION_TYPE -- Performing Test HAVE_CAST_FUNCTION_TYPE - Failed -- Using cmake version 3.15.0-rc1 -- Not building NDB -- Performing Test HAVE_UNUSED_TYPEDEFS -- Performing Test HAVE_UNUSED_TYPEDEFS - Failed -- Performing Test HAVE_STRUCT_SOCKADDR_SA_LEN -- Performing Test HAVE_STRUCT_SOCKADDR_SA_LEN - Failed -- Performing Test HAVE_STRUCT_IFREQ_IFR_NAME -- Performing Test HAVE_STRUCT_IFREQ_IFR_NAME - Failed -- Performing Test HAVE_XDR_OPS_X_PUTINT32 -- Performing Test HAVE_XDR_OPS_X_PUTINT32 - Success -- Performing Test HAVE_XDR_OPS_X_GETINT32 -- Performing Test HAVE_XDR_OPS_X_GETINT32 - Success -- Performing Test HAVE___CONST -- Performing Test HAVE___CONST - Success -- Performing Test HAVE_RPC_INLINE_T -- Performing Test HAVE_RPC_INLINE_T - Failed -- Using Boost headers from D:/Code_workspace/boost_1_59_0 -- Performing Test CXX_HAVE_SIGN_COMPARE -- Performing Test CXX_HAVE_SIGN_COMPARE - Failed -- Performing Test CXX_HAVE_UNUSED_VARIABLE -- Performing Test CXX_HAVE_UNUSED_VARIABLE - Failed -- MYSQLX - Text log of protobuf messages enabled -- Performing Test HAVE_UNUSED_PARAMETER -- Performing Test HAVE_UNUSED_PARAMETER - Failed -- Googletest was not found. gtest-based unit tests will be disabled. You can run cmake . -DENABLE_DOWNLOADS=1 to automatically download and build required components from source. -- If you are inside a firewall, you may need to use an https proxy: export https_proxy=http://example.com:80 -- Performing Test HAVE_MISLEADING_INDENTATION -- Performing Test HAVE_MISLEADING_INDENTATION - Failed -- Performing Test HAVE_NO_BUILTIN_MEMCMP -- Performing Test HAVE_NO_BUILTIN_MEMCMP - Success -- executable target mysqld debug_target D:/Code_workspace/mysql-5.7.25/BLD/sql/Debug/mysqld.exe -- Library mysqlserver depends on OSLIBS ws2_32 -- MERGE_CONVENIENCE_LIBRARIES TARGET mysqlserver -- MERGE_CONVENIENCE_LIBRARIES LIBS dbug;strings;regex;mysys;mysys_ssl;vio;zlib;yassl;taocrypt;archive_embedded;blackhole_embedded;csv_embedded;federated_embedded;heap_embedded;inn obase;lz4_lib;myisam_embedded;myisammrg_embedded;partition_embedded;ngram_parser;sql_embedded -- MERGE_CONVENIENCE_LIBRARIES MYLIBS dbug;strings;regex;mysys;mysys_ssl;vio;zlib;yassl;taocrypt;archive_embedded;blackhole_embedded;csv_embedded;federated_embedded;heap_embedded;i nnobase;lz4_lib;myisam_embedded;myisammrg_embedded;partition_embedded;ngram_parser;sql_embedded -- WIX_DIR WIX_DIR-NOTFOUND path C:\Program Files/WiX Toolset V3.8 -- WIX_DIR WIX_DIR-NOTFOUND path C:\Program Files/WiX Toolset V3.8/bin -- WIX_DIR WIX_DIR-NOTFOUND path C:\Program Files (x86)/WiX Toolset V3.8 -- WIX_DIR WIX_DIR-NOTFOUND path C:\Program Files (x86)/WiX Toolset V3.8/bin -- WIX_DIR WIX_DIR-NOTFOUND looked at -- Cannot find wix 3, installer project will not be generated -- COMPILE_DEFINITIONS: _WIN32_WINNT=0x0601;WIN32_LEAN_AND_MEAN;NOGDI;NOMINMAX;BOOST_GEOMETRY_SQRT_CHECK_FINITENESS;HAVE_CONFIG_H;HAVE_LIBEVENT1 -- CMAKE_C_FLAGS: /DWIN32 /D_WINDOWS /W3 /MP /wd4800 /wd4805 /wd4996 -- CMAKE_CXX_FLAGS: /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MP /wd4800 /wd4805 /wd4996 /we4099 -- CMAKE_C_LINK_FLAGS: -- CMAKE_CXX_LINK_FLAGS: -- CMAKE_C_FLAGS_DEBUG: /MDd /Z7 /Ob1 /Od /RTC1 /EHsc -DENABLED_DEBUG_SYNC -DSAFE_MUTEX -- CMAKE_CXX_FLAGS_DEBUG: /MDd /Z7 /Ob1 /Od /RTC1 /EHsc -DENABLED_DEBUG_SYNC -DSAFE_MUTEX -- CMAKE_C_FLAGS_RELWITHDEBINFO: /MD /Z7 /O2 /Ob1 /DNDEBUG /EHsc -DDBUG_OFF -- CMAKE_CXX_FLAGS_RELWITHDEBINFO: /MD /Z7 /O2 /Ob1 /DNDEBUG /EHsc -DDBUG_OFF -- Configuring done -- Generating done -- Build files have been written to: D:/Code_workspace/mysql-5.7.25/BLD D:\Code_workspace\mysql-5.7.25\BLD>
如果是编译64位,需要加参数 cmake .. –G “Visual Studio 12 2013 Win64”
5.打开sql\sql_locale.cc文件,用UTF-8的格式,再保存一遍,否则编译会出错。
6.运行下面的命令开始编译源码
D:\Code_workspace\mysql-5.7.25\BLD>cmake --build . --config relwithdebinfo --target package ........ 正在创建库 D:/Code_workspace/mysql-5.7.25/BLD/sql/RelWithDebInfo/udf_example.lib 和对象 D:/Code_workspace/mysql-5.7.25/BLD/sql/RelWithDebInfo/udf_example.exp udf_example.vcxproj -> D:\Code_workspace\mysql-5.7.25\BLD\sql\RelWithDebInfo\udf_example.dll Building Custom Rule D:/Code_workspace/mysql-5.7.25/plugin/password_validation/CMakeLists.txt validate_password.cc 正在创建库 D:/Code_workspace/mysql-5.7.25/BLD/plugin/password_validation/RelWithDebInfo/validate_password.lib 和对象 D:/Code_workspace/mysql-5.7.25/BLD/plugin/password_validat ion/Rel WithDebInfo/validate_password.exp validate_password.vcxproj -> D:\Code_workspace\mysql-5.7.25\BLD\plugin\password_validation\RelWithDebInfo\validate_password.dll Building Custom Rule D:/Code_workspace/mysql-5.7.25/plugin/version_token/CMakeLists.txt version_token.cc 正在创建库 D:/Code_workspace/mysql-5.7.25/BLD/plugin/version_token/RelWithDebInfo/version_token.lib 和对象 D:/Code_workspace/mysql-5.7.25/BLD/plugin/version_token/RelWithDebIn fo/vers ion_token.exp version_token.vcxproj -> D:\Code_workspace\mysql-5.7.25\BLD\plugin\version_token\RelWithDebInfo\version_token.dll Building Custom Rule D:/Code_workspace/mysql-5.7.25/extra/CMakeLists.txt zlib_decompress.cc zlib_decompress.vcxproj -> D:\Code_workspace\mysql-5.7.25\BLD\extra\RelWithDebInfo\zlib_decompress.exe Building Custom Rule D:/Code_workspace/mysql-5.7.25/CMakeLists.txt CPack: Create package using ZIP CPack: Install projects CPack: - Install project: MySQL CPack: Create package CPack: - package: D:/Code_workspace/mysql-5.7.25/BLD/mysql-5.7.25-win32.zip generated.
在文件夹中,有MySQL文件夹和winzip包产生:
D:\Code_workspace\mysql-5.7.25\BLD\_CPack_Packages\win32\ZIP>dir 驱动器 D 中的卷是 软件 卷的序列号是 5D84-49C8 D:\Code_workspace\mysql-5.7.25\BLD\_CPack_Packages\win32\ZIP 的目录 2019-06-13 23:26. 2019-06-13 23:26 .. 2019-06-13 23:25 mysql-5.7.25-win32 2019-06-13 23:26 426,298,188 mysql-5.7.25-win32.zip 1 个文件 426,298,188 字节 3 个目录 6,277,496,832 可用字节
下面使用自己编译的安装包来进行安装
1.将生成的安装包mysql-5.7.25-win32.zip解压D:\mysql-5.7.25-win32目录中,
2.在D:\mysql-5.7.25-win32目录中创建一个data目录用来存放数据文件
3.在mysql-5.7.25-win32根目录下创建my.ini文件添加以下内容
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8mb4 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=D:\mysql-5.7.25-win32 # 设置 mysql数据库的数据的存放目录 datadir=D:\mysql-5.7.25-win32\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集 character-set-server=utf8mb4 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB explicit_defaults_for_timestamp=true log-error=D:\mysql-5.7.25-win32\mysql.err pid-file=D:\mysql-5.7.25-win32\mysqld.pid socket =D:\mysql-5.7.25-win32\mysql.sock
4.文件目录切换至cmd所在路径(C:\Windows\System32\cmd.exe),右键以管理员身份运行cmd.exe,命令行进入mysql的bin目录,初始化数据库文件
C:\Users\Administrator>D: D:\>cd D:\mysql-5.7.25-win32\bin D:\mysql-5.7.25-win32\bin>mysqld --defaults-file=D:\mysql-5.7.25-win32\my.ini - -initialize D:\mysql-5.7.25-win32\bin>
5.初始化成功后会在my.ini配置文件的datadir的目录下生成一些文件,其中mysql.err文件里说明了root账户的临时密码。例如:)CRHHke1mik=就是root账户的临时密码
2019-06-14T02:21:39.232301Z 0 [Warning] InnoDB: New log files created, LSN=45790 2019-06-14T02:21:39.335307Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2019-06-14T02:21:39.388310Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 2447abd5-8e4b-11e9-81b2-00505683446c. 2019-06-14T02:21:39.395311Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2019-06-14T02:21:39.442313Z 1 [Note] A temporary password is generated for root@localhost: )CRHHke1mik=
6.注册MySQL服务
D:\mysql-5.7.25-win32\bin>mysqld -install MySQL Service successfully installed.
7.启动MySQL服务
C:\Users\Administrator>net start MySQL MySQL 服务正在启动 . MySQL 服务已经启动成功。
8.使用root账号登录MySQL数据库
D:\mysql-5.7.25-win32\bin>mysql -u root -p Enter password: ************ Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.25 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement befo re executing this statement. mysql>
9.修改root用户密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec)
10.使用修改后的密码进行登录
D:\mysql-5.7.25-win32\bin>mysql -u root -p Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.25 Source distribution Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)
到此使用vs2013编译的MySQL源码在Win7上安装完成了。