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

其中
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台的,这个自动化安装的优点就显现出来了

--------------------------------------分割线 --------------------------------------

Ubuntu 14.04下安装MySQL

《MySQL权威指南(原书第2版)》清晰中文扫描版 PDF

Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL

Ubuntu 14.04下搭建MySQL主从服务器

Ubuntu 12.04 LTS 构建高可用分布式 MySQL 集群

Ubuntu 12.04下源代码安装MySQL5.6以及Python-MySQLdb

MySQL-5.5.38通用二进制安装

--------------------------------------分割线 --------------------------------------

本文永久更新链接地址:

相关内容