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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 作为一个DBA, MySQL源码安装还是要做做的,虽然不是推荐线上批量安装部署,但是自己作为了解MySQL的一个学习过程,还是值得的。 相比商业软件来说,开源的这一点上就让人很羡慕,商业软件我们总是使用各种工具和底层原理去反推,探测,但是离代码还是有一定的距离。

作为一个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/

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

img_dc7ecb998a29077f677c9e2f9f983e6f.jpg

源码安装的两种方法

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把对应版本改一下就可以,差别不是很大。

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

img_dbc8c5407948097feeb2bf1d4c219bca.jpe

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

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/localexec_prefix $(prefix)bindir $(exec_prefix)/binsbindir $(exec_prefix)/sbinlibexecdir $(exec_prefix)/libexecdatadir $(prefix)/sharesysconfdir $(prefix)/etcsharedstatedir $(prefix)/comlocalstatedir $(prefix)/varlibdir $(exec_prefix)/libinfodir $(prefix)/infoincludedir $(prefix)/includeoldincludedir $(prefix)/includemandir $(prefix)/mansrcdir 需要编译的源文件所在的目录,无默认值

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

安装前的准备

安装前,做以下几件事情。创建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`

满屏幕的编译日志,看起来很有成就感。

img_c0b679dc720b568bf80100ffaa1d9bc6.jpe

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 = 24G5.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/s/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
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
关系型数据库 MySQL
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-01
【4月更文挑战第18天】MySQL的InnoDB引擎支持行锁,而MyISAM只支持表锁。行锁在事务开始时添加,事务结束时释放,遵循两阶段锁协议。为减少锁冲突影响并发,应将可能导致最大冲突的锁操作放在事务最后。例如,在电影票交易中,应将更新影院账户余额的操作安排在事务末尾,以缩短锁住关键行的时间,提高系统并发性能。
14 4
|
12天前
|
关系型数据库 MySQL 数据库
【MySQL实战笔记】 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?-01
【4月更文挑战第17天】MySQL的锁分为全局锁、表级锁和行锁。全局锁用于全库备份,可能导致业务暂停或主从延迟。不加锁备份会导致逻辑不一致。推荐使用`FTWRL`而非`readonly=true`因后者可能影响其他逻辑且异常处理不同。表级锁如`lock tables`限制读写并限定操作对象,常用于并发控制。元数据锁(MDL)在访问表时自动加锁,确保读写正确性。
64 31
|
1天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MySQL总结
MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,结构化的查询语言,它是一种针对表关联关系所设计的一门语言,也就是说,学好 MySQL,SQL 是基础和重中之重。SQL 不只是 MySQL 中特有的一门语言,大多数关系型数据库都支持这门语言。
22 8
|
1天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
17 6
|
1天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
21 4
|
1天前
|
SQL 存储 关系型数据库
【MySQL系列笔记】SQL优化
SQL优化是通过调整数据库查询、索引、表结构和配置参数等方式,提高SQL查询性能和效率的过程。它旨在减少查询执行时间、减少系统资源消耗,从而提升数据库系统整体性能。优化方法包括索引优化、查询重写、表分区、适当选择和调整数据库引擎等。
13 3
|
10天前
|
关系型数据库 MySQL 中间件
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-02 死锁和死锁检测
【4月更文挑战第19天】在高并发环境下,死锁发生在多个线程间循环等待资源时,导致无限期等待。MySQL中,死锁可通过`innodb_lock_wait_timeout`参数设置超时或`innodb_deadlock_detect`开启死锁检测来解决。默认的50s超时可能不适用于在线服务,而频繁检测会消耗大量CPU。应对热点行更新引发的性能问题,可以暂时关闭死锁检测(风险是产生大量超时),控制并发度,或通过分散记录减少锁冲突,例如将数据分拆到多行以降低死锁概率。
22 1
|
13天前
|
关系型数据库 MySQL 索引
【MySQL实战笔记】 05 | 深入浅出索引(下)-02
【4月更文挑战第16天】B+树索引利用最左前缀原则加速检索,即使只是部分字段匹配也能生效。联合索引[name-age]可按最左字段&quot;张&quot;找到记录,并遍历获取结果。优化索引顺序能减少维护成本,通常先考虑复用性。若需独立查询部分字段,则需权衡空间占用,如(name,age)与(age)。索引下推自MySQL5.6起,允许在索引遍历时预过滤条件,减少回表次数,提高效率。
26 4
|
15天前
|
索引 关系型数据库 MySQL
【MySQL实战笔记】 05 | 深入浅出索引(下)-01
【4月更文挑战第14天】创建表T的SQL和其索引结构被展示,分析了查询`select * from T where k between 3 and 5`的执行流程,涉及两次回表操作。介绍覆盖索引的概念,指出当查询列包含在索引中时,可以避免回表,提高性能。在市民信息表`tuser`上,是否需要创建身份证号和名字的联合索引取决于查询需求,若高频查询涉及身份证号和姓名,该联合索引是有益的。
23 0
【MySQL实战笔记】 05 | 深入浅出索引(下)-01
|
15天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MVCC
多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。 MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView。在 RC、RR 这两种隔离级别下生效。 在事务也提到,MVCC是保证MySQL在默认隔离级别RR情况下,针对快照读解决幻读问题。而针对当前读需要隔离锁的临键锁(记录锁+间隙锁)去解决。
109 0