- A+
所属分类:linux技术
mysql二进制安装脚本部署
单实例
[root@localhost ~]# mkdir mysql //创建存放脚本目录 [root@localhost ~]# ls anaconda-ks.cfg mysql [root@localhost ~]# cd mysql/ [root@localhost mysql]# mkdir files //创建安装包目录 [root@localhost mysql]# ls files [root@localhost mysql]# ls files/ mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz [root@localhost mysql]# touch mysql_install.sh //创建脚本文件 [root@localhost mysql]# chmod +x mysql_install.sh //赋予执行权限 [root@localhost mysql]# ll total 0 drwxr-xr-x. 2 root root 56 Sep 19 21:16 files -rwxr-xr-x. 1 root root 0 Sep 19 21:18 mysql_install.sh [root@localhost mysql]# vim mysql_install.sh [root@localhost mysql]# cat mysql_install.sh #!/bin/bash #设置执行权限 if [ $UID -ne 0 ];then echo "请以管理员用户进行执行" exit fi read -p "请输入要创建的实例个数: " count read -p "请输入数据存放目录(默认路径: /opt/xbz): " datadir read -p "请输入要为数据库设置的密码: " passwd read -p "请输入安装目录,(默认路径:/usr/local/mysql):" mysql_install_dir #判断安装目录合法性 echo $mysql_install_dir | grep -E '^/[a-z][a-z]*(/[a-z][a-z]*)*$' &> /dev/null if [ $? -eq 0 ];then if [ ! -d $mysql_install_dir ];then mkdir -p $mysql_install_dir fi else mysql_install_dir=/usr/local/mysql fi #判断安装目录是否为空 if [ -z $mysql_install_dir ];then mysql_install_dir=/usr/local/mysql fi #创建用户 id mysql &> /dev/null if [ $? -ne 0 ];then useradd -r -M -s /sbin/nologin mysql else echo "用户已存在" fi #安装依赖包 dnf -y install ncurses-compat-libs &> /dev/null #解压软件包,修改目录和所属组 if [ ! -d $mysql_install_dir ];then echo "解压软件包" tar xf files/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local cd /usr/local mv mysql-5.7.38-linux-glibc2.12-x86_64 mysql fi chown -R mysql.mysql ${mysql_install_dir} #设置环境变量 echo 'export PATH=${mysql_install_dir}/lib' > /etc/ld.so.conf.d/mysql.conf #做头文件 ln -s ${mysql_install_dir}/include /usr/include/mysql #配置lib echo '${mysql_install_dir}/lib' > /etc/ld.so.conf.d/mysql.conf ldconfig #设置man文档 grep '${mysql_install_dir}/man' /etc/man_db.conf &> /dev/null if [ $? -ne 0 ];then sed -i "22a MANDATORY_MANPATH ${mysql_install_dir}/man" /etc/man_db.conf fi #建立数据存放目录 for i in $(seq $count);do if [ $count -eq 1 ];then if [ -z $datadir ];then datadir=/opt/xbz fi if [ ! -d $datadir ];then mkdir -p $datadir fi chown -R mysql.mysql $datadir ${mysql_install_dir}/bin/mysqld --initialize --user mysql --datadir $datadir &> /tmp/passwd #生成数据配置文件 cat > /etc/my.cnf << EOF [mysqld] basedir = ${mysql_install_dir} datadir = $datadir socket = /tmp/mysql.sock port = 3306 pid-file = $datadir/mysql.pid user = mysql skip-name-resolve EOF #配置服务启动脚本 if [ ! -f /etc/init.d/mysqld ];then cp -a ${mysql_install_dir}/support-files/mysql.server /etc/init.d/mysqld sed -ri '/^basedir=/c basedir=${mysql_install_dir}' /etc/init.d/mysqld sed -ri "/^datadir=/c datadir=$datadir" /etc/init.d/mysqld fi chmod +x /etc/init.d/mysqld #启动mysql并设置开机自启 service mysqld start sleep 6 chkconfig --add mysqld ln -s ${mysql_install_dir}/bin/mysql /usr/bin password=$(grep 'password' /tmp/passwd |awk '{print $NF}') mysql -uroot -p$password --connect-expired-password -e "set password = password('$passwd');" echo "数据库的密码是: $passwd" fi done [root@localhost mysql]# ./mysql_install.sh 请输入要创建的实例个数: 1 请输入数据存放目录(默认路径: /opt/xbz): 请输入要为数据库设置的密码: lnh@321 请输入安装目录,(默认路径:/usr/local/mysql): 解压软件包 Starting MySQL.Logging to '/opt/xbz/localhost.err'. SUCCESS! mysql: [Warning] Using a password on the command line interface can be insecure. 数据库的密码是: lnh@321 [root@localhost mysql]# mysql -uroot -p'lnh@321' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3 Server version: 5.7.38 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> exit Bye
使用函数的单实例
[root@localhost mysql]# cat mysql_install.sh #!/bin/bash #设置执行权限 if [ $UID -ne 0 ];then echo "请以管理员用户进行执行" exit fi function init(){ id mysql &> /dev/null if [ $? -ne 0 ];then useradd -r -M -s /sbin/nologin mysql else echo "用户已存在" fi #安装依赖包 dnf -y install ncurses-compat-libs &> /dev/null #解压软件包,修改目录和所属组 if [ ! -d $mysql_install_dir ];then echo "解压软件包" tar xf files/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local cd /usr/local mv mysql-5.7.38-linux-glibc2.12-x86_64 mysql else echo 'mysql已安装,不需要重复安装' exit fi chown -R mysql.mysql ${mysql_install_dir} #设置环境变量 echo 'export PATH=${mysql_install_dir}/lib' > /etc/ld.so.conf.d/mysql.conf #做头文件 ln -s ${mysql_install_dir}/include /usr/include/mysql #配置lib echo '${mysql_install_dir}/lib' > /etc/ld.so.conf.d/mysql.conf ldconfig #设置man文档 grep '${mysql_install_dir}/man' /etc/man_db.conf &> /dev/null if [ $? -ne 0 ];then sed -i "22a MANDATORY_MANPATH ${mysql_install_dir}/man" /etc/man_db.conf fi } function init2(){ if [ -z $datadir ];then datadir=/opt/xbz fi if [ ! -d $datadir ];then mkdir -p $datadir fi chown -R mysql.mysql $datadir } function single(){ init #建立数据存放目录 for i in $(seq $count);do if [ $count -eq 1 ];then init2 #判断是否已格式化 content=$(ls -l $datadir | grep -v total | wc -l) if [ $content -eq 0 ];then ${mysql_install_dir}/bin/mysqld --initialize --user mysql --datadir $datadir &> /tmp/passwd else echo '不需要重复初始化' exit fi #生成数据配置文件 cat > /etc/my.cnf << EOF [mysqld] basedir = ${mysql_install_dir} datadir = $datadir socket = /tmp/mysql.sock port = 3306 pid-file = $datadir/mysql.pid user = mysql skip-name-resolve EOF #配置服务启动脚本 if [ ! -f /etc/init.d/mysqld ];then cp -a ${mysql_install_dir}/support-files/mysql.server /etc/init.d/mysqld sed -ri '/^basedir=/c basedir=${mysql_install_dir}' /etc/init.d/mysqld sed -ri "/^datadir=/c datadir=$datadir" /etc/init.d/mysqld fi chmod +x /etc/init.d/mysqld #启动mysql并设置开机自启 service mysqld start sleep 6 chkconfig --add mysqld ln -s ${mysql_install_dir}/bin/mysql /usr/bin password=$(grep 'password' /tmp/passwd |awk '{print $NF}') mysql -uroot -p$password --connect-expired-password -e "set password = password('$passwd');" echo "mysql安装成功,数据库的密码是: $passwd" fi done } read -p "请输入要创建的实例个数: " count read -p "请输入安装目录,(默认路径:/usr/local/mysql):" mysql_install_dir read -p "请输入数据存放目录(默认路径: /opt/xbz): " datadir read -p "请输入要为数据库设置的密码(默认密码123456): " passwd #判断安装目录合法性 echo $mysql_install_dir | grep -E '^/[a-z][a-z]*(/[a-z][a-z]*)*$' &> /dev/null if [ $? -eq 0 ];then if [ ! -d $mysql_install_dir ];then mkdir -p $mysql_install_dir fi else mysql_install_dir=/usr/local/mysql fi #判断安装目录是否为空 if [ -z $mysql_install_dir ];then mysql_install_dir=/usr/local/mysql fi #判断数据存放目录是否为空 if [ -z $datadir ];then datadir=/opt/xbz fi #判断数据存放目录是否合法 echo $datadir | grep "^/[a-z][a-z]*(/[a-z][a-z]*)*$" &> /dev/null if [ $? -ne 0 ];then datadir=/opt/xbz fi #设置数据库密码格式 if [ -z $passwd ];then passwd=123456 else echo $passwd | grep -E '[a-z]+' | grep -E '[A-Z]+' | grep -E '[0-9]+' | grep -E '_+' &> /dev/null if [ $? -ne 0 ] || [ ${#passwd} -lt 8 ];then passwd=123456 fi fi #创建用户 if [ $count -eq 1 ];then single else echo "多实例" fi [root@localhost mysql]# ./mysql_install.sh 请输入要创建的实例个数: 3 请输入安装目录,(默认路径:/usr/local/mysql): 请输入数据存放目录(默认路径: /opt/xbz): 请输入要为数据库设置的密码(默认密码123456): 多实例 [root@localhost mysql]# ./mysql_install.sh 请输入要创建的实例个数: 1 请输入安装目录,(默认路径:/usr/local/mysql): 请输入数据存放目录(默认路径: /opt/xbz): 请输入要为数据库设置的密码(默认密码123456): 用户已存在 解压软件包 Starting MySQL.Logging to '/opt/xbz/localhost.err'. SUCCESS! ln: failed to create symbolic link '/usr/bin/mysql': File exists mysql: [Warning] Using a password on the command line interface can be insecure. mysql安装成功,数据库的密码是: 123456 [root@localhost mysql]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 80 *:3306 *:* LISTEN 0 128 [::]:22 [::]:* [root@localhost mysql]# mysql -uroot -p'123456' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3 Server version: 5.7.38 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> exit Bye
使用函数的单实例或者多实例
[root@localhost mysql]# cat mysql_install.sh #!/bin/bash #设置执行权限 if [ $UID -ne 0 ];then echo "请以管理员用户进行执行" exit fi #函数(单实例和多实例相同的部分) function init(){ id mysql &> /dev/null if [ $? -ne 0 ];then useradd -r -M -s /sbin/nologin mysql else echo "用户已存在" fi #安装依赖包 dnf -y install ncurses-compat-libs perl &> /dev/null #解压软件包,修改目录和所属组 if [ ! -d $mysql_install_dir ];then echo "解压软件包" tar xf files/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local cd /usr/local mv mysql-5.7.38-linux-glibc2.12-x86_64 mysql fi chown -R mysql.mysql ${mysql_install_dir} #设置环境变量 echo 'export PATH=${mysql_install_dir}/lib' > /etc/ld.so.conf.d/mysql.conf #做头文件 ln -s ${mysql_install_dir}/include /usr/include/mysql #配置lib echo '${mysql_install_dir}/lib' > /etc/ld.so.conf.d/mysql.conf ldconfig #设置man文档 grep '${mysql_install_dir}/man' /etc/man_db.conf &> /dev/null if [ $? -ne 0 ];then sed -i "22a MANDATORY_MANPATH ${mysql_install_dir}/man" /etc/man_db.conf fi } #函数(单实例和多实例相同的部分) function init2(){ if [ -z $datadir ];then datadir=/opt/xbz fi if [ ! -d $datadir ];then mkdir -p $datadir fi chown -R mysql.mysql $datadir } #函数(单实例) function single(){ init #建立数据存放目录 for i in $(seq $count);do if [ $count -eq 1 ];then init2 #判断是否已格式化 content=$(ls -l $datadir | grep -v total | wc -l) if [ $content -eq 0 ];then ${mysql_install_dir}/bin/mysqld --initialize --user mysql --datadir $datadir &> /tmp/passwd else echo '不需要重复初始化' exit fi #生成数据配置文件 cat > /etc/my.cnf << EOF [mysqld] basedir = ${mysql_install_dir} datadir = $datadir socket = /tmp/mysql.sock port = 3306 pid-file = $datadir/mysql.pid user = mysql skip-name-resolve EOF #配置服务启动脚本 if [ ! -f /etc/init.d/mysqld ];then cp -a ${mysql_install_dir}/support-files/mysql.server /etc/init.d/mysqld sed -ri '/^basedir=/c basedir=${mysql_install_dir}' /etc/init.d/mysqld sed -ri "/^datadir=/c datadir=$datadir" /etc/init.d/mysqld fi chmod +x /etc/init.d/mysqld #启动mysql并设置开机自启 service mysqld start sleep 6 chkconfig --add mysqld ln -s ${mysql_install_dir}/bin/mysql /usr/bin password=$(grep 'password' /tmp/passwd |awk '{print $NF}') mysql -uroot -p"$password" --connect-expired-password -e "set password = password('$passwd');" echo "mysql安装成功,数据库的密码是: $passwd" fi done } #函数(多实例) function multi(){ init init2 port=3306 #配置配置文件/etc/my.cnf cat > /etc/my.cnf <<EOF [mysqld_multi] mysqld = ${mysql_install_dir}/bin/mysqld_safe mysqladmin = ${mysql_install_dir}/bin/mysqladmin EOF #创建各实例数据存放的目录并初始化各实例 for i in $(seq $count);do mkdir -p ${datadir}/$port chown -R mysql.mysql ${datadir} content=$(ls -l ${datadir}/$port | grep -v total | wc -l) if [ $content -eq 0 ];then ${mysql_install_dir}/bin/mysqld --initialize --user=mysql --datadir=${datadir}/$port &> /tmp/passwd #取出临时数据库密码 password=$(grep 'password' /tmp/passwd |awk '{print $NF}') else let port++ continue fi #配置配置文件/etc/my.cnf cat >> /etc/my.cnf << EOF [mysqld$port] datadir = ${datadir}/$port port = $port socket = /tmp/mysql{$port}.sock pid-file = ${datadir}/${port}/mysql_${port}.pid log-error=/var/log/${port}.log EOF #启动各实例并修改数据库密码 ln -s ${mysql_install_dir}/bin/my_print_defaults /usr/bin/ ${mysql_install_dir}/bin/mysqld_multi start ${port} sleep 6 ${mysql_install_dir}/bin/mysql -uroot -p"$password" -h127.0.0.1 -P${port} --connect-expired-password -e "set password = password('$passwd');" let port++ done echo "mysql安装成功,数据库的密码是: $passwd" } read -p "请输入要创建的实例个数: " count read -p "请输入安装目录,(默认路径:/usr/local/mysql):" mysql_install_dir read -p "请输入数据存放目录(默认路径: /opt/xbz): " datadir read -p "请输入要为数据库设置的密码(默认密码123456): " passwd #判断安装目录合法性 echo $mysql_install_dir | grep -E '^/[a-z][a-z]*(/[a-z][a-z]*)*$' &> /dev/null if [ $? -eq 0 ];then if [ ! -d $mysql_install_dir ];then mkdir -p $mysql_install_dir fi else mysql_install_dir=/usr/local/mysql fi #判断安装目录是否为空 if [ -z $mysql_install_dir ];then mysql_install_dir=/usr/local/mysql fi #判断数据存放目录是否为空 if [ -z $datadir ];then datadir=/opt/xbz fi #判断数据存放目录是否合法 echo $datadir | grep "^/[a-z][a-z]*(/[a-z][a-z]*)*$" &> /dev/null if [ $? -ne 0 ];then datadir=/opt/xbz fi #设置数据库密码格式 if [ -z $passwd ];then passwd=123456 else echo $passwd | grep -E '[a-z]+' | grep -E '[A-Z]+' | grep -E '[0-9]+' | grep -E '_+' &> /dev/null if [ $? -ne 0 ] || [ ${#passwd} -lt 8 ];then passwd=123456 fi fi #创建用户 if [ $count -eq 1 ];then single ss -antl else multi ss -antl fi 测试单实例: [root@localhost mysql]# ./mysql_install.sh 请输入要创建的实例个数: 1 请输入安装目录,(默认路径:/usr/local/mysql): 请输入数据存放目录(默认路径: /opt/xbz): 请输入要为数据库设置的密码(默认密码123456): 解压软件包 Starting MySQL.Logging to '/opt/xbz/localhost.err'. SUCCESS! mysql: [Warning] Using a password on the command line interface can be insecure. mysql安装成功,数据库的密码是: 123456 State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 80 *:3306 *:* LISTEN 0 128 [::]:22 [::]:* [root@localhost mysql]# mysql -uroot -p'123456' mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3 Server version: 5.7.38 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> exit Bye 测试多实例: //删除刚刚的数据 [root@localhost mysql]# pkill mysqld [root@localhost mysql]# rm -rf /usr/local/mysql/ [root@localhost mysql]# rm -rf /opt/xbz/ [root@localhost mysql]# rm -rf /etc/my.cnf [root@localhost mysql]# ./mysql_install.sh 请输入要创建的实例个数: 3 请输入安装目录,(默认路径:/usr/local/mysql): 请输入数据存放目录(默认路径: /opt/xbz): 请输入要为数据库设置的密码(默认密码123456): 用户已存在 解压软件包 .... mysql安装成功,数据库的密码是: 123456 State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 80 *:3306 *:* LISTEN 0 80 *:3307 *:* LISTEN 0 80 *:3308 *:* LISTEN 0 128 [::]:22 [::]:* [root@localhost mysql]# mysql -uroot -p'123456' -h127.0.0.1 -P3306 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3 Server version: 5.7.38 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> exit Bye [root@localhost mysql]# mysql -uroot -p'123456' -h127.0.0.1 -P3307 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3 Server version: 5.7.38 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> exit Bye [root@localhost mysql]# mysql -uroot -p'123456' -h127.0.0.1 -P3308 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3 Server version: 5.7.38 MySQL Community Server (GPL) Copyright (c) 2000, 2022, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> exit Bye