在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)\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 <<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配置文件参数部分还可以优化。
转载于:https://blog.51cto.com/xumingjiang/1878208