mysql二进制安装脚本部署

  • mysql二进制安装脚本部署已关闭评论
  • 110 次浏览
  • 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