03-centos7.4一键编译安装mysql5.7.34脚本【默认端口为3306】
一键编译安装mysql5.7.34脚本【默认端口为3306】
说明:
安装版本:mysql5.7.34
安装路径:/data/mysql3306
默认端口:3306
用户:mysql
用户UID:1150
版本1
- 未配置systemd开机自启动
#!/bin/bash #Author:chenwei #Time:2020-07-28 11:30:44 #Name:auto_install_mysql_v1.sh #Version:V1.0 #Description:This script is used for automatically #1.0 定义使用方法 function usage_mysql(){ echo -e "\033[31m Step1:bash $0 \033[0m" echo -e "\033[31m Step2:Comfirm MySQL Port number \033[0m" exit 2; } #2.0 定义环境变量 function define_env(){ read -p "Please input MySQL Port number: " mysqlport echo -e "\033[32m Your's MySQL Port is:$mysqlport \033[0m" MYSQL_PORT="$mysqlport" USER_CONF="/home/nameke" TOOLS_PATH="/home/nameke/tools" INSTALL_PATH="/data/mysql$MYSQL_PORT" CONFIG_PATH="/data/mysql$MYSQL_PORT/etc" BOOST_PATH="/usr/local/boost" MySQL_Version="mysql-5.7.34.tar.gz" } function sed_script(){ sed -i "s#3306#$MYSQL_PORT#g" $CONFIG_PATH/my.cnf echo -e "\033[32m replace $CONFIG_PATH/my.cnf succ \033[0m" } #3.0 定义检查mysql端口进程函数 function check_mysql(){ check_port=$(netstat -antlp|grep "mysqld"|egrep -v grep|wc -l) check_proccess=$(ps aux|grep "mysql$MYSQL_PORT"|egrep -v grep|wc -l) grep_hosts=$(grep "mysql$MYSQL_PORT" /etc/rc.local|egrep -v grep|wc -l) if [ "$check_port" -gt "0" -a "$check_proccess" -gt "0" ] then echo -e "\033[32m mysql$MYSQL_PORT had started! \033[0m" netstat -antlp|grep mysqld if [ $grep_hosts -gt 0 ] then echo -e "\033[32m mysql$MYSQL_PORT had exists in /etc/rc.local! \033[0m" exit 2; else echo -e "\033[31m mysql$MYSQL_PORT doesn't exists in /etc/rc.local! \033[0m" echo -e "nohup $INSTALL_PATH/bin/mysqld --defaults-file=$CONFIG_PATH/my.cnf &" >>/etc/rc.local echo -e "\033[32m done \033[0m" exit 1; fi else echo -e "\033[33m mysql$MYSQL_PORT proccess and port doesn't exists \033[0m" fi } #4.0 安装必要的依赖软件 function yum_install(){ echo -e "\033[32m yum install softwares \033[0m" yum install -y perl perl-devel autoconf git gcc gcc-c++ pcre pcre-devel openssl openssl-devel yum install -y zlib zlib-devel cmake ncurses ncurses-devel bison bison-devel } #5.0 配置boost软件包 function copy_boost(){ \cp -f $TOOLS_PATH/boost_1_59_0.tar.gz $BOOST_PATH cd $BOOST_PATH && tar zxf $BOOST_PATH/boost_1_59_0.tar.gz chown -R root:root $BOOST_PATH && chmod 755 $BOOST_PATH/boost_1_59_0 echo -e "\033[32m config boost-1.59.0 succ \033[0m" } #5.1 定义下载boost函数 function install_boost(){ cd $TOOLS_PATH && wget -c http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz copy_boost; } #6.0 下载mysql和boost软件包 function download_software(){ #下载mysql if [ ! -d $TOOLS_PATH ] then mkdir -p $TOOLS_PATH && cd $TOOLS_PATH wget -c https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/$MySQL_Version && echo -e "\033[32m Download $MySQL_Version succ \033[0m" else cd $TOOLS_PATH if [ ! -f $MySQL_Version ] then cd $TOOLS_PATH && wget -c https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/$MySQL_Version echo -e "\033[32m Download $MySQL_Version succ \033[0m" else echo -e "\033[33m $MySQL_Version had exists! \033[0m" fi fi #下载boost if [ ! -d $BOOST_PATH ] then mkdir -p $BOOST_PATH && echo -e "\033[32m mkdir $BOOST_PATH succ \033[0m" if [ ! -f $TOOLS_PATH/boost_1_59_0.tar.gz ] then echo -e "\033[33m boost_1_59_0.tar.gz doesn't exists! \033[0m" && install_boost; else copy_boost; fi else echo -e "\033[33m directory $BOOST_PATH has exists \033[0m" if [ ! -f $TOOLS_PATH/boost_1_59_0.tar.gz ] then echo -e "\033[33m boost_1_59_0.tar.gz doesn't exists! \033[0m" && install_boost; else copy_boost; fi fi } #7.0 创建用户mysql function adduser_mysql(){ id mysql if [ $? -ne 0 ] then adduser -u 1150 -s /sbin/nologin -M mysql if [ `grep mysql /etc/passwd|egrep -v grep|wc -l` -eq 1 ] then echo -e "\033[32m adduser mysql success \033[0m" id mysql else echo -e "\033[31m adduser mysql fail,please try again \033[0m" exit 2; fi else echo -e "\033[33m user mysql has exists \033[0m" fi } #8.0 编译安装mysql-5.7.34 function install_mysql(){ if [ ! -d $CONFIG_PATH ] then mkdir -p $INSTALL_PATH/{data,etc,logs,var,tmp} && echo -e "\033[32m mkdir $CONFIG_PATH succ \033[0m" fi if [ -d $CONFIG_PATH ] then echo -e "\033[33m $INSTALL_PATH/{data,etc,logs,var,tmp} has exists \033[0m" && chown -R mysql:nameke $INSTALL_PATH/ cd $TOOLS_PATH && tar zxf $MySQL_Version cd $TOOLS_PATH/mysql-5.7.34/ && cmake . -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH \ -DSYSCONFDIR=$CONFIG_PATH \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DENABLED_LOCAL_INFILE=ON \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_UNIX_ADDR=$INSTALL_PATH/var/mysql.sock \ -DCOMPILATION_COMMENT='Mysqlma' \ -DWITH_READLINE=ON \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=$BOOST_PATH if [ $? -eq 0 ] then echo -e "\033[32m cmake mysql succ \033[0m" make && make install if [ $? -eq 0 ] then echo -e "\033[32m make and make install mysql succ \033[0m" && chown -R mysql:nameke $INSTALL_PATH/* else echo -e "\033[31m make and make install msyql fail,please check it \033[0m" exit 2; fi else echo -e "\033[31m cmake mysql fail,please check and try again \033[0m" exit 2; fi fi } #8.1 定义配置函数 function conf_mycnf(){ echo -e "\033[32m $USER_CONF/conf/my.cnf is exists \033[0m" && \cp -f $USER_CONF/conf/my.cnf $CONFIG_PATH/my.cnf chown -R mysql:nameke $INSTALL_PATH/* && echo -e "\033[32m copy $USER_CONF/conf/my.cnf to $CONFIG_PATH succ \033[0m" $INSTALL_PATH/bin/mysqld --initialize-insecure --user=mysql --basedir=$INSTALL_PATH --datadir=$INSTALL_PATH/data if [ $? -eq 0 ] then echo -e "\033[32m initialize mysql succ \033[0m" echo "export PATH=$INSTALL_PATH/bin:$PATH" >> /etc/profile && source /etc/profile else echo -e "\033[32m initialize mysql fail,please check it \033[0m" exit 2; fi } #9.0 配置mysql配置文件 function config_mycnf(){ if [ ! -f $USER_CONF/conf/my.cnf ] then cat >>$USER_CONF/conf/my.cnf<<EOF [mysqld] port = $MYSQL_PORT socket = $INSTALL_PATH/var/mysql.sock basedir = $INSTALL_PATH datadir = $INSTALL_PATH/data pid-file = $INSTALL_PATH/logs/mysql.pid user = mysql bind-address = 0.0.0.0 server-id = 1 init-connect = 'SET NAMES utf8mb4' character-set-server = utf8mb4 #skip-name-resolve #skip-networking back_log = 300 max_connections = 1000 max_connect_errors = 6000 open_files_limit = 65535 table_open_cache = 128 max_allowed_packet = 1M binlog_cache_size = 1M max_heap_table_size = 2M tmp_table_size = 4M read_buffer_size = 1M read_rnd_buffer_size = 2M sort_buffer_size = 2M join_buffer_size = 2M key_buffer_size = 1M thread_cache_size = 8 query_cache_type = 1 query_cache_size = 2M query_cache_limit = 1M ft_min_word_len = 4 log_bin = mysql-bin binlog_format = mixed expire_logs_days = 30 log_error = $INSTALL_PATH/logs/mysql_error.log slow_query_log = 1 long_query_time = 1 slow_query_log_file = $INSTALL_PATH/logs/mysql_slow.log performance_schema = 0 explicit_defaults_for_timestamp = true #lower_case_table_names = 1 skip-external-locking default_storage_engine = InnoDB #default-storage-engine = MyISAM innodb_file_per_table = 1 innodb_open_files = 500 innodb_buffer_pool_size = 16M innodb_write_io_threads = 4 innodb_read_io_threads = 4 innodb_thread_concurrency = 0 innodb_purge_threads = 1 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 1M innodb_log_file_size = 8M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 bulk_insert_buffer_size = 8M myisam_sort_buffer_size = 8M myisam_max_sort_file_size = 1G myisam_repair_threads = 1 interactive_timeout = 28800 wait_timeout = 28800 [mysqldump] quick max_allowed_packet = 8M
[mysql]
prompt="\\R:\\m:\\s(\\u@\\h) [\\d]>\\_"
EOF if [ $? -eq 0 ] then conf_mycnf; else echo -e "\033[31m config $USER_CONF/conf/my.cnf fail \033[0m" exit 2; fi else conf_mycnf; fi } #10.0 配置mysql开机自启动 function config_service(){ if [ ! -f /usr/lib/systemd/system/mysql${MYSQL_PORT}.service ] then cat >>/usr/lib/systemd/system/mysql${MYSQL_PORT}.service<<EOF [Unit] Description = MySQL Server Documentation = man:mysqld(8) Documentation = http://dev.mysql.com/doc/refman/en/using-systemd.html After = network.target After = syslog.target [Service] User = mysql Group = mysql PIDFile=/data/mysql3306/logs/mysql.pid ExecStart = /data/mysql3306/bin/mysqld --defaults-file=/data/mysql3306/etc/my.cnf LimitNOFILE = 5000 #Restart=on-failure #RestartPreventExitStatus=1 #PrivateTmp=false [Install] WantedBy = multi-user.target EOF if [ $? -eq 0 ] then echo -e "\033[32m config mysql.service succ \033[0m" && systemctl daemon-reload && systemctl start mysql.service else echo -e "\033[31m config mysql.service fail \033[0m" fi else echo -e "\033[33m mysql.service had exist \033[0m" && systemctl daemon-reload && systemctl start mysql.service fi } #11.0 开启自启动mysql
#可以考虑配置成systemd开机自启动模式 function start_mysql(){ echo -e "\033[32m starting mysql$MYSQL_PORT,please wait a minute ...\033[0m" nohup $INSTALL_PATH/bin/mysqld --defaults-file=$CONFIG_PATH/my.cnf & echo -e "\033[32m Start mysql$MYSQL_PORT succ \033[0m" sleep 5; } #12.0 主函数 function main(){ if [ $UID -ne 0 ] then echo -e "\033[31m Usage:You must be root to run this script! \033[0m" usage_mysql; else define_env; if [ -z $MYSQL_PORT ] then usage_mysql; else check_mysql; echo -e "\033[32m Start installing mysql$MYSQL_PORT ... \033[0m" yum_install; download_software; adduser_mysql; install_mysql; config_mycnf; ##config_service; start_mysql; check_mysql; echo -e "\033[32m End of Istall mysql$MYSQL_PORT \033[0m" exit 2; fi fi } main
版本2
- 设置为systemd开机自启动

浙公网安备 33010602011771号