#!/bin/sh
#基于centos6.7、centos7.4和中标麒麟系统安装数据库mysql8.0.11版本。
echo "---------开始检查mysql安装情况---------"
#定义my.cnf配置文件
function mysqlcnf()
{
cat >> /etc/my.cnf <<EOF
[mysqld]
datadir=/mysql/mydata/data
socket=/tmp/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server-id = 1
lower-case-table-names=1
back_log = 80
max_connections = 300
max_connect_errors = 9999999
skip-grant-tables
skip-name-resolve
max_allowed_packet = 32M
default_authentication_plugin=mysql_native_password
skip-character-set-client-handshake
tmp_table_size = 96M
max_heap_table_size = 96M
thread_cache_size = 32
sort_buffer_size = 2M
join_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
# 分配了2G内存,如果内存较小可以按比较调小比如2G内存的可以根据机器部署情况调整为512M或1024M
innodb_buffer_pool_size = 100M
innodb_buffer_pool_instances = 4
innodb_log_buffer_size = 16M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
log_bin = mysql_bin
binlog_format = MIXED
sql_mode=NO_ENGINE_SUBSTITUTION
# 如果硬盘小,可设置为0,不使用或者调小
binlog_expire_logs_seconds=1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
default-character-set=utf8
socket =/tmp/mysql.sock
EOF
}
function setupmysql()
{
if [ ! -d "/mysql/mydata/data" ];then
mkdir /mysql/mydata/data -p #--创建目录
fi
if [ `grep "mysql" /etc/group | wc -l` -eq 0 ];then
useradd -r mysql # --创建mysql 用户
fi
chown -R mysql.mysql /mysql/mydata/data/ # --改变属主和属组
tar xf /opt/forecast_tool/mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ >/dev/null 2>&1
if [ `find /usr/local/ -name 'mysql' -type l | wc -l` -eq 0 ];then
cd /usr/local/
ln -sv mysql-8.0.11-linux-glibc2.12-x86_64/ mysql >/dev/null 2>&1
fi
cd /usr/local/mysql/
chown -R root.mysql ./* # --改变root下的mysql组
/usr/local/mysql/bin/mysqld --initialize --lower-case-table-names=1 --user=mysql --basedir=/usr/local/mysql/ --datadir=/mysql/mydata/data >& /etc/null # --初始化
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld # --添加在服务里面
if [ ! -f "/etc/my.cnf" ];then
echo "-->[`date +"%Y-%m-%d %H:%M.%S"`] 修改my.cnf配置"
mysqlcnf
else
mv /etc/my.cnf /etc/my.cnfbak
mysqlcnf
fi
if [ `grep "mysql" /etc/profile | wc -l` -eq 0 ];then
cat >> /etc/profile << eof
export PATH=\$PATH:/usr/local/mysql/bin
eof
fi
. /etc/profile
service mysqld restart >& /dev/null
#在主服务上创建连接管理员的账户,不能再从服务器上创建
echo "flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
CREATE USER 'sa'@'%' IDENTIFIED WITH mysql_native_password BY 'cast1234';
GRANT ALL PRIVILEGES ON *.* TO 'sa'@'%';
grant Grant option on *.* to 'sa'@'%';
" > sqlfile
mysql -uroot < sqlfile
rm sqlfile
sed -i 's/skip-grant-tables/\#&/' /etc/my.cnf
service mysqld restart >& /dev/null
}
#如果没有安装MySQL,则开始安装
if [ `rpm -qa | grep mysql | grep -v grep | wc -l` -eq 0 ];then
echo "---------开始安装 mysql---------"
setupmysql
echo "-->[`date +"%Y-%m-%d %H:%M.%S"`] mysql 已经安装完成!"
else
echo "-->[`date +"%Y-%m-%d %H:%M.%S"`]检查系统mysql版本!"
echo -e "\n"
mysqlversion="8.0.11"
if [[ `mysql --help|grep linux-glibc|cut -d ' ' -f 4` = $mysqlversion ]];then
echo "-->[`date +"%Y-%m-%d %H:%M:%S"`]系统已经安装mysql version:8.0.11"
mv /etc/my.cnf /etc/my.cnfbak
mysqlcnf
echo "grant Grant option on *.* to sa@'%';
flush privileges;" > sqlfile
mysql -u root < sqlfile
rm sqlfile
service mysqld restart >& /dev/null #restart mysql
else
serveice mysqld stop >/dev/null 2>&1
for i in $(rpm -aq | grep ^mysql| grep -v grep)
do
echo "-->[`date +"%Y-%m-%d %H:%M:%S"`]正在卸载"$i
rpm -e --nodeps $i
done
if [ `rpm -qa | grep ^mysql | grep -v grep | wc -l` -eq 0 ];then
echo "-->[`date +"%Y-%m-%d %H:%M.%S"`] 卸载成功 $i"
echo "-->[`date +"%Y-%m-%d %H:%M:%S"`]开始安装mysql"
setupmysql
if [ `netstat -ntlp | grep 3306 | wc -l` -eq 1 ];then
echo "-->[`date +"%Y-%m-%d %H:%M:%S"`]mydql安装成功"
fi
fi
fi
fi
echo "---------结束检查mysql安装情况---------"