- #!/bin/bash
- PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
- export PATH
- clear;
- SysName=""
- SysBit=""
- CpuNum=""
- RamTotal=""
- RamSwap=""
- FileMax=""
- MysqlVersion="Percona-Server-5.6.15-rel63.0"
- MysqlLine="http://www.percona.com/downloads/Percona-Server-5.6/LATEST/source"
- MysqlPath="/usr/local/mysql"
- MysqlDataPath="$MysqlPath/data"
- MysqlLogPath="/var/log/mysql"
- MysqlConfigPath="$MysqlPath/conf"
- MysqlPass="test123"
- SYSTEM_CHECK(){
- [[ $(id -u) != '0' ]] && echo '[Error] Please use root to install PUPPET.' && exit;
- egrep -i "centos" /etc/issue && SysName='centos';
- egrep -i "ubuntu" /etc/issue && SysName='ubuntu';
- [[ "$SysName" == '' ]] && echo '[Error] Your system is not supported this script' && exit;
- SysBit='32' && [ `getconf WORD_BIT` == '32' ] && [ `getconf LONG_BIT` == '64' ] && SysBit='64';
- CpuNum=`cat /proc/cpuinfo |grep 'processor'|wc -l`;
- RamTotal=`free -m | grep 'Mem' | awk '{print $2}'`;
- RamSwap=`free -m | grep 'Swap' | awk '{print $2}'`;
- FileMax=`cat /proc/sys/fs/file-max`
- }
- INSTALL_BASE_PACKAGES()
- {
- SYSTEM_CHECK
- if [ "$SysName" == 'centos' ]; then
- echo '[yum-fastestmirror Installing] ************************************************** >>';
- yum -y install yum-fastestmirror;
- cp /etc/yum.conf /etc/yum.conf.lnmp
- sed -i 's:exclude=.*:exclude=:g' /etc/yum.conf
- for packages in gcc gcc-c++ openssl-devel ncurses-devel wget crontabs iptables bison cmake automake make readline-devel logrotate openssl; do
- echo "[${packages} Installing] ************************************************** >>";
- yum -y install $packages;
- done;
- mv -f /etc/yum.conf.lnmp /etc/yum.conf;
- else
- apt-get remove -y mysql-client mysql-server mysql-common;
- apt-get update;
- for packages in gcc g++ cmake make ntp logrotate cron bison libncurses5-dev libncurses5 libssl-dev openssl curl openssl; do
- echo "[${packages} Installing] ************************************************** >>";
- apt-get install -y $packages --force-yes;apt-get -fy install;apt-get -y autoremove;
- done;
- fi;
- }
- INSTALL_MYSQL(){
- INSTALL_BASE_PACKAGES
- cd /tmp/
- echo "[${MysqlVersion} Installing] ************************************************** >>";
- [ ! -f ${MysqlVersion}.tar.gz ] && wget -c ${MysqlLine}/${MysqlVersion}.tar.gz
- tar -zxf /tmp/$MysqlVersion.tar.gz;
- cd /tmp/$MysqlVersion;
- groupadd mysql;
- useradd -s /sbin/nologin -g mysql mysql;
- cmake -DCMAKE_INSTALL_PREFIX=$MysqlPath -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=complex -DWITH_READLINE=ON -DENABLED_LOCAL_INFILE=ON -DWITH_INNODB_MEMCACHED=ON -DWITH_UNIT_TESTS=OFF;
- make -j $Cpunum;
- make install;
- for path in $MysqlLogPath $MysqlPath $MysqlConfigPath/conf.d $MysqlDataPath;do
- [ ! -d $path ] && mkdir -p $path
- chmod 740 $path;
- chown -R mysql:mysql $path;
- done
- # EOF **********************************
- cat > $MysqlConfigPath/my.cnf<<EOF;
- [mysqld]
- user = mysql
- server-id = 1
- pid-file = /var/run/mysqld.pid
- socket = /var/run/mysqld.sock
- port = 3306
- basedir = $MysqlPath
- datadir = $MysqlDataPath
- bind-address = 0.0.0.0
- skip-name-resolve
- skip-external-locking
- thread_concurrency = `expr $CpuNum \\* 2`
- max_connections = `expr $FileMax \\* $CpuNum \\* 2 / $RamTotal`
- max_connect_errors = 30
- table_open_cache = `expr $RamTotal + $RamSwap`
- max_allowed_packet = `expr $RamTotal \\* 2 / 1000`M
- binlog_cache_size = 4M
- max_heap_table_size = `expr $RamTotal / 100`M
- sort_buffer_size = `expr $RamTotal \\* 2 / 1000`M
- join_buffer_size = `expr $RamTotal \\* 2 / 1000`M
- query_cache_size = `expr $RamTotal / 100`M
- thread_cache_size = 30
- thread_concurrency = `expr $CpuNum \\* 4`
- connect_timeout = 1200
- wait_timeout = 1200
- general_log = 1
- general_log_file = $MysqlLogPath/mysql.log
- log_error = $MysqlLogPath/mysql-err.log
- slow_query_log = 1
- slow_query_log_file = $MysqlLogPath/mysql-slow.log
- long_query_time = 3
- log_bin = $MysqlLogPath/mysql-bin
- log_bin_index = $MysqlLogPath/mysql-bin.index
- expire_logs_days = 7
- max_binlog_size = `expr $(df -m $MysqlLogPath |awk 'NR==2{printf "%s\\n",$4}') / 10000`M
- default_storage_engine = InnoDB
- innodb_buffer_pool_size = `expr $RamTotal / 100`M
- innodb_log_buffer_size = 8M
- innodb_file_per_table = 1
- innodb_open_files = `expr $FileMax \\* $CpuNum / $RamTotal`
- innodb_io_capacity = `expr $FileMax \\* $CpuNum / $RamTotal`
- innodb_flush_method = O_DIRECT
- !includedir $$MysqlConfigPath/conf.d
- [mysqld_safe]
- open_files_limit = `expr $FileMax / $CpuNum / 100`
- [isamchk]
- key_buffer = 16M
- [mysqldump]
- quick
- quote-names
- max_allowed_packet = 16M
- EOF
- # **************************************
- $MysqlPath/scripts/mysql_install_db --user=mysql --defaults-file=$MysqlConfigPath/my.cnf --basedir=$MysqlPath --datadir=$MysqlDataPath;
- # EOF **********************************
- cat > /etc/ld.so.conf.d/mysql.conf<<EOF
- /usr/local/mysql/lib/mysql
- /usr/local/lib
- EOF
- # **************************************
- ldconfig;
- if [ "$SysBit" == '64' ] ; then
- ln -s $MysqlPath/lib/mysql /usr/lib64/mysql;
- else
- ln -s $MysqlPath/lib/mysql /usr/lib/mysql;
- fi;
- cp $MysqlPath/support-files/mysql.server /etc/init.d/mysqld;
- chmod 775 /etc/init.d/mysqld;
- /etc/init.d/mysqld start;
- ln -s $MysqlPath/bin/mysql /usr/bin/mysql;
- ln -s $MysqlPath/bin/mysqladmin /usr/bin/mysqladmin;
- $MysqlPath/bin/mysqladmin password $MysqlPass;
- rm -rf $MysqlDataPath/test;
- # EOF **********************************
- mysql -hlocalhost -uroot -p$MysqlPass <<EOF
- USE mysql;
- DELETE FROM user WHERE user='';
- UPDATE user set password=password('$MysqlPass') WHERE user='root';
- DELETE FROM user WHERE not (user='root');
- DROP USER ''@'%';
- FLUSH PRIVILEGES;
- EOF
- # **************************************
- echo "[OK] ${MysqlVersion} install completed.";
- }
- INSTALL_MYSQL
- #该片段来自于http://www.codesnippet.cn/detail/280220148843.html
来源: http://www.codesnippet.cn/detail/280220148843.html