【转】rpm包和源码包安装的区别
转自:https://blog.csdn.net/junjie_6/article/details/59483785
建议在安装线上的生产服务器软件包时都用源码安装,这是因为源码安装可以自行调整编译参数,最大化地定制安装结果。这里以MySQL 5线上环境的编译安装来说明之,其编译参数如下所示:
./configure -prefix=/usr/local/mysql -without-debug
-without-bench -enable-thread-safe-client -enable-assembler
-enable-profiling -with-mysqld-ldflags=-all-static -
with-client-ldflags=-all-static -with-charset=latin1 -
with-extra-charset=utf8,gbk -with-innodb -with-csv-storage
-engine -with-federated-storage-engine -with-mysqld-user=mysql
-without-embedded-server -with-server-suffix=-community
-with-unix-socket-path=/usr/local/mysql/sock/mysql.sock &&
make && make install
在安装MySQL时,源码安装与rpm安装相较,其特点如下:
我们可以针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码。
根据不同的软件平台环境调整相关的编译参数(源码安装不仅适用于rhel/centos,其他系统像FreeBSD、Solaris、Ubuntu等一样适用)。
可针对特定的应用场景选择需要什么组件或不需要什么组件。
同一台主机上可以安装多个MySQL(rpm安装则仅能安装一个MySQL)。
根据需要存储的数据内容选择只安装需要的字符集。
理论上源码静态编译方式安装效率会高一点,但到底比rpm方式高多少得看具体情况,一般在5%左右。
某次在线上环境工作,我用yum卸载一个软件包时遇到了极其危险的情况,这里也跟大家分享一下:当时,yum remove自动卸载了许多这个软件包自身依赖的系统包,导致系统崩溃了,SSH不能登录,并且SCP及RSYNC也都不能用了,幸亏FTP命令还能用, 所以数据很快被FTP传到其他服务器上了,但系统已经彻底崩溃,只有重装了。如果是源码安装的软件包就没有这种危险,需要卸载时只需要删除软件包安装的目 录即可。
综上所述,源码安装的好处如下:
最大的好处就是可以自行调整编译参数,最大化地定制安装结果。
源码安装可以选择最新的软件包,而Linux系统(包括FreeBSD)自带的软件包一般都是最稳定的版本,但不能保证是最新的。
相对而言,源码安装的性能是最优异的。
源码包安装的软件卸载时极为方便和简单,更重要的是,它比较安全,尤其是对线上的生产环境而言。
迁徙也比较方便,如果不涉及系统库文件,复制到另一台机器上也可以使用。
这里也简单介绍一下在Linux/Unix下安装软件的源码三部曲,在后面我们会经常看到它们的身影。
./configure
make
make install
./configure是用来检查环境变量及配置编译选项的,make是用来将源代码编译成二进制文件的,而make install则会将make编译出来的文件安装到指定位置(或默认位置)。
在本节中,我们从服务器的硬件选择、安装及内核等方面对单机服务器的性能进行了优化,不过对于网站和系统来说,单机优化对整体性能提升的作用毕竟有限,整体性能提升主要靠服务器的高可用和高扩展性来实现,这部分内容在后面的章节中再来说明。
【转】rpm包和源码包安装的区别的更多相关文章
- spring各版本jar包和源码
spring各版本jar包和源码 spring历史版本源码:https://github.com/spring-projects/spring-framework/tags spring历史jar包和 ...
- yum更换国内源 yum下载rpm包 源码包安装
7.6 yum更换国内源 7.7 yum下载rpm包 7.8/7.9 源码包安装 yum更换国内源 cd /etc/yum.repo.d/ 删除源 rm -f dvd.repo rm -f C ...
- rpm包管理和源码包管理
(1)软件类型 源码包 需要gcc编译 nginx-1.12.1.tar.gz 二进制包 已编译 mysql-community-common-5.7.12-1.el7.x86_64.rpm 常见的二 ...
- [Linux]服务管理:rpm包, 源码包
--------------------------------------------------------------------------------------------------- ...
- CentOS 7上的程序管理:rpm、yum和源码编译安装
简介 在Linux的早期时代(也许吧?我猜的.也可能是Unix.),想要在系统上安装一款应用程序,是比较复杂的.需要专业的人员自行获取程序的源代码,并且编译安装,这是非常的复杂且需要一定的专业功底的, ...
- ssh repo ----> struts+hibernate+spring( jar包和源码)各版本下载链接
struts http://archive.apache.org/dist/struts/ hibernate http://hibernate.org/orm/releases/5.0/ sprin ...
- spring 各个版本的源码、jar包和源码jar包下载地址
spring各个版本的源码jar包.文档jar包和spring的jar包 http://maven.springframework.org/release/org/springframework/sp ...
- linux服务器上,yum、rpm、源码编译安装及卸载
源码的编译安装及卸载 源码安装三部曲 1.生成makefile编译文件./configure 一般安装包下面都有一个configure文件,用来生成makefile编译文件常用的参数: --prefi ...
- CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)
首先说一下,无论是CentOS/RedHat还是Ubuntu都可以按源码方式.安装包方式编译安装. 1. 规划 192.168.4.93(h93) 1个主master 2个主segm ...
随机推荐
- fetch各种报跨域错误,数据无法获取的解决方案
1.介绍 fetch 提供了一个获取资源的接口 (包括跨域). fetch 的核心主要包括:Request , Response , Header , Body 利用了请求的异步特性 --- 它是基于 ...
- R语言入门学习笔记 - 对R软件的认识
一.R软件 1.安装R:自行百度☺ 2.R控制台(R Console)和R程序脚本: 打开R软件,就会直接打开控制台,控制台可以显示程序运行的结果.错误提示等信息,也可以直接输入想要执行的操作并立即返 ...
- ImportError: No module named MySQLdb解决办法
http://blog.slogra.com/post-429.html http://blog.sina.com.cn/s/blog_74a7e56e0101a7qy.html 今天突发奇想在服务器 ...
- android PercentRelativeLayout 支持百分比来设置控件的宽高
Android 最终官方支持按百分比来设置控件的宽高了. 我们先来看看效果: 看一下布局: PercentRelativeLayout <android.support.percen ...
- C语言++a与a++的实现机制与操作符结合优先级
看到一道"经典Linux C"面试题,关于左值和右值的. 华为笔试题 1.写出推断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值(3分) int a = 4; ...
- JSON介绍及Android最全面解析方法(Gson、AS自带org.son、Jackson解析)
前言 今天,我们来介绍一下现今主流的数据交换格式-JSON! 相同作为主流为数据交换格式-XML,假设有兴趣能够阅读我写的XML及其DOM.SAX.PULL解析方法和对照 文件夹 定义 JavaScr ...
- Python开发【第5节】【函数基础】
1.函数 函数的本质就是功能的封装. 函数的作用 提升代码的重复利用率,避免重复开发相同代码 提高程序开发效率 便于程序维护 2.函数定义 def 函数名(参数): """ ...
- 在不同的系统中的virtualbox中安装Ubuntu SDK
对非常多的开发人员来说.你们可能使用的不是Ubuntu操作系统.在这样的情况下,开发人员须要在自己的操作系统中(OS X及Windows)安装virtualbox,并在VirtualBox中安装Ubu ...
- Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP
D. Painting The Wall ...
- 双层for 循环
说说 图片 集合 list(set([ii for i in img_url_l for ii in i[0].replace('[','').replace(']','').replace(&quo ...