MySQL运维实战(1.3)安装部署:源码编译安装

作者:俊达

引言

在大多数情况下,我们不需要自己编译MySQL源码,因为编译的MySQL和二进制包的内容基本一致。然而,有些特殊情况可能需要我们采用源码编译的方式安装MySQL:

  • 安装非标准版本的MySQL:有些特殊的应用场景会使用到MySQL的非标准版本,这时候我们就需要编译源码来安装。
  • 安装社区的patch、bugfix、扩展插件:通过源码编译,可以轻松地添加社区提供的补丁、修复程序和扩展插件,以满足特定需求。
  • 禁用二进制版本中的某些特性:源码编译可以让用户选择禁用或启用某些特定功能,以满足自己的需求。
  • 使用未编译的功能:有些功能可能在二进制版本中并没有被编译进去,而通过源码编译可以启用这些功能。
  • 使用其他编译器优化插件:源码编译可以让用户选择使用其他编译器进行编译,或者进行一些个性化的优化设置。例如,如果我们想要使用Intel的C编译器。
  • 链接一些其他基础库:源码编译可以允许用户链接其他基础库,例如使用tcmalloc等。
  • 编译debug版本:通过源码编译可以生成debug版本的MySQL,用于调试和分析问题。

因此,了解MySQL源码编译安装对于学习MySQL运维来说,确实是非常有帮助的。这不仅可以帮助我们更好地理解MySQL的工作原理,还可以让我们在面对一些特殊需求时,能够更加灵活地处理。

1 下载源码

https://downloads.mysql.com/archives/community/

选择对应版本的源码包并下载

[root@box1 software]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.32.tar.gz
--2021-03-29 05:50:54--  https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.32.tar.gz
正在解析主机 downloads.mysql.com (downloads.mysql.com)... 137.254.60.14
正在连接 downloads.mysql.com (downloads.mysql.com)|137.254.60.14|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.32.tar.gz [跟随至新的 URL]
--2021-03-29 05:50:55--  https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.32.tar.gz
正在解析主机 cdn.mysql.com (cdn.mysql.com)... 184.27.193.3
正在连接 cdn.mysql.com (cdn.mysql.com)|184.27.193.3|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:52882168 (50M) [application/x-tar-gz]
正在保存至: “mysql-boost-5.7.32.tar.gz”

100%[================================================================================================================================================================================>] 52,882,168  2.76MB/s 用时 22s

2021-03-29 05:51:17 (2.32 MB/s) - 已保存 “mysql-boost-5.7.32.tar.gz” [52882168/52882168])


[root@box1 software]# md5sum mysql-boost-5.7.32.tar.gz
fd78ae35fb019656a7a9cb5361e96201  mysql-boost-5.7.32.tar.gz

2 解压代码

[root@box1 software]# tar xzf mysql-5.7.32.tar.gz

[root@box1 software]# ls -l
总用量 54844
drwxr-xr-x. 35 7161 31415     4096 9月  23 2020 mysql-5.7.32
-rw-r--r--.  1 root root  56154080 3月  29 05:04 mysql-5.7.32.tar.gz

3 编译安装

编译依赖条件

软件
cmake
make
c/c++编译器
boost c++库
ssl库

编译选项
进入mysql源码目录

# cmake -L

CMake Error at cmake/boost.cmake:88 (MESSAGE):
  You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>

  This CMake script will look for boost in <directory>.  If it is not there,
  it will download and unpack it (in that directory) for you.

-- Cache values
CMAKE_BUILD_TYPE:STRING=RelWithDebInfo
CMAKE_INSTALL_PREFIX:PATH=/usr/local/mysql
COMMUNITY_BUILD:BOOL=ON
DOWNLOAD_BOOST:BOOL=OFF
DOWNLOAD_BOOST_TIMEOUT:STRING=600
ENABLED_PROFILING:BOOL=ON
ENABLE_DTRACE:BOOL=ON
ENABLE_GCOV:BOOL=OFF
ENABLE_GPROF:BOOL=OFF
ENABLE_MEMCACHED_SASL:BOOL=OFF
ENABLE_MEMCACHED_SASL_PWDB:BOOL=OFF
FEATURE_SET:STRING=community
INSTALL_LAYOUT:STRING=STANDALONE
MYSQL_DATADIR:PATH=/usr/local/mysql/data
MYSQL_KEYRINGDIR:PATH=/usr/local/mysql/keyring
OPTIMIZER_TRACE:BOOL=ON
REPRODUCIBLE_BUILD:BOOL=OFF
TMPDIR:PATH=P_tmpdir
WITH_ARCHIVE_STORAGE_ENGINE:BOOL=ON
WITH_ASAN:BOOL=OFF
WITH_ASAN_SCOPE:BOOL=OFF
WITH_AUTHENTICATION_LDAP:BOOL=OFF
WITH_BLACKHOLE_STORAGE_ENGINE:BOOL=ON
WITH_BOOST:PATH=
WITH_CLIENT_PROTOCOL_TRACING:BOOL=ON
WITH_DEBUG:BOOL=OFF
WITH_DEFAULT_COMPILER_OPTIONS:BOOL=ON
WITH_DEFAULT_FEATURE_SET:BOOL=ON
WITH_EDITLINE:STRING=bundled
WITH_EMBEDDED_SERVER:BOOL=ON
WITH_EXTRA_CHARSETS:STRING=all
WITH_FEDERATED_STORAGE_ENGINE:BOOL=ON
WITH_INNOBASE_STORAGE_ENGINE:BOOL=ON
WITH_INNODB_MEMCACHED:BOOL=OFF
WITH_LZ4:STRING=bundled
WITH_MSAN:BOOL=OFF
WITH_PARTITION_STORAGE_ENGINE:BOOL=ON
WITH_RAPID:BOOL=ON
WITH_SSL:STRING=system
WITH_TEST_TRACE_PLUGIN:BOOL=OFF
WITH_UBSAN:BOOL=OFF
WITH_UNIT_TESTS:BOOL=ON
WITH_VALGRIND:BOOL=OFF
WITH_ZLIB:STRING=bundled

下载boost

下载 boost_1_59_0.tar.gz

解压

/root/software/boost_1_59_0

执行cmake

cmake . -DCMAKE_BUILD_TYPE=Debug \
    -DMAKE_INSTALL_PREFIX=/app/dtstack/mysql \
    -DCOMPILATION_COMMENT="lazybug" \
    -DDEFAULT_CHARSET=utf8mb4 \
    -DENABLED_LOCAL_INFILE=1 \
    -DWITH_BOOST=/root/software/boost_1_59_0 \
    -DWITH_SSL=system
    
-- Running cmake version 2.8.12.2
-- Configuring with MAX_INDEXES = 64U
-- CMAKE_GENERATOR: Unix Makefiles
-- SIZEOF_VOIDP 8
-- MySQL 5.7.32
-- Packaging as: mysql-5.7.32-Linux-x86_64
-- Local boost dir /root/software/boost_1_59_0
-- Found /root/software/boost_1_59_0/boost/version.hpp
-- BOOST_VERSION_NUMBER is #define BOOST_VERSION 105900
-- BOOST_INCLUDE_DIR /root/software/boost_1_59_0
....

-- COMPILE_DEFINITIONS: _GNU_SOURCE;_FILE_OFFSET_BITS=64;HAVE_CONFIG_H
-- CMAKE_C_FLAGS:  -Wall -Wextra -Wformat-security -Wvla -Wwrite-strings -Wdeclaration-after-statement -Werror
-- CMAKE_CXX_FLAGS:  -Wall -Wextra -Wformat-security -Wvla -Woverloaded-virtual -Wno-unused-parameter -Werror
-- CMAKE_C_LINK_FLAGS:
-- CMAKE_CXX_LINK_FLAGS:
-- CMAKE_C_FLAGS_DEBUG: -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DENABLED_DEBUG_SYNC -DSAFE_MUTEX
-- CMAKE_CXX_FLAGS_DEBUG: -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DENABLED_DEBUG_SYNC -DSAFE_MUTEX
-- Configuring done
-- Generating done
-- Build files have been written to: /root/software/mysql-5.7.32

执行make

make -j 4

Scanning dependencies of target INFO_SRC
Scanning dependencies of target INFO_BIN
Scanning dependencies of target abi_check
Scanning dependencies of target zlib
[  0%] Built target INFO_SRC
[  0%] [  0%] Built target INFO_BIN
[  0%] Building C object zlib/CMakeFiles/zlib.dir/adler32.o
...
[100%] Building CXX object sql/CMakeFiles/mysqld.dir/main.cc.o
Linking CXX executable mysqld
[100%] Building CXX object storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/pfs_connect_attr-t.cc.o
[100%] Building CXX object storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/__/__/__/sql/sql_builtin.cc.o
[100%] Building C object storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/__/__/__/mysys/string.c.o
Linking CXX executable pfs_connect_attr-t
[100%] Built target mysql_embedded
[100%] Built target mysqltest_embedded
[100%] Built target mysqld
[100%] Built target pfs_connect_attr-t

执行make install 安装

root@box1 mysql-5.7.32]# make install
[  0%] Built target INFO_BIN
[  0%] Built target INFO_SRC
[  0%] Built target abi_check
[  0%] Built target zlib
[  2%] Built target edit
...
-- Up-to-date: /usr/local/mysql/mysql-test/mysql-test-run
-- Installing: /usr/local/mysql/mysql-test/lib/My/SafeProcess/my_safe_process
-- Up-to-date: /usr/local/mysql/mysql-test/lib/My/SafeProcess/my_safe_process
-- Installing: /usr/local/mysql/mysql-test/lib/My/SafeProcess/Base.pm
-- Installing: /usr/local/mysql/support-files/mysqld_multi.server
-- Installing: /usr/local/mysql/support-files/mysql-log-rotate
-- Installing: /usr/local/mysql/support-files/magic
-- Installing: /usr/local/mysql/share/aclocal/mysql.m4
-- Installing: /usr/local/mysql/support-files/mysql.server

安装的文件

[root@box1 mysql]# ls
bin  docs  include  lib  LICENSE  man  mysql-test  README  README-test  share  support-files
目录 内容
bin mysql的可执行文件和工具,脚本
mysqld
mysql
mysqlbinlog
mysqldump
mysqladmin
mysqld_safe
docs /
include 头文件,编译时依赖
lib mysql client依赖库
mysql plugin
man /
share mysql error信息
mysql系统初始化文件
support 一些脚本

4 初始化数据库 & 启动MySQL

初始化数据库和启动MySQL的步骤和上一篇二进制安装方式一样(MySQL运维实战(1.2)安装部署:使用二进制安装部署),这里不再重复。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容