【实用脚本】MySQL5.7单实例安装脚本

TangLu 未命名 2020-02-12 3252 0

一、MySQL单实例安装脚本说明

my.cnf配置文件可以根据实际需要进行修改,如果初始化完成后使用临时密码提示密码过期,是因为系统自带的mysql命令行工具与当前安装的MySQL版本不一致,使用绝对路径即可

#!/bin/bash
#脚本说明部分
cat << EOF
1、请事先下载好MySQL二进制安装包并解压于/usr/local下
2、为二进制包做好软连接,如:
	ln -s /usr/local/mysql-5.7.27-linux-glibc2.12-x86_64/ /usr/local/mysql
3、确保上面两步都操作后,运行脚本完成服务安装和初始化,MySQL监听端口为3306,配置文件为/etc/my.cnf
EOF

#变量设置
mysql_dir=/data/mysql
data_dir=/data/mysql/data
log_dir=/data/mysql/log
echo ""
#初始化数据库(可反复执行,但会清空数据)
read -p "是否进行初始化,初始化将清空已有数据,输入y继续,其它按键退出脚本:" input
if [ $input == "y" ];then
  #创建mysql用户
  id mysql > /dev/null 2>&1
  if [ $? != 0 ];then
    useradd -r -s /sbin/nologin -M mysql && echo "成功创建MySQL用户"
    sleep 1
  else
    echo "MySQL用户已存在,无需创建"
    sleep 1
  fi

#创建数据和日志目录
mkdir -p $log_dir
mkdir -p $data_dir
chown -R mysql.mysql $mysql_dir

#创建数据库配置文件
if [ -e /etc/my.cnf ];then
  echo > /etc/my.cnf
else
  touch /etc/my.cnf
fi

#my.cnf配置文件内容
cat > /etc/my.cnf <<EOF
[mysqld]
basedir = /usr/local/mysql
datadir = $data_dir
port = 3306
socket = /tmp/mysql.sock 
character-set-server = utf8mb4
default-storage-engine = INNODB
skip-name-resolve
server_id = 10
# sql_safe_updates=1

#Log setting
log_error = $log_dir/error.log
slow_query_log = on
slow_query_log_file = $log_dir/slow.log
long_query_time = 3
log_bin = $log_dir/master-bin
log_bin_index = $log_dir/master-bin.index
binlog_format = row
expire_logs_days = 10
max_binlog_size = 1024M
binlog_cache_size = 32768

#双1参数,建议都设置为1提升数据安全
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
# Innodb setting
innodb_buffer_pool_size = 512M 
innodb_flush_method=O_DIRECT 
innodb_log_file_size = 200M 
innodb_file_per_table = 1  
innodb_lock_wait_timeout = 10 
# innodb_buffer_pool_dump_at_shutdown = ON  
# innodb_buffer_pool_filename = ib_buffer_pool
# innodb_buffer_pool_load_at_startup = ON 

[mysql]  #作用于mysql客户端工具如果这里配置了先关选项,使用客户端命令就不需要填写了
socket = /tmp/mysql.sock
prompt= "[\\u@linuxe][\\d]>"  
# tee = "/data/dblog/tee.log"  
no-auto-rehash  
EOF

#检查是否有3306端口占用
mysql_proc=`netstat -ntulp | grep 3306 | wc -l`
if [ $mysql_proc -gt 0 ];then
  echo "当前MySQL正在运行,请输入MySQL管理密码停止进程"
  /usr/local/mysql/bin/mysqladmin -uroot -p -S /tmp/mysql.sock shutdown && echo "MySQL服务已关闭,开始初始化"
    if [ $? -ne 0 ];then
      echo "密码错误,脚本退出" 
      exit 1
    fi
  else
      echo "没有MySQL进程正在运行,开始进行初始化"
      sleep 1
fi

rm -rf $data_dir/*  && echo "已清空数据目录"
rm -rf $log_dir/*  && echo "已清空日志目录"

#初始化数据库
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf  --initialize --user=mysql
if [ $? -ne 0 ];then
  echo "初始化失败,脚本退出" 
  exit 1
else
  mysql_password=`grep "temporary password" $log_dir/error.log | awk '{print $NF}'`
  echo "初始化成功,当前MySQL临时管理密码:$mysql_password"
fi

#启动服务
  /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf 2>&1 > /dev/null &
  echo "请运行/usr/local/mysql/bin/mysql_secure_installation 进行安全初始化"
else
  echo "脚本已退出"
fi

评论