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目录下有如下文件夹

这个工具打包的过程大致如下,
编写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)
自动解压的时候,会在这个指定目录中找这个文件

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

时间: 2024-08-29 13:53:29

mysql自动化安装的相关文章

mysql自动化安装脚本

学习了两周linux shell脚本,终于写出一个mysql自动化安装脚本.加上今天一整天的测试,可以正常执行安装mysql 5.5.40. 其他版本还没有测试.现分享一下.也请高手指点一下.执行该脚本的前提是: 环境介绍: 1.redhat 6.3 x64,最小化安装 2.RAM: 2G,HD:30G 3.关闭selinux 4.配置好yum源(我使用自己配置的源) 5.打开ssh,病配置好iptables,允许远程登录访问. 6.所需软件和文件: cmake-2.8.10.1.tar.gz

mysql自动化安装脚本开发

最近正好有空闲时间进行mysql自动安装脚本开发,预计先用shell实现一个版本,后续继续用python改造开发,最终实现python版本的开发. 2019-3-18,完成shell脚本的mysql自动化安装脚本的开发与调试.信息如下:mysql版本为5.6.43,通过shell函数的方式实现数据安装的3个阶段,再加上一个全局阶段,共4个阶段 1.全局阶段通过if [ $(id -u) != "0" ]判断当前操作用户是否为root,如不等0,则提示用户使用root用户执行该脚本,实现

[MySQL] MySQL的自动化安装部署

有过MySQL运维的人应该都清楚,线上的MySQL一般都采用源码编译,因为这样才可以根据企业的各自需要选择要编译的功能,虽然MySQL的源码编译挺简单的,但是试想一下,如果你有几百台服务器同时要安装MySQL,难道你还一台台去手动编译.编写配置文件吗?这显然太低效了,本文讨论MySQL的自动化安装部署. 1.制作符合自己需求的RPM包 我们要根据MySQL的源码编译符合企业需求的RPM包,源码获取命令如下: wget http://downloads.mysql.com/archives/get

一键自动化安装mysql服务端

声明 作者:昨夜星辰 博客:http://yestreenstars.blog.51cto.com/ 本文由本人创作,如需转载,请注明出处,谢谢合作! 目的 一键自动化安装mysql服务端. 环境 OS: CentOS 6.2 32 mysql: 5.6.20 配置 #!/bin/bash # Script Name: One-key Automatic Install MySQL server # Author: yestreenstars # Create Time: 2014-08-18

mysql 5.6.27脚本自动化安装

#!/bin/bash #-------------------install mysql 5.6.27 :: begin------------------------ mysql -V &>/dev/null if [ $? -eq 0 ];then     mysql -V     echo "mysql is exist"  else     cd /app/service/tools     tar -zxvf mysql-5.6.27.tar.gz     c

自动化安装Cacti 0.8.8h脚本

自动化安装Cacti 0.8.8h脚本 一.目的 1.1 监控目的 目前我们已经有zabbix监控系统,但是有客户需求需要流量报表,因此应此类客户的需求,部署Cacti流量监控系统,来监控客户服务器或交换机端口,为客户提供流量报表截图. 1.2 本文目的 快速部署Cacti流量监控系统,为后期相关工程师部署此系统提供借鉴与参考. 二.理论基础 2.1 相关理论 Cacti是用php语言实现的一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.snmp服务获取数据,

MySQL5.6生产库自动化安装部署

自动化运维是一个DBA应该掌握的技术,其中,自动化安装数据库是一项基本的技能,本文中的安装脚本已通过测试,作为生产库来说没有问题,鉴于每个公司存储规划要求不同,可以按需自行修改脚本. 脚本中已经注释说明一些基本的安装信息 本脚本默认启用5.6部分新特性 innodb_buffer_pool_dump_at_shutdown=1  它dump的不是数据,是Id号 innodb_buffer_pool_load_at_startup=1 开启这个两个参数当数据库重启后把这些热数据重新加载回去 只有正

使用kickstart、dchp、tftp、http,实现RHEL 5.5操作系统的无人值守自动化安装

////使用kickstart.dchp.tftp.http,实现RHEL 5.5操作系统的无人值守自动化安装//Server IP:192.168.10.178 操作系统:Red Hat Enterprise Linux Server release 5.5////具体步骤如下: 1. 安装.配置DHCP服务 1.1 使用如下命令检查dhcp是否安装,rhel5系统默认安装dhcp-3.0.5-23.el5 [[email protected] ~]# rpm -qa | grep dhcp

ansible实现lnamp自动化安装

简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架. ansible特点: 模块化,调用特定的模块,完成特定的任务: 基于Python语言实现,由Paramiko.PyYAML和Jinja2三个关键模