#!/bin/bash
##############################################################
######自动安装数据库脚本ro###############
######数据库目录/usr/local/mysql############
######数据目录/data/mysql############
######慢日志目录/data/slowlog############
######使用方法./mysql5740_install.sh 密码 端口号
##############################################################
mysqlrootpwd=$1
mysqlport=$2
# Check if user is root
if [ "$(id -u)" != "0" ]; then
echo "Error: You must be root to run this script, please use root to install"
exit 1
fi
clear
echo "========================================================================="
echo "A tool to auto-compile & install MySQL 5.7.40 on Redhat/CentOS Linux "
echo "========================================================================="
cur_dir=$(pwd)
echo "==========================="
if [ "$mysqlrootpwd" = "" ]; then
mysqlrootpwd="MANAGER"
fi
echo "==========================="
echo "MySQL root password:$mysqlrootpwd"
echo "==========================="
get_char()
{
SAVEDSTTY=$(stty -g)
stty -echo
stty cbreak
#dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty "$SAVEDSTTY"
}
echo ""
echo "Press any key to start...or Press Ctrl+c to cancel"
char=$(get_char)
# Initialize the installation related content.
function InitInstall()
{
cat /etc/issue
uname -a
MemTotal=$(free -m | grep Mem | awk '{print $2}')
echo -e "\n Memory is: ${MemTotal} MB "
#Set timezone
#rm -rf /etc/localtime
ln -sfn /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#Delete Old mariadb program
MARIA=$(rpm -qa|grep mariadb)
yum remove "$MARIA" -y
MySQL=$(rpm -qa|grep mysql)
yum remove "$MySQL" -y
#Disable SeLinux
if [ -s /etc/selinux/config ]; then
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
fi
setenforce 0
}
#Installation of depend on and optimization options.
function InstallDependsAndOpt()
{
cd "$cur_dir" || exit
cat >>/etc/security/limits.conf<<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
EOF
echo "fs.file-max=65535" >> /etc/sysctl.conf
}
#Install MySQL
function InstallMySQL57()
{
echo "============================Install MySQL 5.7.40=================================="
cd "$cur_dir" || exit
#Backup old my.cnf
#rm -f /etc/my.cnf
if [ -s /etc/my.cnf ]; then
mv /etc/my.cnf /etc/my.cnf."$(date +%Y%m%d%H%M%S)".bak
fi
echo "============================MySQL 5.7.40 installing…………========================="
#mysql directory configuration
cd /usr/local/src || exit
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz
tar xvf ./mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz
rm -rf ./mysql-5.7.40-linux-glibc2.12-x86_64.tar.gz
mv ./mysql-5.7.40-linux-glibc2.12-x86_64 /usr/local/mysql
groupadd mysql -g 512
useradd -u 512 -g mysql -s /sbin/nologin -d /home/mysql mysql
mkdir -p /data/mysql
mkdir -p /data/slowlog
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /data/slowlog
#edit /etc/my.cnf
#SERVERID=$(ifconfig "$SVRIF_ETH" | grep "inet " | awk '{ print $2}'| awk -F. '{ print $3$4}')
cat >>/etc/my.cnf<<EOF
[client]
port=$mysqlport
socket=/tmp/mysql.sock
default-character-set=utf8
[mysql]
no-auto-rehash
default-character-set=utf8
[mysqld]
port=$mysqlport
character-set-server=utf8
socket=/tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/data/mysql
explicit_defaults_for_timestamp=true
lower_case_table_names=1
back_log=103
max_connections=3000
max_connect_errors=100000
table_open_cache=512
external-locking=FALSE
max_allowed_packet=32M
sort_buffer_size=2M
join_buffer_size=2M
thread_cache_size=51
query_cache_size=128M #查询缓存1024的倍数
#query_cache_limit=4M
transaction_isolation=REPEATABLE-READ
tmp_table_size=96M
#omc info
event_scheduler=ON
group_concat_max_len = 530000 #group_concat最大长度
max_heap_table_size=1024M #内存表最大容量字节
federated #支持federated存储引擎
query_cache_type = 0 #是否使用查询缓存
skip-name-resolve
bulk_insert_buffer_size=100M #插入数据缓存
secure_file_priv=""
###***slowqueryparameters
long_query_time=1
slow_query_log = 1
slow_query_log_file=/data/slowlog/slow.log
###***binlogparameters
#log-bin=mysql-bin
binlog_cache_size=4M
max_binlog_cache_size=4096M
max_binlog_size=1024M
binlog_format=MIXED
expire_logs_days=7
###***relay-logparameters
#relay-log=/data/3307/relay-bin
#relay-log-info-file=/data/3307/relay-log.info
#master-info-repository=table
#relay-log-info-repository=table
#relay-log-recovery=1
#***MyISAMparameters
key_buffer_size=16M
read_buffer_size=1M
read_rnd_buffer_size=16M
###***master-slavereplicationparameters
#server-id=
#slave-skip-errors=all
#***Innodbstorageengineparameters
innodb_buffer_pool_size=512M
innodb_data_file_path=ibdata1:10M:autoextend
#innodb_file_io_threads=8
innodb_thread_concurrency=16
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=16M
innodb_log_file_size=512M
innodb_log_files_in_group=2
innodb_max_dirty_pages_pct=75
innodb_lock_wait_timeout=50
innodb_file_per_table=on
[mysqldump]
quick
max_allowed_packet=32M
[myisamchk]
key_buffer=16M
sort_buffer_size=16M
read_buffer=8M
write_buffer=8M
[mysqld_safe]
open-files-limit=8192
log-error=/data/mysql/error.log
pid-file=/data/mysql/mysqld.pid
EOF
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --user=mysql --initialize >/tmp/install.log 2>&1
tempwd=$(cat /tmp/install.log | grep temporary)
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 700 /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 2345 mysqld on
cat >> /etc/ld.so.conf.d/mysql-x86_64.conf<<EOF
/usr/local/mysql/lib
EOF
ldconfig
if [ -d "/proc/vz" ];then
ulimit -s unlimited
fi
/etc/init.d/mysqld start
if [ ! -z "$tempwd" ]; then
tempwd=${tempwd##*root@localhost: }
else
echo "get mysql init password faild!"
exit 1
fi
/usr/local/mysql/bin/mysql -u root -p$tempwd --connect-expired-password -e "alter user user() identified by '$mysqlrootpwd';flush privileges;"
cat > /tmp/mysql_sec_script<<EOF
use mysql;
Grant all privileges on *.* to 'root'@'%' identified by '${mysqlrootpwd}' with grant option;
drop database test;
flush privileges;
EOF
/usr/local/mysql/bin/mysql -u root -p"$mysqlrootpwd" -h localhost < /tmp/mysql_sec_script
rm -f /tmp/mysql_sec_script
rm -f /tmp/install.log
echo 'export PATH=/usr/local/mysql/bin/:$PATH' >>/etc/profile
source /etc/profile
echo "============================MySQL 5.7.40 install completed========================="
}
function CheckInstall()
{
echo "===================================== Check install ==================================="
clear
ismysql=""
echo "Checking..."
if [ -s /usr/local/mysql/bin/mysql ] && [ -s /usr/local/mysql/bin/mysqld_safe ] && [ -s /etc/my.cnf ]; then
echo "MySQL: OK"
ismysql="ok"
else
echo "Error: /usr/local/mysql not found!!!MySQL install failed."
fi
if [ "$ismysql" = "ok" ]; then
echo "Install MySQL 5.7.40 completed! enjoy it."
echo "========================================================================="
netstat -ntl
else
echo "Sorry,Failed to install MySQL!"
echo "You can tail /root/mysql-install.log from your server."
fi
}
#The installation log
InitInstall 2>&1 | tee /root/mysql-install.log
InstallDependsAndOpt 2>&1 | tee -a /root/mysql-install.log
#InstallMySQL57 > /dev/null
InstallMySQL57
source /etc/profile
CheckInstall 2>&1 | tee -a /root/mysql-install.log