1. 创建一个目录,用来存放脚本和安装包
[root@localhost opt]
[root@localhost opt]
[root@localhost mysql]
[root@localhost mysql]
[root@localhost mysql]
install.sh packages
[root@localhost mysql]
2. 下载好对应的安装包
[root@localhost mysql]
mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
3. 编写脚本
[root@localhost mysql]
if [ $UID -ne 0 ];then
echo "Please execute this script uses root user."
exit 250
fi
install_dir=/usr/local
data_dir=/opt/data
read -p "请输入要创建的实例的个数: " instance_count
if [ -z $instance_count ];then
instance_count=1
fi
echo $instance_count | grep -E "^[0-9]+$" &>/dev/null
if [ $? -ne 0 ];then
instance_count=1
fi
read -p "请输入您要使用的数据库密码: " password
if [ -z $password ];then
password=1
fi
yum -y install ncurses-compat-libs perl
id mysql &>/dev/null
if [ $? -ne 0 ];then
useradd -r -M -s /sbin/nologin mysql
fi
if [ ! -d $install_dir/mysql-5.7.34-linux-glibc2.12-x86_64 ] && [ ! -d $install_dir/mysql ];then
tar xf packages/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C $install_dir
ln -s $install_dir/mysql-5.7.34-linux-glibc2.12-x86_64 $install_dir/mysql
fi
chown -R mysql.mysql $install_dir/mysql*
echo "export PATH=$install_dir/mysql/bin:\$PATH" > /etc/profile.d/mysql.sh
function single(){
if [ ! -d $data_dir ];then
mkdir -p $data_dir
fi
chown -R mysql.mysql $data_dir
content=$(ls $data_dir | wc -l)
if [ $content -eq 0 ];then
$install_dir/mysql/bin/mysqld --initialize-insecure --user mysql --datadir=$data_dir
fi
cat > /etc/my.cnf <<EOF
[mysqld]
basedir = $install_dir/mysql
datadir = $data_dir
socket = /tmp/mysql.sock
port = 3306
pid-file = $data_dir/mysql.pid
user = mysql
skip-name-resolve
EOF
sed -ri "s#^(basedir=).*#\1$install_dir/mysql#g" $install_dir/mysql/support-files/mysql.server
sed -ri "s#^(datadir=).*#\1$data_dir#g" $install_dir/mysql/support-files/mysql.server
cat > /usr/lib/systemd/system/mysqld.service <<EOF
[Unit]
Description=Mysql server daemon
After=network.target
[Service]
Type=forking
ExecStart=$install_dir/mysql/support-files/mysql.server start
ExecStop=$install_dir/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now mysqld
sleep 3
$install_dir/mysql/bin/mysql -uroot -e "set password = password('$password')"
echo -e "你的密码设置成功,密码是 \033[1;32;40m $password \033[0m"
}
function multi(){
port=3305
export PATH=$install_dir/mysql/bin:$PATH
cat > /etc/my.cnf <<EOF
[mysqld_multi]
mysqld = $install_dir/mysql/bin/mysqld_safe
mysqladmin = $install_dir/mysql/bin/mysqladmin
EOF
sed -i 's!^bindir=/usr/local/mysql/bin!bindir=/usr/local/mysql/bin\nexport PATH=\$bindir:\$PATH!g' $install_dir/mysql/support-files/mysqld_multi.server
for i in $(seq $instance_count);do
let port++
if [ ! -d $data_dir/port ];then
mkdir -p $data_dir/$port
chown -R mysql.mysql $data_dir
fi
content=$(ls $data_dir/$port | wc -l)
if [ $content -eq 0 ];then
$install_dir/mysql/bin/mysqld --initialize-insecure --user mysql --datadir=$data_dir/$port
fi
cat >> /etc/my.cnf <<EOF
[mysqld$port]
datadir = $data_dir/$port
port = $port
socket = /tmp/mysql$port.sock
pid-file = $data_dir/$port/mysql.pid
log-error=/var/log/$port.log
EOF
$install_dir/mysql/bin/mysqld_multi start $port
sleep 3
$install_dir/mysql/bin/mysql -uroot -P$port -h127.0.0.1 -e "set password = password('$password')"
echo -e "你的密码设置成功,密码是 \033[1;32;40m $password \033[0m"
$install_dir/mysql/bin/mysqld_multi stop $port
done
cat > /usr/lib/systemd/system/mysqld.service <<EOF
[Unit]
Description=mysql server daemon
After=network.targe
[Service]
Type=forking
ExecStart=$install_dir/mysql/support-files/mysqld_multi.server start
ExecStop=$install_dir/mysql/support-files/mysqld_multi.server stop
ExecReload=/bin/kill -HUP
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now mysqld
}
if [ $instance_count -eq 1 ];then
single
else
multi
fi
[root@localhost mysql]
4. 验证效果
[root@localhost mysql]
+ '[' 0 -ne 0 ']'
+ install_dir=/usr/local
+ data_dir=/opt/data
+ read -p '请输入要创建的实例的个数: ' instance_count
请输入要创建的实例的个数: 5
+ '[' -z 5 ']'
+ echo 5
+ grep -E '^[0-9]+$'
+ '[' 0 -ne 0 ']'
+ read -p '请输入您要使用的数据库密码: ' password
请输入您要使用的数据库密码:
+ '[' -z ']'
+ password=1
+ yum -y install ncurses-compat-libs perl
过程略……
[root@localhost mysql]
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 80 *:3307 *:*
LISTEN 0 80 *:3308 *:*
LISTEN 0 80 *:3309 *:*
LISTEN 0 80 *:3310 *:*
[root@localhost mysql]