1 #!/bin/bash2 echo '安装开始前请您详细阅读以下内容,否则可能会导致安装失败'
3 sleep 2
4 echo -e '此脚本安装MySQL-8.0版本MySQL \n如果您的系统版本使用CentOS 7 系统,所需安装包为mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar\n如果您的系统版本使用CentOS 6 系统,所需软件包为mysql-8.0.20-1.el6.x86_64.rpm-bundle.tar'
5 sleep 2
6 echo '安装开始前,请将压缩包放到/usr/local/src/目录,否则脚本不会继续运行'
7 sleep 5
8 #检测运行环境 非centos7系统不能运行此脚本9 echo '正在检测运行环境...'
10 sleep 2
11 RHversion=`cat /etc/redhat-release |awk '{match($0,"release")
12 print substr($0,RSTART+RLENGTH)}'| awk -F'.' '{print $1}'`
13 if [ $RHversion -eq 7 ];then
14 echo "您使用的系统版本为CentOS $RHversion"
15 sleep 1
16 #检测当前账户17 echo '正在检测用户是否为root'
18 sleep 2
19 user=${USER}20 if [ "$user" != root ];then
21 echo "当前用户不为root,正在退出..."
22 exit 1
23 fi
24 #检测libaio软件包25 echo '正在检测依赖环境...'
26 libaio=`rpm -qa|grep libaio |wc -l`27 libaioverison=`rpm -qa|grep libaio|awk -F"-" '{print $1$2}'`28 if [ $libaio -eq 1 ];then
29 echo "libaio版本为$libaioverison"
30 else
31 echo '没有找到libaio依赖包,正在尝试安装'
32 yum install libaio -y33 if [ $? -eq 0 ];then
34 echo "安装完成"
35 else
36 echo "安装失败,正在退出..."
37 sleep 2
38 exit 1
39 fi
40 fi
41 #检测是否有mysql压缩包42 echo '检测是否有MySQL压缩包...'
43 sleep 2
44 if [ -f "/usr/local/src/mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar" ];then
45 echo '文件存在'
46 sleep 2
47 else
48 echo '您没有上传指定的MySQL压缩包或不在指定位置,文件上传位置为/usr/local/src/'
49 exit 1
50 fi
51 #卸载mariadb52 echo '正在卸载mariadb...'
53 rpm -e --nodeps `rpm -qa|grepmariadb`54 sleep 2
55 echo '卸载完成'
56 #添加mysql账户57 TAR_DIR=/usr/local/src/
58 MYSQL_TAR='mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar'
59 echo '开始安装MySQL,安装版本MySQL-8.0.19'
60 sleep 1
61 echo '添加mysql账户...'
62 if [ `grep 'mysql' /etc/passwd |wc -l ` -ge 1 ];then
63 echo '用户已经存在'
64 else
65 groupadd mysql && useradd -r -g mysql -s /sbin/nologin -M mysql66 echo '用户添加成功'
67 fi
68 #解压MySQL压缩包69 echo '正在解压...'
70 cd $TAR_DIR && tarxf $TAR_DIR$MYSQL_TAR71 #安装MySQL72 echo '正在安装MySQL...'
73 rpm -ivh mysql-community-common-8.0.19-1.el7.x86_64.rpm && rpm -ivh mysql-community-libs-8.0.19-1.el7.x86_64.rpm && rpm -ivh mysql-community-client-8.0.19-1.el7.x86_64.rpm && rpm -ivh mysql-community-server-8.0.19-1.el7.x86_64.rpm --force --nodeps74 if [ $? -ne 0 ];then
75 echo '安装异常,请检查是否安装过mysql,正在退出安装程序'
76 exit 1
77 fi
78 #初始化MySQL79 echo '正在初始化MySQL...'
80 mysqld --initialize81 if [ $? -eq 0 ];then
82 echo '初始化完成'
83 else
84 echo '初始化失败,请检查是否安装libaio依赖'
85 fi
86 #写入my.cnf87 cat << EOF > /etc/my.cnf88 [mysqld]89 # Remove leading # and set to the amount of RAM forthe most important data90 # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.91 # innodb_buffer_pool_size =128M92 #93 # Remove the leading "#"to disable binary logging94 # Binary logging captures changes between backups and is enabled by95 # default. It's default setting is log_bin=binlog
96 # disable_log_bin97 #98 # Remove leading # to set options mainly useful forreporting servers.99 # The server defaults are faster fortransactions and fast SELECTs.100 # Adjust sizes as needed, experiment to findthe optimal values.101 # join_buffer_size =128M102 # sort_buffer_size =2M103 # read_rnd_buffer_size =2M104 #105 # Remove leading # to revert to previous value fordefault_authentication_plugin,106 # this will increase compatibility with older clients. For background, see:107 # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
108 # default-authentication-plugin=mysql_native_password109
110 datadir=/usr/local/mysql/data111 socket=/var/lib/mysql/mysql.sock112
113 log-error=/var/log/mysqld.log114 pid-file=/var/run/mysqld/mysqld.pid115 skip-name-resolve116 default_password_lifetime=42#密码默认42天过期117 password_history=6#存储最近的六次密码118 password_reuse_interval=365#最近六次密码一年内不得重复使用119 EOF120 #创建data目录并启动MySQL121 echo '正在启动MySQL...'
122 mkdir /usr/local/mysql/data -p123 chown -R mysql. /usr/local/mysql124 systemctl start mysqld125 sleep 4
126 echo 'datadir路径为/usr/local/mysql/data'
127 echo 'errorlog路径为/var/log/mysqld.log'
128 #检查MySQL进程是否启动129 MySQLpid=`ss -antlp|grep 3306|wc -l`130 if [ $MySQLpid -ne 0 ];then
131 echo 'MySQL启动成功'
132 else
133 echo 'error,mysql is not running'
134 tail -10f /var/log/mysqld.log135 fi
136 #设置开机自启动137 echo '正在设置自启动...'
138 systemctl enable mysqld139 if [ $? -eq 0 ];then
140 echo '设置自启动成功'
141 else
142 echo '设置自启动失败'
143 fi
144 sleep 1
145 #更改密码安全策略146 echo '正在设置密码策略...'
147 sleep 2
148 OLDPWD=`cat /var/log/mysqld.log |grep password|tail -1 |awk -F"host:" '{print $2}'`149 NEWPWD="ITwh@@$[RANDOM%900+100]"
150 mysql --connect-expired-password -uroot -p"$OLDPWD" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '"$NEWPWD"'" > /dev/null
151 mysql -uroot -p"$NEWPWD" -e "set global validate_password.policy=1;" -e "set global validate_password.length=11;" -e "set global validate_password.mixed_case_count=4;" -e "set global validate_password.number_count=3;" -e "set global validate_password.special_char_count=2;" > /dev/null
152 mysql -uroot -p"$NEWPWD" -e "show variables like 'validate_password%';"
153 sleep 2
154 echo -e "当前密码策略为:\n 1.密码默认42天过期 \n 2.存储最近的六次密码 \n 3.最近六次密码一年内不得重复使用 \n 4.密码最小长度12位 \n 5.密码至少要包含的小写字母个数和大写字母4个 \n 6.密码至少要包含的数字个数4个 \n 7.密码至少要包含的特殊字符数2个\n"
155 sleep 2
156 echo -e "MySQL初始密码为: $NEWPWD \n"
157 echo "修改密码: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';"
158 elif [ $RHversion -eq 6 ];then
159 echo "您使用的系统版本为CentOS $RHversion"
160 sleep 1
161 #检测当前账户162 echo '正在检测用户是否为root'
163 sleep 2
164 user=${USER}165 if [ "$user" != root ];then
166 echo "当前用户不为root,正在退出..."
167 exit 1
168 fi
169 #检测libaio软件包170 echo '正在检测依赖环境...'
171 libaio=`rpm -qa|grep libaio |wc -l`172 libaioverison=`rpm -qa|grep libaio|awk -F"-" '{print $1$2}'`173 if [ $libaio -eq 1 ];then
174 echo "libaio版本为$libaioverison"
175 else
176 echo '没有找到libaio依赖包,正在尝试安装'
177 yum install libaio -y178 if [ $? -eq 0 ];then
179 echo "安装完成"
180 else
181 echo "安装失败,正在退出..."
182 sleep 2
183 exit 1
184 fi
185 fi
186 #检测numactl软件包187 numactl=`rpm -qa|grep numactl|wc -l`188 numactlversion=`rpm -qa|grep numactl|awk -F"-" '{print $1,$2}'`189 if [ $numactl -eq 1 ];then
190 echo "numactl版本为$numactlversion"
191 else
192 echo '没有找到numactl依赖包,正在尝试安装'
193 yum install numactl -y194 if [ $? -eq 0 ];then
195 echo "安装完成"
196 else
197 echo "安装失败,正在退出..."
198 sleep 2
199 exit 1
200 fi
201 fi
202 #检测是否有mysql压缩包203 echo '检测是否有MySQL压缩包...'
204 sleep 2
205 if [ -f "/usr/local/src/mysql-8.0.20-1.el6.x86_64.rpm-bundle.tar" ];then
206 echo '文件存在'
207 sleep 2
208 else
209 echo '您没有上传指定的MySQL压缩包或不在指定位置,文件上传位置为/usr/local/src/'
210 exit 1
211 fi
212 #卸载mariadb213 echo '正在卸载mariadb...'
214 rpm -e --nodeps `rpm -qa|grepmariadb`215 sleep 2
216 echo '卸载完成'
217 #添加mysql账户218 TAR_DIR=/usr/local/src/
219 MYSQL_TAR='mysql-8.0.20-1.el6.x86_64.rpm-bundle.tar'
220 echo '开始安装MySQL,安装版本MySQL-8.0.19'
221 sleep 1
222 echo '添加mysql账户...'
223 if [ `grep 'mysql' /etc/passwd |wc -l ` -ge 1 ];then
224 echo '用户已经存在'
225 else
226 groupadd mysql && useradd -r -g mysql -s /sbin/nologin -M mysql227 echo '用户添加成功'
228 fi
229 #解压MySQL压缩包230 echo '正在解压...'
231 cd $TAR_DIR && tarxf $TAR_DIR$MYSQL_TAR232 #安装MySQL233 echo '正在安装MySQL...'
234 rpm -ivh mysql-community-common-8.0.20-1.el6.x86_64.rpm && rpm -ivh mysql-community-libs-8.0.20-1.el6.x86_64.rpm && rpm -ivh mysql-community-client-8.0.20-1.el6.x86_64.rpm && rpm -ivh mysql-community-server-8.0.20-1.el6.x86_64.rpm --force --nodeps235 if [ $? -ne 0 ];then
236 echo '安装异常,请检查是否安装过mysql,正在退出安装程序'
237 exit 1
238 fi
239 #初始化MySQL240 echo '正在初始化MySQL...'
241 mysqld --initialize242 if [ $? -eq 0 ];then
243 echo '初始化完成'
244 else
245 echo '初始化失败,请检查是否安装libaio依赖'
246 fi
247 #写入my.cnf248 cat << EOF > /etc/my.cnf249 [mysqld]250 # Remove leading # and set to the amount of RAM forthe most important data251 # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.252 # innodb_buffer_pool_size =128M253 #254 # Remove the leading "#"to disable binary logging255 # Binary logging captures changes between backups and is enabled by256 # default. It's default setting is log_bin=binlog
257 # disable_log_bin258 #259 # Remove leading # to set options mainly useful forreporting servers.260 # The server defaults are faster fortransactions and fast SELECTs.261 # Adjust sizes as needed, experiment to findthe optimal values.262 # join_buffer_size =128M263 # sort_buffer_size =2M264 # read_rnd_buffer_size =2M265 #266 # Remove leading # to revert to previous value fordefault_authentication_plugin,267 # this will increase compatibility with older clients. For background, see:268 # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
269 # default-authentication-plugin=mysql_native_password270
271 datadir=/usr/local/mysql/data272 socket=/var/lib/mysql/mysql.sock273
274 log-error=/var/log/mysqld.log275 pid-file=/var/run/mysqld/mysqld.pid276 skip-name-resolve277 default_password_lifetime=42#密码默认42天过期278 password_history=6#存储最近的六次密码279 password_reuse_interval=365#最近六次密码一年内不得重复使用280 EOF281 #创建data目录并启动MySQL282 echo '正在启动MySQL...'
283 mkdir /usr/local/mysql/data -p284 chown -R mysql. /usr/local/mysql285 service mysqld start286 sleep 4
287 echo 'datadir路径为/usr/local/mysql/data'
288 echo 'errorlog路径为/var/log/mysqld.log'
289 #检查MySQL进程是否启动290 MySQLpid=`ss -antlp|grep 3306|wc -l`291 if [ $MySQLpid -ne 0 ];then
292 echo 'MySQL启动成功'
293 else
294 echo 'error,mysql is not running'
295 tail -10f /var/log/mysqld.log296 fi
297 #设置开机自启动298 echo '正在设置自启动...'
299 chkconfig --add mysqld300 chkconfig mysqld on301 if [ $? -eq 0 ];then
302 echo '设置自启动成功'
303 else
304 echo '设置自启动失败'
305 fi
306 sleep 1
307 #更改密码安全策略308 echo '正在设置密码策略...'
309 sleep 2
310 OLDPWD6=`cat /var/log/mysqld.log |grep password|tail -1 |awk -F"host:" '{print $2}'`311 NEWPWD6="ITwh@@$[RANDOM%900+100]"
312 mysql --connect-expired-password -uroot -p"$OLDPWD6" -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '"$NEWPWD6"'" > /dev/null
313 mysql -uroot -p"$NEWPWD6" -e "set global validate_password.policy=1;" -e "set global validate_password.length=11;" -e "set global validate_password.mixed_case_count=4;" -e "set global validate_password.number_count=3;" -e "set global validate_password.special_char_count=2;" > /dev/null
314 mysql -uroot -p"$NEWPWD6" -e "show variables like 'validate_password%';"
315 sleep 2
316 echo -e "当前密码策略为:\n 1.密码默认42天过期 \n 2.存储最近的六次密码 \n 3.最近六次密码一年内不得重复使用 \n 4.密码最小长度12位 \n 5.密码至少要包含的小写字母个数和大写字母4个 \n 6.密码至少要包含的数字个数4个 \n 7.密码至少要包含的特殊字符数2个\n"
317 sleep 2
318 echo -e "MySQL初始密码为: $NEWPWD6 \n"
319 echo "修改密码: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';"
320 else
321 echo '没想好'
322 fi