mysql 自动化 安装_mysql自动化安装

MySQL安装一般使用RPM或者源码安装的方式。

RPM安装的优点是快速,方便.缺点是不能自定义安装目录.如果需要调整数据文件和日志文件的存放位置,还需要进行一些手动调整。

源码安装的优点是可以自定义安装目录,缺点是编译时间长,过程复杂

其实还有一种方式,定制RPM包.

它相当于用源码安装的方式定制了一个RPM包.一次打包,可以多次使用

它可以定制路径,安装时自动创建帐号,自动配置服务,环境变量等,并且安装过程快速,简单。

在大规模部署的场景下,优点十分突出.

缺点是制作RPM包,需要自己编写Red Hat定义的spec文件.而spec文件编写的学习曲线比较陡.

需求如下

1.创建用户mysql

2.数据库软件安装在/home/mysql/mysql-5.6.14目录

3.数据文件存放在/data目录下

4.配置服务,自动启动

首先,下载rpmbuild

yum install rpm-build -y

它是Red Hat用于打RPM包的工具.

安装之后重启计算机,可以看到/root/rpmbuild目录下有如下文件夹

29254281_1410535157ggxG.png

这个工具打包的过程大致如下,

编写spec指定打包的过程

将源码压缩包放在SOURCES目录下,

将源码解压缩到BUILD目录,执行make命令

将make install 的结果放在BUILDROOT目录下,

最后将BUILDROOT下编译好的二进制文件制作成RPM包。

并且可以指定在RPM安装之前,安装之后,卸载等过程执行的命令

首先,下载源码包

http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.14.tar.gz

并将其复制到指定的目录

/root/rpmbuild/SOURCES/mysql-5.6.14.tar.gz

安装编译MySQL需要的依赖包

yum -y install make gcc-c++ cmake bison-devel  ncurses-devel

编写spec脚本

vim mysql.spec

Name:       MySQL

Version:    5.6.14

Release:    1%{?dist}

Summary:    MySQL-5.6.14 RPM

Group:      applications/database

License:    GPL

URL:        http://www.mysql.com

Source0:    mysql-5.6.14.tar.gz

BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

BuildRequires:  cmake

AutoReqProv: no

%description

MySQL 5.6.14

%define MYSQL_USER mysql

%define MYSQL_GROUP mysql

%prep

%setup -n mysql-%{version}

%build

cmake \

-DCMAKE_INSTALL_PREFIX=/home/mysql/mysql-5.6.14 \

-DMYSQL_DATADIR=/data \

-DSYSCONFDIR=/etc \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_MEMORY_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DMYSQL_UNIX_ADDR=/data/mysql.sock \

-DMYSQL_TCP_PORT=3306 \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

make -j `cat /proc/cpuinfo | grep processor| wc -l`

%install

rm -rf %{buildroot}

make install DESTDIR=%{buildroot}

%pre

mkdir -p /data

useradd -m -s /bin/bash mysql

chown -R mysql:mysql /data

%post

/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql

cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql

chkconfig mysql on

service mysql start

echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc

source /home/mysql/.bashrc

%preun

service mysql stop

chkconfig --del mysql

userdel mysql

rm -rf /home/mysql

rm -rf /data

rm -rf /etc/init.d/mysql

%clean

rm -rf %{buildroot}

%files

%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})

%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) /home/mysql/mysql-5.6.14/*

%changelog

这个脚本各个Segment的作用请参考

http://machael.blog.51cto.com/829462/213477

其中

Source0:    mysql-5.6.14.tar.gz

这个压缩文件需要放在指定的目录中(/root/rpmbuild/SOURCES)

自动解压的时候,会在这个指定目录中找这个文件

29254281_1410537108vA4V.png

AutoReqProv: no

这个参数必须设置,否则在安装的时候,会显示有依赖包的缺失.实际上是不需要的。

%setup -n mysql-%{version}

解压源码包之后,会进入目录执行build,它默认是根据%{name}和%{version}拼接的目录.

以MySQL为例,在spec中写的name为MySQL,version为5.6.14

那么它会进入MySQL-5.6.14的目录,

但是源码包解压之后的目录是mysql-5.6.14(小写)

所以在setup这个段使用-n参数,匹配这个目录.(就是说默认的设置不灵,需要自己匹配目录)

make -j `cat /proc/cpuinfo | grep processor| wc -l`

查看计算机有几个核,然后多线程编译

这个脚本的过程是这样的

首先解压源码包

%prep

%setup -n mysql-%{version}

然后执行%build的过程,make编译

然后执行%install

将编译之后的代码真实的安装一遍,

它安装的目录是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/home/mysql/mysql-5.6.14/

因为我们指定的安装目录是/home/mysql/mysql-5.6.14/,它相当于在一个沙盒中安装了一遍.

它会将沙盒中安装之后的文件打成RPM包

%files就是指定哪些沙盒中的文件打入RPM包

%files指定的文件是相对路径,绝对路径应该是%{buildroot}/home/mysql/mysql-5.6.14

默认的%{buildroot}就是/root/rpmbuild/BUILDROOT/MySQL-5.6.14-1.el6.i386/

这个%{buildroot}是由spec文件的BuildRoot设置的

BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

%pre是RPM安装之前执行的命令

这里主要是创建数据文件的目录和帐号

mkdir -p /data

useradd -m -s /bin/bash mysql

chown -R mysql:mysql /data

%post是RPM安装之后执行的命令

这里主要是创建数据库实例,配置服务,配置环境变量

/home/mysql/mysql-5.6.14/scripts/mysql_install_db --basedir=/home/mysql/mysql-5.6.14 --datadir=/data --user=mysql

cp /home/mysql/mysql-5.6.14/support-files/mysql.server /etc/init.d/mysql

chkconfig mysql on

service mysql start

echo "export PATH=.:$PATH:/home/mysql/mysql-5.6.14/bin;" >> /home/mysql/.bashrc

source /home/mysql/.bashrc

%preun是卸载RPM包执行的命令,主要用于清理

service mysql stop

chkconfig --del mysql

userdel mysql

rm -rf /home/mysql

rm -rf /data

rm -rf /etc/init.d/mysql

其实编写spec文件本质上是在写一个回调函数,rpmbuild根据spec的回调函数,生成一个Shell脚本,打包的过程就是执行Shell脚本的过程。

定制RPM安装包可以满足大规模自动化部署的场景

因为它可以

定制配置文件(将配置文件放在ftp或者http上,在%post段下载这个配置文件放在/etc下)

定制安装目录和数据文件,日志文件的目录(生产系统不同的挂载点,底层可能是不同的物理设备)

自动创建帐号,配置服务和环境变量

这些特性在规模很小时微不足道,

比如给研发和测试安装,人家还嫌你有毛病.明明一个rpm能搞定,你还整这么复杂,不是臭显摆吗?

生产环境装一个库运行好几年,再装的时候,这个RPM估计都忘了放哪里了...

但是一旦规模上来了,一天需要装个10台8台的,这个自动化安装的优点就显现出来了

参考:

源码安装MySQL

http://www.cnblogs.com/xiongpq/p/3384681.html

rpmbuild spec文件详解

http://machael.blog.51cto.com/829462/213477

http://www.worldhello.net/2011/04/02/2405.html

AutoReqProv参数的解释

http://blog.csdn.net/peng_zhou/article/details/3530230

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hls协议分析

目录1、简介1.1、 综述1.2 、HLS 协议编码格式要求1.3 、HLS 协议优势1.4 、HLS 协议劣势1.5 、框架图2、m3u8文件2.1 、单码率适配流m3u8文件2.2 、多码率适配流m3u8文件2.3 、Playlist file2.4 、Tags3、ts文件3.1 、ts文件结构3.2、ts文件结构部分截图3.3、ts层(…

OpenGL 学习笔记(1)初始化窗体

前言 学习OpenGL只是兴趣爱好,因为对图形比较感兴趣.将以OpenGl的红宝书(7)和蓝宝石书(4)为基础,虽然手头有红宝书书,但感觉没蓝宝石书写的好 准备工作 首先要下载一个工具库(GLUT) http://www.opengl.org/resources/libraries/glut/ 只要把相应文件放在…

基于云平台的家居综合监测管理系统的设计与实现

时间过得飞快,转眼间大四即将毕业,有点留恋和不舍。可能是越是到了离别的时候,越开始珍惜吧。大一开始,通过考核进入了学校院系实验室开始学习,这期间自学了很多东西,很充实,也参加过很多比赛&a…

小白学数据分析-----留存率分析_I[次日留存率突然下降了50%?]

最近在做留存分析时,遇到了不少的情况,也经常会有人问我,为什么我的游戏突然次日留存率降了一半。如果留存率是单单作为一个简单的指标的话,那对你价值还是蛮有限的,今天就和大家说说一个case,这是不久前解…

mysql映射mapper_SQL映射器Mapper接口(MyBatis)

SQL映射器Mapper接口MyBatis基于代理机制,可以让我们无需再写Dao的实现。直接把以前的dao接口定义成符合规则的Mapper。注意事项:1.接口必须以Mapper结尾,名字是DomainMapper2.mapper.xml文件要和Mapper接口建立关系,通过namespac…

计算机图形学画线_在计算机图形学中直接使用线方程

计算机图形学画线计算机图形学| 直接使用线方程 (Computer Graphics | Direct Use of Line Equation) The standard line equation, as we all know is used for drawing a line. It is given by: y mx c. 众所周知,标准线方程式用于绘制线。 由下式给出&#xff…

Request.ServerVariables (server environment variable)

参数 服务器环境变量指定要检索的服务器环境变量名。可以使用下面列出的值。 变量说明ALL_HTTP客户端发送的所有 HTTP 标题文件。ALL_RAW检索未处理表格中所有的标题。ALL_RAW 和 ALL_HTTP 不同,ALL_HTTP 在标题文件名前面放置 HTTP_ prefix,并且标题名称…

c/c++ 编程试题

c/c 编程试题 带*号为选作题&#xff0c;给出代码截屏和编译运算结果截屏 1.编程:选取M个最大的数 编程实现从N个无序数中选取M个最大的数(0 < M < N ) 思路&#xff1a;通过冒泡排序或者选择排序对N个数进行递减排序&#xff0c;然后输入前M个数即可。这里我想到的是通…

Java String startsWith()方法与示例

字符串startsWith()方法 (String startsWith() Method) startsWith() method is a String class method, it is used to check whether a given string starts with specific character sequences or not. startsWith()方法是一个String类方法&#xff0c;用于检查给定的字符串…

mysql inception web_基于Inception搭建MySQL SQL审核平台Yearing

Inception1. Inceptionj简介Inception是一款针对MySQL的SQL语句审核自动化运维工具。使用Inception&#xff0c;将会给DBA带来更大的便利性&#xff0c;将DBA从繁冗的工作中解放出来&#xff0c;做更多的自动化工作&#xff0c;或者从架构方面研究如何更大程度地保证数据库的高…

C---日常练习

若有以下定义语句&#xff1a;int a5;printf("%d\n",a);则输出结果是&#xff08;&#xff09; 解析&#xff1a;a 即先使用再自增&#xff0c;a的初始值即为5&#xff0c;则先使用&#xff0c;输出结果为5 举个例子&#xff1a; int a5,b; ba;//等价于 ba;aa1 prin…

VS2010 运行库设置

如下图所示&#xff0c;当在一个EXE工程中调用lib或dll时&#xff0c;2个工程的下面选项一定要一致&#xff0c;否则会导致exe工程编译不过。 原则&#xff1a; Debug下&#xff0c;默认是MTd&#xff1b; Release下&#xff0c;默认是MT。 转载于:https://www.cnblogs.com/lgh…

算法中的Strassen矩阵乘法

Introduction 介绍 Strassen in 1969 which gives an overview that how we can find the multiplication of two 2*2 dimension matrix by the brute-force algorithm. But by using divide and conquer technique the overall complexity for multiplication two matrices i…

零拷贝、mmap、sendfile

目录零拷贝mmapsendFile总结零拷贝 要了解零拷贝&#xff0c;首先得先了解一下传统 IO 的执行流程&#xff0c;这里举个例子&#xff0c;通过传统的 IO 进行网络传输来传输一个文件。 先上一张图&#xff0c;这张图就代表了传统 IO 传输文件的流程。 读取文件的时候&#xf…

网页服务器和mysql服务器_实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法...

实现Web服务器之间使用同一个MYSQL和相同的网页配置文件的方法发布时间&#xff1a;2020-04-15 16:42:41来源&#xff1a;亿速云阅读&#xff1a;133作者&#xff1a;三月栏目&#xff1a;数据库亿速云负载均衡(Cloud Load Balancer)是对多台云服务器进行流量分发的服务。亿速云…

传128GB版iPad4售价为799/929美元

外媒9to5mac报道&#xff0c;苹果将推出一款升级版iPad4&#xff0c;外观和iPad 4相同&#xff0c;还是黑白两色的&#xff0c;只加入了新的SKU。 据报道&#xff0c;这款升级版iPad4还有128GB版&#xff0c;随着这条消息传出&#xff0c;不久关于128GB版iPad4的售价信息也传出…

(西工程-金花)小米路由器连接哆点设置WiFi保姆式教程

小米路由器连接电源,用根网线一端插入寝室的网口处,另一端插入小米路由器的WAN口手机或者电脑连接WiFi,我这里是通过手机浏览器打开192.168.31.1进入无线路由器管理页面进行配置小米路由器&#xff0c;配置WiFi的一些基本参数,例如:WiFi名称,密码之类的信息 进入无线路由器管理…

基于MINA框架快速开发网络应用程序

1&#xff0e;MINA框架简介 Netty、Mina、Cindy都是不错的NIO开源框架&#xff0c;后两者都是在Netty的基础上演化出来的。MINA(Multipurpose Infrastructure for Network Applications)是用于开发高性能和高可用性的网络应用程序的基础框架。通过使用MINA框架可以可以省下处理…

Python中@staticmethod和@classmethod之间的区别

classmethod装饰器 (The classmethod Decorator) The classmethod decorator is an inbuilt function decorator that gets evaluated after the function is defined. The result of the evaluation shadows the function definition. The classmethods first argument is alw…

go 声明二维数组_一篇文章了解Go语言中数组Arrays的使用内幕

概述与其他编程语言类似&#xff0c;Go语言也有数组array。Go语言中&#xff0c;数组的行为和其他语言没有什么不同.Go语言中还有一个叫做切片slice的东西&#xff0c;它就像是对数组的引用。在本文中&#xff0c;我们将只研究数组。定义数组是同一类型元素的连续集合&#xff…