一键搭建mysql集群系列一

一键自动安装mysql 5.7

shell脚本自动化安装二进制mysql-5.7

本节主要用到四个shell脚本 和 一台资料存储机器(IP:192.168.42.26)

  1. install_mysql.sh 自动化安装mysql脚本
  2. ntpdate.sh 时间同步脚本
  3. system_init.sh 系统初始化脚本
  4. yum.sh yum源配置脚本

执行步骤:

1.创建目录和下载脚本

mkdir -p /server/script
cd /server/script
wget -c http://192.168.42.26/script/yum.sh
wget -c http://192.168.42.26/script/install_mysql.sh
wget -c http://192.168.42.26/script/ntpdate.sh
wget -c http://192.168.42.26/script/create_bash.sh
wget -c http://192.168.42.26/script/system_init.sh
wget -c http://192.168.42.26/script/change_ip.sh
wget -c http://192.168.42.26/script/change_hostname.sh

2.执行初始化脚本

bash system_init.sh

3.执行自动安装mysql脚本

bash install_mysql.sh

4.输入mysql命令就能进入mysql操作

注:最好使用干净的系统,避免没必要的错误(如果没有msyql环境变量,需在当前shell执行source /etc/profile.d/mysql.sh 或者 退出当前shell,重新登录)

主要脚本:

ntpdate.sh

#!/bin/bash
if ! `rpm -q ntp &>/dev/null` ; then  
 yum install ntp -y
fi
/usr/sbin/ntpdate 172.16.0.1 && /usr/sbin/hwclock -w

yum.sh

#!/bin/bash

# Filename:    yum.sh
# Revision:    1.1
# Date:        2017/05/03
# Author:      Srayban
# Email:       626612631@qq.com
# Website:     no
# Description: 自动生成yum源

. /etc/init.d/functions
YUMPATH="/etc/yum.repos.d"
DIRNAME="back"
REPONAME="CentOS-Base.repo"
EPELNAME="epel.repo"
YUMDOWN="http://192.168.42.26/install_package/down/"
function error(){
  if [ $1 -ne 0 ];then
     echo $2
     exit 4
  fi 

}

if [ ! -d ${YUMPATH}/${DIRNAME} ];then
   mkdir -p ${YUMPATH}/${DIRNAME} &> /dev/null
   error $? "${YUMPATH}/${DIRNAME} is failed"
fi

/usr/bin/rm -f ${YUMPATH}/$REPONAME &> /dev/null
/usr/bin/rm -f ${YUMPATH}/$EPELNAME &>/dev/null

if [ ! -f ${YUMPATH}/${REPONAME} ];then
     cd ${YUMPATH}
     find ./ -maxdepth 1  -type f | xargs -i  mv {}  back/ &> /dev/null
     error $?  "mv script is failed."
     wget -c ${YUMDOWN}/${REPONAME} &> /dev/null
     wget -c ${YUMDOWN}/${EPELNAME}  &> /dev/null
     if [ $? -eq 0 ];then
         action "${REPONAME} create is success." /bin/true
     else
         action "${REPONAME} create is failed." /bin/false
     fi
else
     echo "${REPONAME}  is exits."
fi

system_init.sh

#!/bin/bash

# Filename:    system_init.sh
# Revision:    1.1
# Date:        2017/05/13
# Author:      Srayban
# Email:       626612631@qq.com
# Website:     no
# Description: 系统初始化

. /etc/init.d/functions
DOWNADD="http://192.168.42.26/script"

#错误显示
function error_show(){
    echo "$1"
    exit 3   
}

#下载脚本功能
if [ "$1" == "wget" ];then
  wget -c $DOWNADD/$2 &> /dev/null
  [ $? -eq 0 ] && echo "$2 download is ok" && echo 0 || error_show "$1 download error."
fi

#关闭防火墙
function close_firewalld(){
    /usr/bin/systemctl stop firewalld.service &> /dev/null
    /usr/bin/systemctl disable firewalld.service &> /dev/null
}
#关闭selinux
function close_selinux(){
    setenforce 0
    sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
}


#内核调优
function sysctl_optimization(){

[ -f /etc/sysctl.conf.bak ] && error_show "sysctl.conf.back is exist."
/usr/bin/cp /etc/sysctl.conf /etc/sysctl.conf.bak
cat>>/etc/sysctl.conf<<EOF
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.core.netdev_max_backlog = 32768
net.core.somaxconn = 32768
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout=1
net.ipv4.tcp_keepalive_time=1200
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.ip_local_port_range = 1024 65535
EOF

/sbin/sysctl -p

}

#初始化方法
function init(){

    [ -f yum.sh ] && /bin/bash yum.sh || error_show "Missing yum.sh file."
    [ -f ntpdate.sh ] && /bin/bash ntpdate.sh || error_show "Missing ntpdate.sh file."
    close_firewalld;
    sysctl_optimization
}

init

unset DOWNADD

install_mysql.sh

#!/bin/bash

# Filename:    install_mysql.sh
# Revision:    1.1
# Date:        2017/05/13
# Author:      Srayban
# Email:       626612631@qq.com
# Website:     no
# Description: 一键安装mysql

. /etc/init.d/functions

APPNAME="mysql"
APPUSER="mysql"
APPPATH="/application"
VERSION="5.7.16"
APPTARNAME="mysql-${VERSION}.tar.gz"
DOWNADDRESS="http://192.168.42.26/install_package/down"

#查看是否安装mariadb 有就卸载
if `rpm -q mariadb &>/dev/null` ; then  
    rpm -e --nodeps  mariadb
fi
#创建mysql用户
if ! `id ${APPUSER} &>/dev/null` ; then
   /usr/sbin/useradd  -s /sbin/nologin -M ${APPUSER}
fi
#创建应用目录
[ ! -d ${APPPATH} ] && mkdir ${APPPATH}

cd ${APPPATH}

#下载mysql二进制安装包
if [ ! -f ${APPPATH}/${APPTARNAME} ] ;then

    wget -c  ${DOWNADDRESS}/${APPTARNAME}

fi

#安装expect
/usr/bin/yum install expect expect-devel -y 

#解压安装
[ -d mysql-${VERSION} ] && rm -rf mysql-${VERSION}

/usr/bin/tar xvf ${APPTARNAME}
/usr/bin/mv mysql-${VERSION}-*  mysql-${VERSION}  

cd ${APPPATH}/mysql-${VERSION}

installfile=/application/mysql.install.txt

./bin/mysqld --user=${APPUSER} --basedir=/application/mysql-${VERSION}/ --datadir=/application/mysql-${VERSION}/data  --initialize &> $installfile

cat $installfile

passwd=`cat ${installfile} | tail -1 | cut -d" " -f11`


/usr/bin/mv -rf /etc/my.cnf /etc/my.cnf.back.old &>/dev/null
cd support-files/
[ -f /etc/my.cnf ] && mv /etc/my.cnf{,.back.$(date +"%Y%d%m%H%M%S")} &> /dev/null 
/usr/bin/cp my-default.cnf /etc/my.cnf
/usr/bin/cp mysql.server  /etc/init.d/mysqld


cd ${APPPATH}/
ln -s mysql-${VERSION}  mysql

#编辑配置文件

cat << EOF >/etc/my.cnf

[client]
port        = 3306
socket      =/var/lib/mysql/mysql.sock
default-character-set=utf8mb4

[mysqld]
port        = 3306
socket      = /var/lib/mysql/mysql.sock
basedir =  /application/mysql
datadir = /application/mysql/data
skip-external-locking
skip_name_resolve=1
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 8
query_cache_size = 8M
tmp_table_size = 16M
performance_schema_max_table_instances = 500

explicit_defaults_for_timestamp = true
#skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id   = 1
expire_logs_days = 10
early-plugin-load = ""

#loose-innodb-trx=0
#loose-innodb-locks=0
#loose-innodb-lock-waits=0
#loose-innodb-cmp=0
#loose-innodb-cmp-per-index=0
#loose-innodb-cmp-per-index-reset=0
#loose-innodb-cmp-reset=0
#loose-innodb-cmpmem=0
#loose-innodb-cmpmem-reset=0
#loose-innodb-buffer-page=0
#loose-innodb-buffer-page-lru=0
#loose-innodb-buffer-pool-stats=0
#loose-innodb-metrics=0
#loose-innodb-ft-default-stopword=0
#loose-innodb-ft-inserted=0
#loose-innodb-ft-deleted=0
#loose-innodb-ft-being-deleted=0
#loose-innodb-ft-config=0
#loose-innodb-ft-index-cache=0
#loose-innodb-ft-index-table=0
#loose-innodb-sys-tables=0
#loose-innodb-sys-tablestats=0
#loose-innodb-sys-indexes=0
#loose-innodb-sys-columns=0
#loose-innodb-sys-fields=0
#loose-innodb-sys-foreign=0
#loose-innodb-sys-foreign-cols=0

default_storage_engine = InnoDB
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci 
innodb_file_per_table = 1
#innodb_data_home_dir = /application/mysql/data
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /application/mysql/data
#innodb_buffer_pool_size = 16M
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 8M
#innodb_flush_log_at_trx_commit = 1
#innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
pid-file=/application/mysql/data/mysqld.pid


EOF

#添加环境变量
echo "export  PATH="'$PATH'":${APPPATH}/mysql/bin" >/etc/profile.d/${APPNAME}.sh
/bin/bash /etc/profile.d/${APPNAME}.sh && . /etc/profile.d/${APPNAME}.sh

service mysqld start

#加入开机自启动
systemctl is-enabled  mysqld


#修改mysql 密码

function change_mysql_passwd(){

       /bin/expect -c "
       set time 30
       spawn /application/mysql/bin/mysqladmin -u root  -p  password \"root\"
       expect {
          \"*yes/no\" { send \"yes\r\"; exp_continue }
          \"*password:\" { send \"$passwd\r\" }
       }  
       interact
       expect eof " >/dev/null 2>&1 ;

      if [ $? -eq 0 ];then
           action "mysql password changes succeeded"   /bin/true
         else
           action "mysql password changes fail"    /bin/false
      fi



}

change_mysql_passwd

cat << EOF >/root/.my.cnf
[client]
default-character-set=utf8mb4
socket =/var/lib/mysql/mysql.sock
user=root
host=localhost
password=root
EOF


#设置权限
cd ${APPPATH}/
chown -R ${APPUSER}:${APPUSER} mysql-${VERSION}

unset passwd
unset installfile
unset APPNAME
unset APPUSER
unset APPPATH
unset VERSION
unset APPTARNAME
unset DOWNADDRESS



action "MySQL Installation successful" /bin/true

原创文章,作者:srayban,如若转载,请注明出处:http://www.178linux.com/75402

(3)
sraybansrayban
上一篇 2017-05-13
下一篇 2017-05-13

相关推荐

  • 马哥教育21期网络班—第12周课程+练习—-LAMP练习中

    为第4题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点; (1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu); (2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com; [ root@centos CA]# …

    Linux干货 2016-09-26
  • Linux终端类型介绍

    相关命令:tty 适合阅读人群:所有   终端机 终端(Computer terminal),是一台电子计算机或者计算机系统,用来让用户输入数据,及显示其计算结果的机器。又名终端机,它与一部独立的电脑不同,其实就是一种输入输出设备,一台电脑多人使用,每增加一个用户只须增加一台显示器和一套键盘鼠标就可以成为一个独立的终端,多用户可同时使用互相独立,跟…

    Linux干货 2016-10-14
  • 小白学习Linux系统一周总结

         告别平凡,安定而又没什么前途的工作,我选择了报了门热门的计算机课程--python运维开发。我不知道为什么一开始就学Linux系统,我早预料到这是一个艰难的开始,还好我不是完全没有基础,以前有学过iOS开发。看到着终端中的“\”表示根目录,我轻微有点亲切感,不像第一次看到终端时的恐惧。我总结这周的学习感受,希…

    Linux干货 2017-09-04
  • 网络组(Network Teaming)

    网络组(Network Teaming) 网络组:是将多个网卡聚合在一起的方法,从而实现容错和提高吞吐量 网络组不同于旧版中bonding技术,提供更好的性能和扩展性 网络组由内核驱动和teamd守护进程实现. 多种方式runner     broadcast     roundrobin     …

    Linux干货 2017-03-26
  • NoSQL之MongoDB

    分布式系统理论 1、 CAP: 分布式系统只能满足其中两个  Consistency :一致性 Availibility:可用性 Partitions Tolerance :分区容错性 C,A : SQL 传统的数据库。 两段机制。 C,P :悲观枷锁机制,分布式加锁机制。加锁机制与SQL不太一样。 这里的C为最终一致性。 放弃C后的特例,既可以保证可用性,…

    2018-01-09
  • ☞rsyslog

    rsyslog 概述 rsyslog支持的facility与priority facility:设施、信道: priority:级别 rsyslog程序 配置文件 配置日志记录级别和路径 配置日志记录在远程rsyslog server rsyslog server端 rsyslog client端 测试远程服务器是否记录日志 rsyslog记录在MySQL中…

    Linux干货 2016-10-16