适用于centos/redhat7.x的mysql自动安装脚本,需配合安装包使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 #!/bin/bash datadir=/data/mysql mysql_rpm=/data/soft lines="=================================================================================" id_mysql=`cat /etc/passwd | grep mysql | wc -l` mysqld_status=`ps -ef | grep -v grep | grep -w mysql | wc -l` mysql_package=`rpm -qa | grep mysql | wc -l` echo_red () { local what=$* echo -e "\033[31m${what} \033[0m" } echo_green () { local what=$* echo -e "\033[32m${what} \033[0m" } echo_yellow () { local what=$* echo -e "\033[33m${what} \033[0m" } remove_mysql () { yum remove mysql -y > /dev/null for i in `rpm -qa | grep mysql`;do rpm -e $i --nodeps > /dev/null done [ -d $datadir ] && rm -rf $datadir [ -L /etc/my.cnf ] && rm -f /etc/my.cnf checkusr=`grep -e mysql /etc/passwd | wc -l` [ $checkusr -gt 0 ] && userdel -r mysql echo $lines echo_green "卸载完成" } install_mysql () {if [ ! $id_mysql -eq 0 ];then echo $lines echo_red "已存在mysql用户,请检查是否已安装mysql" exit elif [ ! $mysqld_status -eq 0 ];then echo $lines echo_red "存在mysql进程...已安装了mysql" exit elif [ ! $mysql_package -eq 0 ];then echo $lines echo_red "存在mysql安装包...已安装了mysql" exit else useradd mysql echo $lines [[ $? -eq 0 ]] && echo_green "mysql用户创建成功" echo $lines fi if [ ! -d $mysql_rpm ];then mkdir -p $mysql_rpm chown -R mysql:mysql $mysql_rpm fi read -p "请将mysql-rpm.zip移动到$mysql_rpm 下,按任意键继续" if [ ! -d $mysql_rpm /rpm ];then ls /usr/bin/unzip > /dev/null if [ $? -eq 0 ];then cd $mysql_rpm / && unzip mysql-rpm.zip else echo_red "找不到解压命令,未解压成功,请手动解压" exit fi fi checkrpm=`ls $mysql_rpm /rpm | wc -l` if [ $checkrpm -eq 0 ];then echo_red "找不到安装包" fi setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=diabled/g" /etc/selinux/config cat > /etc/security/limits.d/mysql.conf <<EOF mysql soft nproc 10240 mysql hard nproc 16384 mysql soft nofile 65536 mysql hard nofile 65536 EOF if [ ! -d $datadir ];then mkdir -p $datadir /data/3306/{backup,data,log-bin,log-relay,tmp,redo,undo} chown -R mysql:mysql $datadir else read -p "已存在/mysql文件夹,是否继续,如果继续将删除/mysql文件夹[y/n]" num if [ $num == yes -o $num == y ];then rm -rf /mysql mkdir -p $datadir /data/3306/{backup,data,log-bin,log-relay,tmp,redo,undo} chown -R mysql:mysql $datadir if [ -L /etc/my.cnf -o -f /etc/my.cnf ];then mv /etc/my.cnf /etc/my.cnf.bak fi else exit fi fi cd $mysql_rpm /rpmrpm -Uvh --force --nodeps ./*.rpm if [ ! $? -eq 0 ];then echo_red "安装失败" exit fi chown mysql:mysql /etc/my.cnf mv /etc/my.cnf $datadir ln -s $datadir /my.cnf /etc/my.cnf cat > /etc/my.cnf <<EOF [client] loose-default-character-set=utf8mb4 [mysqld] port =3306 user =mysql ## Path datadir =$datadir/data/3306/data log-error =$datadir/data/3306/mysqld-info.log log-bin =$datadir/data/3306/log-bin/binlog relay-log =$datadir/data/3306/log-relay/relaylog tmpdir =$datadir/data/3306/tmp slow_query_log_file =$datadir/data/3306/mysqld-slow.log general_log_file =$datadir/data/3306/mysqld-query.log innodb_log_group_home_dir =$datadir/data/3306/redo/ innodb_undo_directory =$datadir/data/3306/undo/ innodb_temp_data_file_path =../tmp/ibtmp1:100M:autoextend symbolic-links =0 ## SQL #transaction-isolation =READ-COMMITTED #sql_mode =ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION character_set_server =utf8mb4 collation_server =utf8mb4_general_ci explicit_defaults_for_timestamp =1 log_bin_trust_function_creators =1 ## DB plugin_load_add ="auth_socket.so" max_connections =500 expire_logs_days =15 log_timestamps =SYSTEM log_output =TABLE #general_log =1 slow_query_log =1 long_query_time =10 log_slow_admin_statements =1 lower_case_table_names =1 #skip_name_resolve =1 ## Buffer max_allowed_packet =128M max_heap_table_size =128M key_buffer_size =32M sort_buffer_size =4M join_buffer_size =4M read_buffer_size =4M read_rnd_buffer_size =4M bulk_insert_buffer_size =32M myisam_sort_buffer_size =32M myisam_max_sort_file_size =2G ## InnoDB innodb_buffer_pool_size =1G innodb_flush_method =O_DIRECT innodb_log_buffer_size =16M innodb_log_files_in_group =2 innodb_log_file_size =50M innodb_rollback_on_timeout =1 innodb_undo_tablespaces =2 ## Replication server_id =1 relay_log_recovery =1 binlog_format =ROW master_info_repository =TABLE relay_log_info_repository =TABLE plugin_load_add ="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #rpl_semi_sync_master_enabled =1 rpl_semi_sync_master_timeout =1000 rpl_semi_sync_slave_enabled =1 EOF cd $datadir /data/3306su - mysql -c "mysqld --initialize-insecure" sleep 5 echo $lines echo_yellow "`tail -100 mysqld-info.log|grep -i warning`" echo_red "`tail -100 mysqld-info.log|grep -i error`" echo $lines systemctl enable mysqld systemctl restart mysqld systemctl status firewalld > /dev/null if [ $? -eq 0 ];then firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload fi sleep 2 ps -ef | grep mysql | grep -v grep > /dev/null echo $lines [[ $? -eq 0 ]] && echo_green "mysql已启动,安装完成" || echo_red "安装失败" } if [ ! $UID -eq 0 ];then echo_red "请使用root用户执行此脚本!!" exit fi echo $lines echo -e " `echo_red " 【1】安装mysql"` `echo_red " 【2】卸载mysql"` " read -p "请选择对应数字操作:" choosecase $choose in 1) install_mysql ;; 2) read -p "注意,只能删除使用本脚本安装的mysql,是否继续(y/n):" num if [ $num == y -o $num == yes ];then echo_yellow "卸载中..." remove_mysql elif [ $num == n ];then exit else echo "请输入正确参数!!" exit fi ;; *) echo $lines echo_red "请输入正确的参数选项!!" exit esac