适用于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
###############################################################################
#author:kymlin
#content: mysql5.28安装脚本,只适用于centos/redhat7.x
###############################################################################


#msyql数据文件存放目录(可修改)
datadir=/data/mysql
#mysql rpm包存放目录
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() {
#检查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

#检查data文件夹
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

#关闭selinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=diabled/g" /etc/selinux/config

#放开mysql限制
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/rpm
#不解决依赖关系,强制安装
rpm -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

#设置mysql参数
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/3306
su - 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

#设置mysql自启动
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 "请选择对应数字操作:" choose
case $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