美文网首页
centos7二进制安装mysql5.7/8.0脚本

centos7二进制安装mysql5.7/8.0脚本

作者: 念念OPS | 来源:发表于2021-01-05 16:38 被阅读0次
#!/bin/bash
#MySQL5.7.29 Download URL: https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz #已经验证可以自动化
#MySQL5.7.31 Download URL: https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz"   #
#MySQL8.0 Download URL: https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz

. /etc/init.d/functions
SRC_DIR=`pwd`
LINK="https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz"
#MYSQL='mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz'
#MYSQL='mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz'
MYSQL="mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz"
FULL_NAME=${SRC_DIR}/${MYSQL}
COLOR='echo -e \e[01;31m'
END='\e[0m'
MYSQL_ROOT_PASSWORD=123456
action "下载依赖..."
yum -y install autoconf libaio-devel numactl-libs libtinfo* net-tools vim wget gcc gcc-c++ lrzsz &>/dev/null

check (){
if [ $UID -ne 0 ];then
    action "当前用户不是root,安装失败" false
    exit 1
fi

cd $SRC_DIR
if [ -e /usr/local/mysql ];then
  action "数据库已存在,安装失败" false
  exit 1
elif [ ! -e ${FULL_NAME} ];then
    $COLOR"缺少${MYSQL}文件"$END
    $COLOR"正在下载${MYSQL}文件..."$END
    wget $LINK && action "下载${MYSQL}文件完成" || action "下载${MYSQL}文件失败" false
else
    return
fi
}

install_mysql(){
$COLOR"开始安装MySQL数据库..."$END
cd $SRC_DIR
tar xf $MYSQL -C /usr/local/
MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`
ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
#创建用户mysql
id mysql &>/dev/null && { action "mysql already exists";usermod -u306 -md /data/mysql -s /sbin/nologin mysql &>/dev/null; } || { useradd -r -u306 -d /data/mysql -s /sbin/nologin mysql &>/dev/mull; }

chown -R mysql.mysql /usr/local/mysql/

echo 'PATH=/usr/local/mysql/bin/:$PATH' >> /etc/profile.d/path.sh
. /etc/profile.d/path.sh
mkdir -p /mysql/3306/{data,binlog,log,etc,trans_log,pid,sock}
chown -R mysql.mysql /mysql/

cat > /etc/my.cnf <<EOF
[mysql]
socket=/mysql/3306/sock/mysql.sock
prompt="(\u@\h) [\d]>\_"
[mysqldump]
socket=/mysql/3306/sock/mysql.sock
EOF

cat > /mysql/3306/etc/my.cnf <<EOF
[mysql]
socket=/mysql/3306/sock/mysql.sock
prompt="(\u@\h) [\d]>\_"
[mysqld]
user=mysql
skip_name_resolve=1
datadir=/mysql/3306/data
basedir=/usr/local/mysql
pid-file=/mysql/3306/pid/mysql.pid
port=3306
socket=/mysql/3306/sock/mysql.sock

# connection
max_connections=5000
max_connect_errors=200
#skip-networking=1
# skip-grant-tables=1

# replication
server_id=18    # 默认1 复制用
# read-only # 从服务器只读设置
# log_slave_updates #级联复制时 实现中间slave节点能将master的二进制日志在本机进行数据库更新,并且也同时更新本机的二进制,从而实现级联复制
gtid_mode=on
enforce-gtid-consistency=true   #强制一致性

# binlog
# sql_log_bin=ON    #default ON
log_bin=/mysql/3306/binlog/mysql-bin
# sync_binlog=1
# binlog_format=row     # default row

# error_log
log_error=/mysql/3306/log/mysql.log

# general_log
general_log=ON
general_log_file=/mysql/3306/log/general.log
log_output=FILE

# select安全导出文件
secure-file-priv=/tmp

# set default engine
# default_storage_engine=InnoDB     # default

# innodb transaction manager
autocommit=1    #default 1  1默认为1,为0时设为非自动提交 建议:设置1 显式begin请求和提交事务,而不要使用“自动提交”功能

# innodb transaction isolation Level
# transaction_isolation=READ-UNCOMMITTED        # 读未提交
# transaction_isolation=read-committed      # 读已提交
transaction_isolation=Repeatable-READ   # 可重复读 default
# transaction_isolation=Serializable        # 可串行化

# innodb redo log for transaction
innodb_log_group_home_dir=/mysql/3306/trans_log/        # default=./ (datadir下) 事务文件路径
# innodb_log_files_in_group=2       # default 事务文件个数

# redo log size for buffer and file
innodb_log_file_size=200M
# innodb_log_buffer_size=16777216  # default

# redo log sync level
innodb_flush_log_at_trx_commit=1    #default 安全最好 事务commit write on redolog_buffer DML每次commit都会立即sync到磁盘 逐条将commit的事务sync到磁盘
# innodb_flush_log_at_trx_commit=0  #性能良好 事务commit后 write on redolog_buffer 每秒sync redolog_buffer中的多个事务到磁盘
# innodb_flush_log_at_trx_commit=2  #性能良好 事务commit后 write on os cache       每秒sync os cache中的多个事务都磁盘 生产建议使用

# innodb tablespace
# innodb_file_per_table=1   # default 1 独立表空间 0 共享表空间
EOF


mysqld --defaults-file=/mysql/3306/etc/my.cnf --initialize-insecure --user=mysql --datadir=/mysql/3306/data --basedir=/usr/local/mysql &>/dev/null
#mysqld --initialize --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql

cat > /lib/systemd/system/mysqld.service <<-EOF
    [Unit]
    Description=mysql database server
    After=network.target
    [Install]
    WantedBy=multi-user.target
    [Service]
    User=mysql
    Group=mysql
    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/mysql/3306/etc/my.cnf
    LimitNOFILE=6000
    EOF
systemctl enable mysqld
systemctl start mysqld
ss -lnt|( grep -o 3306 && action "启动成功" || action "启动失败" false )


#MYSQL_OLDPASSWORD=$(awk '/A temporary password/{print $NF}' /data/mysql/mysql.log)
#mysqladmin -uroot -p${MYSQL_OLDPASSWORD} password ${MYSQL_ROOT_PASSWORD} &>/dev/null
action "数据库安装完成"

}

#执行函数
check
install_mysql

相关文章

网友评论

      本文标题:centos7二进制安装mysql5.7/8.0脚本

      本文链接:https://www.haomeiwen.com/subject/nhrwoktx.html