MySQL的二进制安装脚本
重要说明(一)
MySQL 5.6以及旧版本,直接安装即可空密码登录!MySQL 5.7以及新版本,安装后在日志中生成一次性root密码,第一次登录后必须先修改密码以下安装 5.7 和 8.0 脚本已将初始密码修改为 centos安装 5.7 和 8.0 之后,安全加固脚本使用了 expect 语句,注意语法
# MySQL 5.7 以及新版本
初始化操作:
cd /usr/local/mysql/
./scripts/mysql_install_db --initialize --datadir=/data/mysql --user=mysql
其中选项 --initialize 就是'生成初始密码的原因!!!!'
因此 MySQL 5.7 以及新版本的安装,在这一步骤中必须添加此选项
# 注意!!!!!!!!!!!!!!
MariaDB各个版本的安装都不能加上此选项!!!!!!!!!!!!!!
重要说明(二)
各个版本安装包中内容会有所不同,注意检查是否有【 service unit 】文件以下所有版本安装均使用 /etc/rc.d/init.d/目录实现开机自启
只有存在 service unit 文件,才能够将其拷贝至'/usr/lib/systemd/system/'目录
从而达到 使用`systemctl`进行控制 的效果!!!!!!
# 否则就只能使用目录'/etc/rc.d/init.d/',用于存放服务启动脚本!!
重要说明(三)
注意:从10.4版本开始,安全加固脚本多了一个提问!出现在第二题!!
此项会导致一个变化:安装完毕之后,若当前用户是系统root,则能够以数据库 root 身份空口令登录!!
这是一种更新机制,不是bug 理由:系统 root 账户具有所有权限,应该有空口令登录数据库的特权
详细解释与解决方法:https://www.chaoswork.cn/1107.html
# 若想禁止空口令登录,只需要一条SQL语句
# 登录数据库之后执行:
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("passwd")
'其中passwd即为你想要设置的密码
MySQL 5.6
#!/bin/bash
DIR=`pwd`
NAME="mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz"
FULL_NAME=${DIR}/${NAME}
yum install -y libaio perl-Data-Dumper libncurses*
if [ ! -f ${FULL_NAME} ];then
echo "package not found"
exit 1
fi
if [ -h /usr/local/mysql ];then
echo "MySQL is already installed"
exit 2
fi
if id mysql &> /dev/null ; then
userdel -f -r mysql &> /dev/null
fi
useradd -r -s /sbin/nologin mysql
mkdir -pv /data/mysql
chown mysql:mysql /data/mysql
tar xf ${FULL_NAME} -C /usr/local
cd /usr/local
ln -sv mysql-5.6.47-linux-glibc2.12-x86_64 mysql
chown -R root:root /usr/local/mysql/
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
EOF
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start
ln -sv /usr/local/mysql/bin/* /usr/bin/
mysql_secure_installation << EOF
y
centos
centos
y
y
y
y
EOF
MySQL 5.7
############ 安装8.0只需要修改包名即可 ##############
'注意后缀是 gz 还是 xz'
# 安装包
mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
# 脚本内容
#!/bin/bash
# 准备环境与变量
DIR=`pwd`
PACKAGE="mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz"
NAME="mysql-5.7.29-linux-glibc2.12-x86_64"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null
echo -e "\e[1;32m环境准备OK\e[0m"
# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
echo "package not found"
exit 1
fi
if [ -h /usr/local/mysql ] ; then
echo "MySQL is already installed"
exit 2
fi
echo -e "\e[1;32m正在安装MySQL数据库,请等待。。。\e[0m"
# mysql用户检查
if id mysql &> /dev/null ; then
userdel -f -r mysql &> /dev/null
fi
useradd -r -s /sbin/nologin mysql
# 解压
tar xf $PACKAGE -C /usr/local
cd /usr/local/
ln -s $NAME/ mysql &> /dev/null
chown -R root.root /usr/local/mysql/
# 设置PATH路径
ln -sv /usr/local/mysql/bin/* /usr/bin/ &> /dev/null
# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
# 初始化数据库
mysqld --initialize --user=mysql --datadir=/data/mysql
PASSWD=`awk '/temporary password/{print $NF}' /data/mysql/mysql.log`
# 服务启动脚本与开机自启
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
# 修改初始密码
mysqladmin -uroot -p"$PASSWD" password centos &> /dev/null
# 安全加固 【注意此处调用了expect语法】
yum -y install expect &> /dev/null
expect &> /dev/null <<EOF
spawn mysql_secure_installation
expect {
"Enter password" { send "centos\n";exp_continue }
"Press y" { send "n\n";exp_continue }
"Change the password" { send "n\n";exp_continue }
"Remove anonymous users" { send "y\n";exp_continue }
"Disallow root login" { send "y\n";exp_continue }
"Remove test database" { send "y\n";exp_continue }
"Reload privilege" { send "y\n" }
}
EOF
echo -e "\e[1;32mMySQL数据库安装完成!\e[0m"
MySQL 8.0
## 包名
mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz 注意后缀'xz'
#!/bin/bash
#
#********************************************
#Author: jacklee
#QQ: 1227163339
#Time: 2020-09-29_19:24:59
#FileName: ins.sh
#Copyright: 2020 All rights reserved
#Description:
#*********************************************
# 准备环境与变量
DIR=`pwd`
PACKAGE="mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz"
NAME="mysql-8.0.19-linux-glibc2.12-x86_64"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null
# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
echo "package not found"
exit 1
fi
if [ -h /usr/local/mysql ] ; then
echo "mysql is already installed"
exit 2
fi
echo -e "\e[1;32m正在安装MySQL数据库,请等待。。。\e[0m"
# mysql用户检查
if id mysql &> /dev/null ; then
userdel -f -r mysql &> /dev/null
fi
useradd -r -s /sbin/nologin mysql
# 解压
tar xf $PACKAGE -C /usr/local
cd /usr/local/
ln -s $NAME/ mysql &> /dev/null
chown -R root.root /usr/local/mysql/
# 设置PATH路径
ln -sv /usr/local/mysql/bin/* /usr/bin/ &> /dev/null
# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
# 初始化数据库
mysqld --initialize --user=mysql --datadir=/data/mysql
PASSWD=`awk '/temporary password/{print $NF}' /data/mysql/mysql.log`
# 服务启动脚本与开机自启
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
# 修改初始密码
mysqladmin -uroot -p"$PASSWD" password centos &> /dev/null
# 安全加固 【注意此处调用了expect语法】
yum -y install expect &> /dev/null
expect &> /dev/null <<EOF
spawn mysql_secure_installation
expect {
"Enter password" { send "centos\n";exp_continue }
"Press y" { send "n\n";exp_continue }
"Change the password" { send "n\n";exp_continue }
"Remove anonymous users" { send "y\n";exp_continue }
"Disallow root login" { send "y\n";exp_continue }
"Remove test database" { send "y\n";exp_continue }
"Reload privilege" { send "y\n" }
}
EOF
echo -e "\e[1;32mMySQL数据库安装完成!\e[0m"
MariaDB 10.2.31
# 安装包
mariadb-10.2.31-linux-systemd-x86_64.tar.gz
# 脚本内容
#!/bin/bash
# 准备环境与变量
DIR=`pwd`
PACKAGE="mariadb-10.2.31-linux-systemd-x86_64.tar.gz"
NAME="mariadb-10.2.31-linux-systemd-x86_64"
INS_DIR="/usr/local"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null
echo -e "\e[1;32m环境准备OK\e[0m"
# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
echo "package not found"
exit 1
fi
if [ -h ${INS_DIR}/mysql ] ; then
echo "MariaDB is already installed"
exit 2
fi
echo -e "\e[1;32m正在安装MySQL数据库,请等待。。。\e[0m"
# mysql用户检查
if id mysql &> /dev/null ; then
userdel -f -r mysql
fi
useradd -r -s /sbin/nologin mysql
# 解压、软链接、文件属性
tar xf $PACKAGE -C $INS_DIR
cd $INS_DIR
ln -s $INS_DIR/$NAME $INS_DIR/mysql &> /dev/null
chown -R root.root $INS_DIR/mysql/
# 设置PATH路径
ln -s $INS_DIR/mysql/bin/* /usr/bin/ &> /dev/null
# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve
#socket=/data/mysql/mysql.sock
#log-error=/data/mysql/mysql.log
#pid-file=/data/mysql/mysql.pid
EOF
# 初始化数据库
cd $INS_DIR/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql &> /dev/null
# 服务启动脚本与开机自启
cp -a $INS_DIR/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
# 安全加固
mysql_secure_installation &> /dev/null << EOF
y
centos
centos
y
y
y
y
EOF
echo -e "\e[1;32mMySQL数据库安装完成!\e[0m"
MariaDB 10.5.5
# 安装包
mariadb-10.5.5-linux-systemd-x86_64.tar.gz
# 脚本内容
#!/bin/bash
# 准备环境与变量
DIR=`pwd`
PACKAGE="mariadb-10.5.5-linux-systemd-x86_64.tar.gz"
NAME="mariadb-10.5.5-linux-systemd-x86_64"
INS_DIR="/usr/local"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null
echo -e "\e[1;32m环境准备OK\e[0m"
# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
echo "package not found"
exit 1
fi
if [ -h ${INS_DIR}/mysql ] ; then
echo "MariaDB is already installed"
exit 2
fi
echo -e "\e[1;32m正在安装MariaDB数据库,请等待。。。\e[0m"
# mysql用户检查
if id mysql &> /dev/null ; then
userdel -f -r mysql
fi
useradd -r -s /sbin/nologin mysql
# 解压、软链接、文件属性
tar xf $PACKAGE -C $INS_DIR
cd $INS_DIR
ln -s $INS_DIR/$NAME $INS_DIR/mysql &> /dev/null
chown -R root.root $INS_DIR/mysql/
# 设置PATH路径
ln -s $INS_DIR/mysql/bin/* /usr/bin/ &> /dev/null
# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve
#socket=/data/mysql/mysql.sock
#log-error=/data/mysql/mysql.log
#pid-file=/data/mysql/mysql.pid
EOF
# 初始化数据库
cd $INS_DIR/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql &> /dev/null
# 服务启动脚本与开机自启
cp -a $INS_DIR/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
# 安全加固
mysql_secure_installation &> /dev/null << EOF
y
y
centos
centos
y
y
y
y
EOF
echo -e "\e[1;32mMariaDB数据库安装完成!\e[0m"