现在软件安装经常以来yum就可以顺利安装,但如没有网络时,安装这种安装无法实现,即使使用rpm安装在新节点上也需要再执行安装过程,本文将介绍编译安装方式的自动安装方法,可以实现批量安装或方便迁移软件和数据。

先来看下通过脚本自动完成编译安装的方法

#!/bin/bash

# 下载MySQL源码包

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.35.tar.gz

# 解压源码包

tar -zxvf mysql-5.7.35.tar.gz

# 安装依赖库

yum install -y cmake make gcc gcc-c++ bison-devel ncurses-devel

# 进入源码目录

cd mysql-5.7.35

# 创建编译目录

mkdir build

cd build

# 编译安装MySQL

cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DWITH_BOOST=boost \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DENABLED_LOCAL_INFILE=1 \

-DENABLE_DTRACE=0 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_EMBEDDED_SERVER=OFF \

-DWITH_DEBUG=OFF \

-DWITH_SSL=system

make && make install

# 初始化MySQL

cd /usr/local/mysql

./bin/mysqld --initialize-insecure --user=mysql

# 添加到系统服务

cp support-files/mysql.server /etc/init.d/mysql

chmod +x /etc/init.d/mysql

chkconfig --add mysql

chkconfig mysql on

# 启动MySQL

service mysql start

# 获取不同版本的初始密码命令
if [[ -n "$(mysql --version | grep '5.6')" ]]; then
  init_pwd_command='grep "temporary password" /usr/local/mysql/log/mysqld.log | awk "{print \$NF}"'
elif [[ -n "$(mysql --version | grep '5.7')" ]]; then
  init_pwd_command='grep "A temporary password" /usr/local/mysql/log/mysqld.log | awk "{print \$NF}"'
elif [[ -n "$(mysql --version | grep '8.0')" ]]; then
  init_pwd_command='grep "temporary password" /usr/local/mysql/log/mysqld.log | sed -n "1p" | awk "{print \$NF}"'
fi

init_pwd=$(eval $init_pwd_command)

# 设置root密码
mysql -uroot -p$init_pwd -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';"

mysql -e "flush privileges;"

mysql -e "CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"

# 创建新用户并授权
mysql -e "create user 'new_user'@'%' identified by 'password';"

mysql -e "grant all privileges on *.* to 'new_user'@'%' with grant option;"

GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY '123456Aa.';