zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    osgEarth学习
    《C++ Primer》 第12章 类
    C++中 指针与引用的区别
    C++ primer笔记第15章 面向对象编程
    Pandas数据去重和对重复数据分类、求和,得到未重复和重复(求和后)的数据
    Python转页爬取某铝业网站上的数据
    使用Nginx+Tomcat实现分离部署
    使用icomoon字体图标详解
    如何配置PetShop网站
    nopcommerce开源框架技术总结如何实现把controller中的Model的数据传入VIEW中,并生产相应的Html代码
  • 原文地址:https://www.cnblogs.com/tippoint/p/4010976.html
Copyright © 2011-2022 走看看