在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 <
[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)\u@\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 <
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配置文件参数部分还可以优化。