mysql5.7.40安装脚本

发布时间 2023-07-19 15:01:21作者: 我是刹那、
#!/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