MySQL源码安装总结(r12笔记第12天)

作为一个DBA, MySQL源码安装还是要做做的,虽然不是推荐线上批量安装部署,但是自己作为了解MySQL的一个学习过程,还是值得的。

相比商业软件来说,开源的这一点上就让人很羡慕,商业软件我们总是使用各种工具和底层原理去反推,探测,但是离代码还是有一定的距离。当然商业有商业的好,开源有开源的乐,不能一概而论。

值得推荐的安装镜像

对于MySQL的安装部署来说,总是存在各种版本和子版本,其实整理起来非常繁杂,今天看到竟然我狐已经提供了非常的镜像站点

http://mirrors.sohu.com/mysql/MySQL-5.5/ http://mirrors.sohu.com/mysql/MySQL-5.6/ http://mirrors.sohu.com/mysql/MySQL-5.7/

这么丰富全面的安装包,省去了很多麻烦。

源码安装的两种方法

MySQL的源码安装有两种方法可供参考。

Use a standard MySQL source distribution,这种方法其实就是下载源码压缩包,然后通过cmake来构建部署。

比如5.6版本的源码包,可以参考链接下载:

https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.35.tar.gz 安装说明和步骤可以参考:

http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html 对于MySQL 5.7把对应版本改一下就可以,差别不是很大。

或者到官网直接点击下载也可以。

安装的详细步骤我们等下细说,目前网站上看到的绝大多数源码安装都是这种方式。

Use a MySQL development tree,这种方式是通过开发源码树的方式来编译部署。主要的方式就是基于git.

这种方式相对来说,感觉就是在参与开发一个项目一般,有着很完善的版本管理。

首先使用git来开启安装,会从github上来抓取。

# git clone https://github.com/mysql/mysql-server.git这个过程会持续一些时间,完成之后目录变成了多大。大概1.5G,而源码压缩包大概就是几十M,差别非常大。

# du -sh . 1.5G .

我们使用git来查看版本的情况,发现MySQL 8.0的代码也可以抓取了,如果想尝尝鲜,掌握新版本新特性,这种方式还是比较高效的。

# git branch -r origin/5.5 origin/5.6 origin/5.7 origin/8.0 origin/HEAD -> origin/5.7 origin/cluster-7.2 origin/cluster-7.3 origin/cluster-7.4 origin/cluster-7.5

比如我们选择5.7版本,

# git checkout 5.7 Checking out files: 100% (21703/21703), done. Switched to branch '5.7'

接下来的事情就和源码包安装差不多了。我们放在一起说。

先来了解下安装的几个命令

其实源码安装的步骤还是很常规,时间都在编译的过程中,你可以看到屏幕里满屏的日志输出,感觉好像你在做什么超级高深的事情一样。其实编写这个软件的人才是真心牛叉,不服你想想你安装的时候,除了cmake, make ,make install之外,操作的步骤也要简单的多。

其实很多开源软件安装都是make,make install这样的步骤,这个过程后面到底发生了什么。

make的命令使用细则如下:

make [options] [targets] [VAR=VALUE]...

[options]是命令行选项,可以用 make --help 命令查看全部,[VAR=VALUE]是在命令行上指定环境变量,而target则是Makefile里面的规则。Makefile里面的内容有时候看不大明白。

可以参考这个,这个列表引用自:http://mp.weixin.qq.com/s/rp50qrNipmdBBOyNTkGJoQ

AR   函数库打包程序,可创建静态库.a文档。默认是"ar"。
AS   汇编程序。默认是"as"。
CC   C编译程序。默认是"cc"。
CXX  C++编译程序。默认是"g++"。
CPP  C/C++预处理器。默认是"$(CC) -E"。
FC   Fortran编译器。默认是"f77"。
PC   Pascal语言编译器。默认是"pc"。
YACC Yacc文法分析器。默认是"yacc"。

ARFLAGS     函数库打包程序的命令行参数。默认值是"rv"。
ASFLAGS     汇编程序的命令行参数。
CFLAGS      C编译程序的命令行参数。
CXXFLAGS    C++编译程序的命令行参数。
CPPFLAGS    C/C++预处理器的命令行参数。
FFLAGS      Fortran编译器的命令行参数。
PFLAGS      Pascal编译器的命令行参数。
YFLAGS      Yacc文法分析器的命令行参数。
LDFLAGS     链接器的命令行参数。

prefix      /usr/local
exec_prefix $(prefix)
bindir      $(exec_prefix)/bin
sbindir     $(exec_prefix)/sbin
libexecdir  $(exec_prefix)/libexec
datadir     $(prefix)/share
sysconfdir  $(prefix)/etc
sharedstatedir $(prefix)/com
localstatedir  $(prefix)/var
libdir      $(exec_prefix)/lib
infodir     $(prefix)/info
includedir  $(prefix)/includeoldincludedir  $(prefix)/includemandir      $(prefix)/man
srcdir      需要编译的源文件所在的目录,无默认值

这样可能会清楚一些了,至少我们知道大概要做的事情了。

安装前的准备

安装前,做以下几件事情。创建mysql用户组,创建mysql用户。

groupadd mysql useradd -r -g mysql -s /bin/false mysql

接下来的工作就需要花点功夫了,那就是环境依赖的安装包。

对于MySQL 5.7来说,boost是需要的,否则无法编译,这样下载部署。当然boost在MySQL 5.6不是必需。

wget https://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz tar -zxvf boost_1_59_0.tar.gz -C /usr/local/

还有一个字符终端处理库ncurses是一定要检查的,可以这样下载。

http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.8.tar.gz

下载后使用./configure,make,make install 即可安装。

安装后,可以使用如下的方式来检测是否安装成功。

# ll /usr/lib/libncurse* -rw-r--r-- 1 root root 669034 Mar 23 13:31 /usr/lib/libncurses.a -rw-r--r-- 1 root root 166630 Mar 23 13:31 /usr/lib/libncurses++.a -rw-r--r-- 1 root root 3501680 Mar 23 13:31 /usr/lib/libncurses_g.a

如果饶有兴致,还可以写一小段代码来检测。

#include <unistd.h> #include <stdlib.h> #include <curses.h> int main() { initscr(); move( 5, 15 ); printw( "%s", "Hello world" ); refresh(); sleep(2); endwin(); exit(EXIT_SUCCESS); }

这么运行即可。

g++ a.c -lncurses && ./a.out

如果看到Hello world,证明安装是没有问题的。

最重要的一点,那就是保证cmake是可用的,没有的话,yum install cmake安装一下。

同时gcc,bison的版本也要注意一下,不能太低。

源码安装

目前压缩包解压后可以看到的cmake支持版本很多。

# ll /root/soft/mysql_source_code/mysql-5.6.35/cmake/os total 60 -rw-r--r-- 1 7161 31415 1402 Nov 28 21:36 AIX.cmake -rw-r--r-- 1 7161 31415 773 Nov 28 21:36 Cygwin.cmake -rw-r--r-- 1 7161 31415 951 Nov 28 21:36 Darwin.cmake -rw-r--r-- 1 7161 31415 1139 Nov 28 21:36 FreeBSD.cmake -rw-r--r-- 1 7161 31415 1714 Nov 28 21:36 HP-UX.cmake -rw-r--r-- 1 7161 31415 1658 Nov 28 21:36 Linux.cmake -rw-r--r-- 1 7161 31415 838 Nov 28 21:36 OS400.cmake -rw-r--r-- 1 7161 31415 4242 Nov 28 21:36 SunOS.cmake -rw-r--r-- 1 7161 31415 14652 Nov 28 21:36 WindowsCache.cmake -rw-r--r-- 1 7161 31415 8011 Nov 28 21:36 Windows.cmake

我们开始安装,值得一提的是,我是打算同服务器上安装多个版本,所以就在/usr下指定了不同的安装目录,数据目录。

cmake . \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql_5.6 \ -DMYSQL_DATADIR=/home/mysql_5.6 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CHARSETS=all \ -DENABLED_LOCAL_INFILE=1

一般准备充分,这个过程就是分分钟的事情,如果ncures没安装,就可能抛出如下的错误退出。

-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) CMake Error at cmake/readline.cmake:85 (MESSAGE): Curses library not found. Please install appropriate package,

接下来是make操作,我们可以做点改进,那就是加快编译的速度,使用-j参数,根据CPU核数指定编译时的线程数,因为默认是1个线程编译,如果不知道该启用几个,可以换算一下。

make -j `grep processor /proc/cpuinfo | wc -l` 满屏幕的编译日志,看起来很有成就感。

make阶段的事情做完之后,就是make install,这个过程会正式安装软件到指定的目录,也是我们的终极目标。

值得一提的是,如果因为空间问题异常退出,还是最好删除CMakeCache.txt文件,重新cmake一遍,然后make,make install

创建数据库

这个阶段的工作就很常规了,我们简化一下,两个命令初始化,启动数据库。

启用的参数模板类似于:

[mysqld] # server configuration datadir=/home/mysql_5.7 basedir=/usr/local/mysql_5.7 port=3308 socket=/home/mysql_5.7/mysql.sock server_id=3308 gtid_mode=ON enforce_gtid_consistency=ON master_info_repository=TABLE relay_log_info_repository=TABLE binlog_checksum=NONE log_slave_updates=ON log_bin=binlog binlog_format=ROW innodb_log_file_size=1000M max_prepared_stmt_count=150000 max_connections = 3000 innodb_buffer_pool_size = 24G

5.7的操作如下:

初始化数据字典:

/usr/local/mysql_5.7/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql_5.7 --datadir=/home/mysql_5.7

启动数据库:

/usr/local/mysql_5.7/bin/mysqld_safe --defaults-file=/home/mysql_5.7/s.cnf & 5.6的操作如下:

初始化数据字典

/usr/local/mysql_5.6/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql_5.6 --datadir=/home/mysql_5.6

启动数据库

/usr/local/mysql_5.6/bin/mysqld_safe --defaults-file=/home/mysql_5.6/s.cnf &

后面的事情你懂的,我们可以连接到源码版的数据库了。 # /usr/local/mysql_5.7/bin/mysql --socket=/home/mysql_5.7/mysql.sock --port=3308

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.7.17-log Source distribution Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. enjoy.

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2017-03-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

Apache Hbase 快速入门

本文节选自《Netkiller Database 手札》 ? 第 62 章 Apache Hbase 目录 62.1. 安装 Apache Hbase 62...

3496
来自专栏坚毅的PHP

hbase问题总结

 1 java.io.IOException: java.io.IOException: java.lang.IllegalArgumentException:...

5356
来自专栏小狼的世界

Analog使用中的一些技巧和总结

Analog是一款用来快速处理日志的开源工具,具有很高的效率,但是生成的结果并不美观,本文就analog使用过程中的一些问题进行总结,讨论如何对analog进行...

821
来自专栏WindCoder

SSM笔记(一)框架整合

用了好久了,但都是当初大神配置完后直接粘贴复制过来的,一直没仔细看过相关配置,趁此机会对自己也算是一个复习与深入,也希望对初学者有所帮助。本系列均是基于IDEA...

1471
来自专栏黑泽君的专栏

day66_Solr学习笔记

目录结构详解如下:   bin:solr的运行脚本。   contrib:solr的一些扩展jar包,用于增强solr的功能。   dist:该目录包含bui...

1064
来自专栏葡萄城控件技术团队

Web API 持续集成:PostMan+Newman+Jenkins(图文讲解)

上篇文章我们已经完成了API测试工具选型,接下来是一系列周期性的开发测试过程:接口开发、检出代码、运行测试、记录结果、发送报告。为了快速发现问题,并减少重复过程...

1342
来自专栏SpringBoot 核心技术

第四十三章: 基于SpringBoot & RabbitMQ完成TopicExchange分布式消息消费

34315
来自专栏ThoughtWorks

Gradle 命令行黑魔法

#ThoughtWorkers好声音# 第十五期 关于 Gradle ,我们常常会想到的是如何编写一个 Task ,怎么写一个 Plugin ,但是对于 Gr...

2515
来自专栏小怪聊职场

Java|Spring+SpringMVC+MyBatis框架科普

2615
来自专栏battcn

一起来学SpringBoot | 第二篇:SpringBoot配置详解

上一篇介绍了 SpringBoot 由来及构建方式,通过第一章的教程我们对 SpringBoot 不在感到陌生,可以发现 SpringBoot 虽然干掉了 XM...

1041

扫码关注云+社区