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…

c/c++ 编程试题

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

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

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

VS2010 运行库设置

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

零拷贝、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名称,密码之类的信息 进入无线路由器管理…

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

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

ffmpeg 使用ffplay 进行 hls 拉流 分析 1

ffmpeg 使用 ffplay 进行 hls 拉流 分析 1 从使用ffplay 调用 http://192.168.1.100:8080/live/livestream.m3u8 开始&#xff0c;进入到ffmpeg 的分析使用的协议选择相应的解复用器的步骤。 其他协议或者文件方式的使用ffplay也是这个步骤流程的。 目录&#xff1a;一、流程图…

搜狗输入法输出特殊符号快捷键

https://www.petefreitag.com/cheatsheets/ascii-codes/ 参考上个编码网站大全 详细步骤为&#xff1a;alt长按 &#xff0b; 编码数字 例如&#xff1a;平方的编码为178-----长按alt178 即可&#xff0c;178是数字一个一个挨个按即可 常用的特殊符号如下&#xff1a; 平方&…

[BuildRelease Management]CC.NET架构

一 CC.NET的操作流程 1) 等待Trigger的唤醒&#xff1b; 2&#xff09;从Source Control System查询上次build以后的修改列表&#xff1b; 3&#xff09;如果任何修改被发现或是Trigger触发类型为 force the build &#xff1a; 3.1&#xff09;为build产生一个label number&a…

python 入门到实践期末考试常出现的考试内容_Python编程入门到实践—列表篇(一)...

一、列表是什么&#xff1f;列表由一系列按特定顺序排列的元素组成。可以创建包含字母表中所有字母、数字0-9或所有家庭成员姓名的列表&#xff1b;也可以将任何东西加入列表中&#xff0c;其中的元素之间可以没有任何关系。列表通常包含多个元素&#xff0c;给列表指定一个表示…

c#中将集合写入文本_在C#中将记录插入MySQL数据库

c#中将集合写入文本In the last tutorial (how to connect with MySQL database in C#?), we learned about making the connection with MySQL database in C#. Here, in this tutorial, we will learn how to insert the records in MySQL database in C#? 在上一教程( 如何…

day1-Linux操作系统基础

该专栏所有内容笔记均来自传智播客培训班 1.什么是操作系统&#xff08;operate system OS&#xff09; 小议&#xff1a;承上启下作用&#xff0c;向下可以控制硬件&#xff0c;向上能够支持软件的运行。一个可以控制硬件的软件。 小明找小红聊天&#xff0c;小明打开QQ&…