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.
- Bagging算法(R语言)
- iOS @property探究(一): 基础详解你要知道的@property都在这里
- 在创建带输出参数和返回值的存储过程时---犯下的一个低级错误
- iOS block探究(二): 深入理解你要知道的block都在这里
- 使用开源人脸特征提取器进行脸部颜值评分
- iOS @property探究(二): 深入理解你要知道的@property都在这里
- iOS block探究(一): 基础详解你要知道的block都在这里
- 在不动用sp_configure的情况下,如何 =》去掉列的自增长,并保留原数据
- iOS runtime探究(一): 从runtime开始理解面向对象的类到面向过程的结构体你要知道的runtime都在这里
- iOS runtime探究(二): 从runtime开始深入理解OC消息转发机制你要知道的runtime都在这里
- SpringMVC 启动流程及相关源码分析你要知道的SpringMVC启动流程和源码分析都在这里
- iOS runtime探究(四): 从runtiem开始实践Category添加属性与黑魔法method swizzling你要知道的runtime都在这里
- C# 复制PDF页面到另一个PDF文档
- Java8 Lambda表达式与Stream API (一):Lambda表达式你要知道的Java8 匿名内部类、函数式接口、lambda表达式与Stream API都在这里
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 如何发布自己的项目到Maven中央仓库?
- 《闲扯Redis八》Redis字典的哈希表执行Rehash过程分析
- 为什么说在Android中请求权限从来都不是一件简单的事情?
- 小知识:如何赋予用户查看所有存储过程和触发器的权限
- ZCU106使用VCU TRD的MIPI的例子
- 一款功能简约到可怜的SQL 客户端
- Kotlin---data class
- sqlmap的使用方法
- 从0开始做播放器---音频播放有杂音且音调异常
- 线上故障实录-一大早服务就不可用了?
- mapboxGL中popup遮挡的优化
- SQL注入的基本步骤
- JS 变量作用域导致的一个坑
- 池化技术到达有多牛?看了线程和线程池的对比吓我一跳!
- Nginx 跨域 add_header 403状态下无效