前言:本脚本目前实际上限制比较多,后面会慢慢加强健壮性,目前只能实现指定端口号及目录的端口号安装
标准化
目录:/xxx/mysql+port/{data,logs,tmp}
自动生成root密码并存放/tmp/rootpasswd,实例初始化完成以后请记录root密码后及时删除该文件
参数文件模板根据自己需要再改一改
本脚本只针对MySQL5.7,5.6或者其他版本的同学需要另外再改改
一键安装脚本
#!/bin/bash#Time 2018-05-10#Author xuclPATH=/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbinPREFIX=/usr/localSYSTEM=`uname -a |awk '{print $13}'`USER=mysqlBASEDIR=${PREFIX}/mysqlSHELL=/sbin/nologinread -t 30 -p "请输入安装版本:" VERSIONread -t 30 -p "请输入MySQL端口:" PORTread -t 30 -p "请输入数据最上层目录:" ROOTDIRread -t 30 -p "请输入innodb_buffer_pool_size:" POOLSIZEDATADIR=${ROOTDIR}/mysql${PORT}#echo ${DATADIR}function Confirm(){cat <<_ACEOFVersion: ${VERSION}Prefix: ${PREFIX}User: ${USER}Datadir: ${DATADIR}_ACEOF}function IsAlready(){if [ -d "/usr/local/mysql" ];thenecho "已安装"exit 2fi}function Avrg(){ARGS=`getopt -o yv:f:u:d: --long version:,prefix:,user:,datadir: -n 'mysql_install' -- "$@"`if [ ! $? -eq 0 ];thenecho "参数错误"exit 2fieval set -- "${ARGS}"while truedocase "$1" in-v|--version)VERSION=$2shift 2;;-f|--prefix)PREFIX=$2shift 2;;-u|--user)USER=$2shift 2;;-d|--datadir)DATADIR=$2shift 2;;-y)YESFLAG="1"shift;;--)shiftbreak;;*)echo "参数错误"exit 2;;esacdone}IsAlreadyAvrg $@FILENAME=mysql-${VERSION}-linux-glibc2.12-${SYSTEM}#解压MySQL文件function Unzipfile(){echo "正在解压文件"tar -xvzf ${FILENAME}.tar.gz -C ${PREFIX} &>/dev/nullmv ${PREFIX}/${FILENAME}/ ${BASEDIR}}#创建用户function Adduser(){if [ `cat /etc/passwd |grep mysql|wc -l` == "0" ];thengroupadd ${USER}useradd -s ${SHELL} -g ${USER} ${USER}fi}#创建目录function CreateDir(){mkdir -p ${DATADIR}/dataif [ $? -eq 0 ];thenecho "data 目录创建成功"elseecho "data 目录创建失败"exit 2fimkdir -p ${DATADIR}/logsif [ $? -eq 0 ];thenecho "logs 目录创建成功"elseecho "logs 目录创建失败"exit 2fimkdir -p ${DATADIR}/tmpif [ $? -eq 0 ];thenecho "tmp 目录创建成功"elseecho "tmp 目录创建失败"exit 2fi}#生成my.cnffunction genemycnf(){SERVERID=$RANDOMsed -i "s/POOLSIZE/${POOLSIZE}/g" my.cnfsed -i "s/PORT/${PORT}/g" my.cnfsed -i "s/SERVERID/${SERVERID}/g" my.cnfcp -r my.cnf ${DATADIR}echo "配置文件已生成"}#文件夹授权function grantpri(){chown -R ${USER}:${USER} ${BASEDIR}chown -R ${USER}:${USER} ${DATADIR}echo "授权成功"}#初始化MySQLfunction MySQLinit(){echo "数据库初始化中..."${BASEDIR}/bin/mysqld --defaults-file=${DATADIR}/my.cnf --user=mysql --initialize &>/dev/nullif [ $? -eq 0 ]; thenecho "初始化成功"elseecho "初始化失败"fitempass=`cat ${DATADIR}/data/error.log | grep password | awk '{print $11}'`passwd=`tr -cd '[:alnum:]' < /dev/urandom | fold -w16 | head -n1`echo ${passwd}>/tmp/rootpasswdsql="alter user user() identified by '${passwd}'"if [ ! -e "/tmp/mysql${PORT}" ]; thenprintf "正在启动MySQL......\n"${BASEDIR}/bin/mysqld --defaults-file=${DATADIR}/my.cnf --user=mysql &sleep 5elseprintf "MySQL已启动" && exit 1fi#更改密码/usr/local/mysql/bin/mysql -uroot -p"${tempass}" -S /tmp/mysql${PORT}.sock -e "${sql};flush privileges;" --connect-expired-password}UnzipfileAdduserCreateDirgenemycnfgrantpriMySQLinit
配置文件模板
#my.cnf[client]port = PORTsocket = /tmp/mysqlPORT.sock[mysql]prompt="\\u@\\h [\\d]>"#pager="less -i -n -S"#tee=/opt/mysql/query.logno-auto-rehash[mysqld]#miscuser = mysqlbasedir = /usr/local/mysqldatadir = /storage/mysqlPORT/dataport = PORTsocket = /tmp/mysqlPORT.sockevent_scheduler = 0tmpdir = /storage/mysqlPORT/tmp#timeoutinteractive_timeout = 300wait_timeout = 300#character setcharacter-set-server = utf8open_files_limit = 65535max_connections = 1000max_connect_errors = 100000lower_case_table_names =1#file#@secure-file-priv=/tmp#symi replication#rpl_semi_sync_master_enabled=1#rpl_semi_sync_master_timeout=1000#rpl_semi_sync_slave_enabled=1#logslog-output=fileslow_query_log = 1slow_query_log_file = slow.loglog-error = error.loglog_warnings = 2pid-file = mysql.pidlong_query_time = 1#log-slow-admin-statements = 1#log-queries-not-using-indexes = 1log-slow-slave-statements = 1#binlog#binlog_format = STATEMENTbinlog_format = rowserver-id = SERVERIDlog-bin = /storage/mysqlPORT/logs/mysql-binmax_binlog_size = 256Msync_binlog = 0expire_logs_days = 10#procedurelog_bin_trust_function_creators=1#filesecure_file_priv="/tmp"#gtid-mode = onenforce-gtid-consistency=1#relay logskip_slave_start = 1max_relay_log_size = 128Mrelay_log_purge = 1relay_log_recovery = 1relay-log=relay-binrelay-log-index=relay-bin.indexlog_slave_updates#slave-skip-errors=1032,1053,1062#skip-grant-tables#buffers & cachetable_open_cache = 2048table_definition_cache = 2048table_open_cache = 2048max_heap_table_size = 96Msort_buffer_size = 128Kjoin_buffer_size = 128Kthread_cache_size = 200query_cache_size = 0query_cache_type = 0query_cache_limit = 256Kquery_cache_min_res_unit = 512thread_stack = 192Ktmp_table_size = 96Mkey_buffer_size = 8Mread_buffer_size = 2Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 32M#myisammyisam_sort_buffer_size = 128Mmyisam_max_sort_file_size = 10Gmyisam_repair_threads = 1#innodbinnodb_buffer_pool_size = POOLSIZEinnodb_buffer_pool_instances = 1innodb_data_file_path = ibdata1:128M:autoextendinnodb_flush_log_at_trx_commit = 1innodb_log_buffer_size = 8Minnodb_log_file_size = 100Minnodb_log_files_in_group = 3innodb_max_dirty_pages_pct = 50innodb_file_per_table = 1innodb_rollback_on_timeoutinnodb_io_capacity = 2000transaction_isolation = READ-COMMITTEDinnodb_flush_method = O_DIRECT
文件准备
以下是我安装的全部准备,总共是三个文件,一个是二进制包,一个是配置文件模板,一个是安装启动脚本
[root@localhost3 mysql57]# ll总用量 626112-rw-r--r-- 1 root root 2506 5月 10 15:10 my.cnf-rw-r--r-- 1 root root 641127384 1月 15 03:57 mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz-rwxr-xr-x 1 root root 3304 5月 10 16:47 mysqlinstall.sh
安装过程
[root@localhost3 mysql57]# sh mysqlinstall.sh请输入安装版本:5.7.20请输入MySQL端口:3309请输入数据最上层目录:/storage请输入innodb_buffer_pool_size:128M正在解压文件data 目录创建成功logs 目录创建成功tmp 目录创建成功配置文件已生成授权成功数据库初始化中...初始化成功正在启动MySQL......
安装过程也比较简单,按提示输入即可,安装完成以后,用/tmp/rootpasswd记录的密码登录即可
