MySQL有三个版本:二进制,源码包,RPM。
下面讲讲二进制包的安装过程
下载地址:http://dev.mysql.com/downloads/mysql/
选择Linux-Generic
我这里选择的是mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
解压后,里面有个文件INSTALL-BINARY,其实给出了二进制包的部署过程
shell> groupadd mysqlshell> useradd -r -g mysql -s /bin/false mysqlshell> cd /usr/localshell> tar zxvf /path/to/mysql-VERSION-OS.tar.gzshell> ln -s full-path-to-mysql-VERSION-OS mysqlshell> cd mysqlshell> chown -R mysql .shell> chgrp -R mysql .shell> scripts/mysql_install_db --user=mysqlshell> chown -R root .shell> chown -R mysql datashell> bin/mysqld_safe --user=mysql Next command is optionalshell> cp support-files/mysql.server /etc/init.d/mysql.server |
相对于实际生产环境的部署,上面在初始化数据库的过程中少了一步-即指定配置文件,如果配置文件确认了,数据目录,日志目录都确认了,MySQL二进制版本的部署还是相当容易的一件事情。
下面写了一个脚本,基于后面提供的配置文件,执行格式如下:
sh 4.sh /root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz /mysql3306 3306
其中 4.sh是脚本,/root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz是二进制包的绝对路径,/mysql3306是basedir,3306是需设置的端口,
利用该脚本,只需要预先定义好配置文件,就可进行MySQL数据库的快速部署以及一台服务器上多个实例的部署。
#!/bin/bash#需传入三个参数,第一个是mysql二进制压缩包的路径(绝对路径),譬如/root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz,#第二个是mysql的basedir,即需要创建在哪个目录下,第三个是设置的端口号filename=$1basedir=$2port=$3groupadd mysqluseradd -r -g mysql -s /bin/false mysqlcd /usr/localtar zxvf $filename#file是获取mysql二进制包的名称,譬如mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz#dir是mysql压缩包的路径,不含包名本身,譬如/root,因为后续的配置文件my.cnf也是放到这个路径下file=`basename $filename`dir=`dirname $filename`#获取解压后的名字,即mysql-5.6.28-linux-glibc2.5-x86_64after_tar_file=${file:0:-7}#将二进制包改名为 mysql+端口号,这样也便于后续的区分mv $after_tar_file mysql"$port"cd mysql"$port"#将原始的配置文件(需和mysql压缩包放到同层目录下,在本例中是/root/my.cnf)copy到解压并改名后的mysql二进制目录下,修改为my+端口号.cnfcp $dir/my.cnf ./my"$port".cnfuser_cnf=my"$port".cnf#下面主要是将原始配置文件中的路径修改为自己设定的路径,即传入的第二个参数#整个的挑战在于传入的路径带有"/",在sed替换时会有问题,所有用了一个取巧的思路,即先将"/"替换为"|",进行sed替换,然后再将文件中的"|"修改回"/"basedir_new=${basedir////|}sed -i "s///project//class2/$basedir_new/g" $user_cnfsed -i "s/|////g" $user_cnf#设置server_id,取当前的秒值server_id=`date +%s`sed -i /^server_id/s/.*/server_id="$server_id"/ $user_cnf#设置端口号sed -i /^port/s/.*/port="$port"/ $user_cnf#创建必要的目录并修改权限mkdir -p "$basedir"/mysql/{run,data,share,log,tmp}chown -R mysql $basedirchgrp -R mysql $basedir#下面这个是非必要的,具体看后面的总结cp share/english/errmsg.sys "$basedir"/mysql/share/#初始化时--force也是非必要的,具体可见后面的总结scripts/mysql_install_db --user=mysql --defaults-file="$user_cnf" --forcebin/mysqld_safe --defaults-file="$user_cnf" --user=mysql & |