自动安装MySQL脚本

在Linux 上安装MySQL单实例SHELL脚本

在CentOS 6.5环境测试通过

#!/bin/bash

user=mysql
group=mysql
port=3306
basedir=/usr/local/mysql
datadir=/data/mysql/mysql_${port}/data
sourcefile=$1
mysqlprofile=/etc/my.cnf
logfile=/tmp/mysqlinstall.log
nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
retval=0

Usage(){
  nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
  echo -e "\e[0;36m${nowtime}[INFO]:Usage: `basename $0` MySQL_Source_File\e[m"
}

if [ $# != 1 ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:INPUT ARGUMENTS ERROR!\e[m"
   Usage
   exit 1
fi

[ ! -d $basedir  ]&& mkdir -p $basedir
[ ! -d $datadir  ]&& mkdir -p $datadir

content=`ls $basedir`
if [ "x$content" != "x" ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:‘$basedir‘ IS NOT NULL.\e[m"
   exit 1
fi

content1=`ls $datadir`
if [ "x$content1" != "x" ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:‘$datadir‘ IS NOT NULL.\e[m"
   exit 1
fi

check_port=`netstat -na |grep ":${port}" |awk ‘{print $4}‘ |grep ":${port}"`
if [ "x$check_port" != "x" ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:‘$port‘ PORT ALREADY USED!\e[m"
   exit 1
fi

if [ ! -f $sourcefile ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:‘$sourcefile‘ IS NOT EXISTS.\e[m"
   Usage
   exit 1
else
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[INFO]:Extract MySQL Install File.\e[m"
   tar xzf $sourcefile --strip-components 1 -C $basedir
   retval=$?
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   [ $retval -eq 0 ] && echo -e "\e[0;36m${nowtime}[INFO]:Extract MySQL Install File Complete.\e[m"
fi

if [ $retval -ne 0  ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:Extract File ERROR,Please Check Your Package.\e[m"   
   echo 1
fi

#create group if not exists  
egrep "^$group" /etc/group >& /dev/null  
if [ $? -ne 0 ]  
then  
    groupadd $group  
    nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
    echo -e "\e[0;36m${nowtime}[INFO]:Add Group...\e[m"
fi  
  
#create user if not exists  
egrep "^$user" /etc/passwd >& /dev/null  
if [ $? -ne 0 ]  
then  
    useradd -g $group $user
    nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`  
    echo -e "\e[0;36m${nowtime}[INFO]:Add User...\e[m"
fi

#Create my.cnf
datapath=${datadir%/*}
[ ! -d "${datapath}/tmp"  ] && mkdir -p ${datapath}/tmp
[ ! -d "${datapath}/logs"  ] && mkdir -p ${datapath}/logs

if [ ! -f $mysqlprofile ];then
nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
echo -e "\e[0;36m${nowtime}[INFO]:Starting Create my.cnf.\e[m"
cat > $mysqlprofile <<EOF
[client]
port            = 3306
socket          = /tmp/mysql.sock

# The MySQL server
[mysqld]
# Basic
port            = $port
user            = $user
basedir         = $basedir
datadir         = $datadir
tmpdir          = $datapath/tmp
socket          = /tmp/mysql.sock

log-bin     = $datapath/logs/mysql-bin
log-error   = $datapath/logs/error.log
slow-query-log-file = $datapath/logs/slow.log
skip-external-locking
skip-name-resolve
log-slave-updates

server-id =2163306
explicit_defaults_for_timestamp = 1
character-set-server = utf8
slow-query-log
binlog_format = mixed
max_binlog_size = 128M
binlog_cache_size = 1M
expire-logs-days = 5
back_log = 500
long_query_time=1
max_connections=1100
max_user_connections=1000
max_connect_errors=1000

wait_timeout=100
interactive_timeout=100

connect_timeout = 20
slave-net-timeout=30

max-relay-log-size = 256M
relay-log = relay-bin
transaction_isolation = READ-COMMITTED

performance_schema=0
#myisam_recover
key_buffer_size = 64M
max_allowed_packet = 16M
#table_cache = 3096
table_open_cache = 6144
table_definition_cache = 4096

sort_buffer_size = 128K
read_buffer_size = 1M
read_rnd_buffer_size = 1M
join_buffer_size = 128K

myisam_sort_buffer_size = 32M
tmp_table_size = 32M
max_heap_table_size = 64M
query_cache_type=0
query_cache_size = 0
bulk_insert_buffer_size = 32M

thread_cache_size = 64
#thread_concurrency = 32
thread_stack = 192K
skip-slave-start

# InnoDB
innodb_data_home_dir = $datadir
innodb_log_group_home_dir = $datapath/logs
innodb_data_file_path = ibdata1:1G:autoextend

innodb_buffer_pool_size = 500M
#48G
#innodb_buffer_pool_size = 33G

innodb_buffer_pool_instances    = 8
#innodb_additional_mem_pool_size = 16M
innodb_log_file_size = 1024M
innodb_log_buffer_size = 16M
innodb_log_files_in_group = 3
innodb_flush_log_at_trx_commit = 0
innodb_lock_wait_timeout = 10
innodb_sync_spin_loops = 40
innodb_max_dirty_pages_pct = 90
innodb_support_xa = 0
innodb_thread_concurrency = 0
innodb_thread_sleep_delay = 500
innodb_file_io_threads    = 4
innodb_concurrency_tickets = 1000
log_bin_trust_function_creators = 1
innodb_flush_method = O_DIRECT
innodb_file_per_table
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_io_capacity = 2000
innodb_file_format = Barracuda
innodb_purge_threads=1
innodb_purge_batch_size = 32
innodb_old_blocks_pct=75
innodb_change_buffering=all
innodb_stats_on_metadata=OFF

[mysqldump]
quick
max_allowed_packet = 128M
#myisam_max_sort_file_size = 10G

[mysql]
no-auto-rehash
max_allowed_packet = 128M
prompt = ‘(product)\[email protected]\h [\d]> ‘
default_character_set = utf8
EOF
retval=$?
fi
nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
[ $retval -eq 0 ] && echo -e "\e[0;36m${nowtime}[INFO]:Create my.cnf SUCESS.\e[m"

#Initializing datadir
if [ -d $datapath  ];then
   chown -R mysql:mysql ${datapath%/*}
   cd $basedir
   chown -R mysql:mysql *
   ./scripts/mysql_install_db --user=$user --datadir=$datadir >  $logfile 2>&1
   retval=$?
fi

if [ $retval -ne 0  ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:MySQL Initializing FAIL!\e[m"
   exit 1
fi
#Add env variables
grep "$basedir/bin" /etc/profile > /dev/null 2>&1
if [ $? -ne 0 ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo  "export PATH=\$PATH:$basedir/bin">>/etc/profile
   source /etc/profile
fi
#start mysql
if [ ! -f "/etc/init.d/mysqld" ];then
    cp $basedir/support-files/mysql.server /etc/init.d/mysqld
    /etc/init.d/mysqld start >/dev/null 2>&1
    retval=$?
fi

if [ $retval -eq 0 ];then
   $basedir/bin/mysqladmin -u root password ‘123456‘ 2> $logfile
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[INFO]:Starting MySQL.. SUCCESS!\e[m"
   retval=0
else
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:Starting MySQL.. FAIL!\e[m"
   exit 1
fi

#setting account security
if [ $retval -eq 0 ];then
mysql -uroot -p123456 2>/dev/null <<EOF
GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION;
delete from mysql.user where password = ‘‘;
FLUSH PRIVILEGES;
EOF
retval=$?
fi
nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
[ $retval -eq 0 ] && echo -e "\e[0;36m${nowtime}[INFO]:MySQL INITIAL PASSWORD SUCCESS!\e[m"

if [ $retval -eq 0 ];then
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[INFO]:MySQL INITIAL PASSWORD: 123456 \e[m"
   echo -e "\e[0;36m${nowtime}[INFO]:MySQL Basedir: $basedir \e[m"
   echo -e "\e[0;36m${nowtime}[INFO]:MySQL Datadir: $datadir \e[m"
   echo -e "\e[0;36m${nowtime}[INFO]:MySQL Install Complete. \e[m"
else
   nowtime=`date ‘+%Y-%m-%d %H:%M:%S‘`
   echo -e "\e[0;36m${nowtime}[ERROR]:Change MySQL Password FAIL!\e[m"
fi

测试结果:

在MySQL配置文件参数部分还可以优化。

时间: 2024-10-10 04:07:28

自动安装MySQL脚本的相关文章

.net安装包自动安装Mysql数据库

原文:.net安装包自动安装Mysql数据库 在制作.Net安装包的时候,如果项目有用到数据库,怎么能够把数据库打包安装呢?网上已经有很多自动安装Sql Server数据库的例子,但是自动安装mysql的例子似乎不多.本文就介绍一下如何在.Net安装包中自动安装Mysql数据库. 最终我们要实现的效果是,部署.Net桌面应用程序时,能够一键自动安装应用程序以及附带的MySql数据库,并初始化数据库. 实现步骤如下: 1.准备一个干净的MySql安装包 mysql本身是开源的,安装完mysql数据

Rehat一键安装mysql脚本和备份数据库脚本

Rehat一键安装mysql脚本 ##说明:适用,Rehat 5 6 7 1.运行状态,运行成功输出mysql临时密码 2.代码如下 #!/bin/bash #获取系统信息 sudo cat /etc/issue>myfile aa=sudo grep '5.' myfile bb=sudo grep '6.' myfile cc=sudo grep '7.' myfile echo $aa echo "It is a test" > myfile #获取系统信息 sudo

实用脚本----Linux下Jdk和Tomcat自动安装shell脚本总结

系统环境为:ubuntu 14.04 一.JDK 自动安装脚本 jdk自动安装bash shell脚本,截止今天(2014/10/15)亲测可用: sudo su #切换到root权限 mkdir /usr/local/java cd /usr/local/java #download jdk 1.7.67 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-co

yum自动安装mysql

1.安装客户端和服务器端查看CentOS自带mysql: yum list installed | grep mysql卸载CentOS系统自带mysql数据库? yum -y remove mysql-libs.x86_64安装mysql客户端和服务器: yum -y install mysql-server mysql mysql-devel当结果显示为"Complete!"即安装完毕.查看刚安装mysql数据库版本信息. rpm -qi mysql-server信息如下: Nam

Linux通用KVM自动安装Shell脚本(兼容所有Linux发行版/CentOS/Ubuntu)

官网: https://github.com/retspen/webvirtmgr/wiki/Setup-Host-Server 安装: wget -O - https://retspen.github.io/libvirt-bootstrap.sh | sudo sh 脚本: vim libvirt-bootstrap.sh chmod 777 libvirt-bootstrap.sh #!/bin/sh - #=========================================

自动安装zabbix_agent脚本 -- python2

#!/usr/bin/env python # -*- coding: utf-8 -*- import os ZABBIX_SERVER_IP='10.171.100.28' is_running = os.popen("ps -ef | grep zabbix_agentd | grep -v grep | wc -l") is_installed = os.popen("find /usr/local -name 'zabbix_*' | wc -l") if

我写的一键安装MySQL脚本——暴力版

[[email protected] songlisha]# cat install_mysql.sh  #!/bin/bash mysql_src=/songlisha/home/admin/mysql_data install_scr=/songlisha/usr/local rm -rf $install_scr/mysql rm -rf $mysql_src rm -rf /etc/my.cnf groupadd mysql useradd -g mysql mysql mkdir -p

pgsql自动安装shell脚本整理

前面不断在vm虚拟机上测试pgsql,发觉安装还是有些麻烦的. 所以就收集了一些 1,http://www.davidghedini.com/pg/entry/postgresql_9_5_script_for https://github.com/DavidGhedini/postgresql-9.5-script-centos-7x64 https://github.com/intoGres/postgresql-9.5-script-centos-6x64 2,https://github

快速安装MySQL脚本

#!/bin/bash # auto install mysql INSTALL_BASE="/usr/local" MYSQL_BASE="/usr/local/mysql" MYSQL_DATA="/data/mysql/3306" MY_CNF="/data/mysql/3306/my.cnf" USER="mysql" #MYSQL_DIR="mysql-5.7.19-linux-glib