这是我写的一个MySQL源码安装的脚本,采用菜单模式,根据提示,贴和自己的环境,进行下载。反复修改,运行无误,分享出来,脚本如下:
#!/bin/bash # #Author: chenjiao color_red="echo -e \033[31m" color_green="echo -e \033[32m" colorEnd="\033[0m" menu(){ cat << EOF 1 已有源码,直接编译安装 2 下载源码,直接编译安装 3 清除环境(慎用) 4 安装编译所需工具 5 初始化生成密码 q 正常退出 EOF read -p "请输入选项: " choose } clear_env (){ yum remove -y mariadb* mysql* &> /dev/null find / -iname "*mysql*" |xargs rm -rf setenforce 0 &> /dev/null sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config systemctl disable --now firewalld id mysql &> /dev/null && userdel -r mysql 2> /dev/null useradd -r -s /sbin/nologin -M mysql &> /dev/null rm -rf /usr/local/mysql/ mkdir /usr/local/mysql/ $color_green已删除原有数据库和mysql文件,已关闭selinux和firewalld,已新建mysql用户和/usr/local/mysql文件夹$colorEnd } install_tools (){ yum install -y ncurses-devel cmake gcc perl-Data-Dumper gcc-c++ git openssl-devel make > /dev/null && $color_green编译工具已安装...$colorEnd || $color_red安装工具失败,请检查网络或yum$colorEnd } mysql_source1 (){ read -p "请输入你的源码包地址和名称:" mysql_pkg mv $mysql_pkg /usr/local/mysql/mysql.tar.gz &> /dev/null && $color_green检测到源码包准备开始编译...$colorEnd || $color_red未找到源码,请检查重来...$colorEnd } mysql_source2 (){ wget https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-boost-5.7.38.tar.gz --no-check-certificate -O /usr/local/mysql/mysql.tar.gz } code_install (){ tar xf /usr/local/mysql/mysql.tar.gz -C /usr/local/mysql/ cd /usr/local/mysql/mysql-5.7.38/ cmake . \ -DWITH_BOOST=boost/boost_1_59_0/ \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DSYSCONFDIR=/etc \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DINSTALL_MANDIR=/usr/share/man \ -DMYSQL_TCP_PORT=3306 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8 \ -DEXTRA_CHARSETS=all \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 $color_greencmake完成,准备make...$colorEnd && make install } init_mysql (){ cd /usr/local/mysql && mkdir mysql-files && chown -R mysql.mysql /usr/local/mysql /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 2>&1 | awk '/temporary password is generated/{print $NF}' # 这里将初始化的输出转化为标准输出再用awk之间截取出密码 /usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data } while true;do menu case $choose in 1) mysql_source1 code_install;; 2) mysql_source2 code_install;; 3) clear_env;; 4) install_tools;; 5) init_mysql;; q) $color_green正常退出...$colorEnd && exit;; *) $color_red输入有误,请检查重来...$colorEnd ;; esac done
注:初始化mysql时候,初始密码会出现在屏幕中
以下是引用云计算机磊哥一些话:
{源码安装
与二进制(RPM)发行版本相比,如果我们选择了通过源代码进行安装,那么在安装过程中我们能够对MySQL
所做的调整将会更多更灵活一些。因为通过源代码编译我们可以:
a) 针对自己的硬件平台选用合适的编译器来优化编译后的二进制代码;
b) 根据不同的软件平台环境调整相关的编译参数;
c) 针对我们特定应用场景选择需要什么组件不需要什么组件;
d) 根据我们的所需要存储的数据内容选择只安装我们需要的字符集;
e) 同一台主机上面可以安装多个MySQL;
f) 等等其他一些可以根据特定应用场景所作的各种调整。
在源码安装给我们带来更大灵活性的同时,同样也给我们带来了可能引入的隐患:
a) 对编译参数的不够了解造成编译参数使用不当可能使编译出来的二进制代码不够稳定;
b) 对自己的应用环境把握失误而使用的优化参数可能反而使系统性能更差;
c) 还有一个并不能称之为隐患的小问题就是源码编译安装将使安装部署过程更为复杂,所花费的时间更长}