├── MySQL_check.sh ├── MySQL_install.sh └── README.md /MySQL_check.sh: -------------------------------------------------------------------------------- 1 | ############################################################################################################### 2 | #################### 3 | ### MySQL5.7版本 #### 4 | ### CentOS7.x版本 ### 5 | #################### 6 | LANG=C 7 | #error log 8 | log_error=`cat /etc/my.cnf|grep "log_error"` 9 | log_error=`echo ${log_error#*=}` 10 | #date 11 | date=`mysql -e "select curdate();"` 12 | date=`echo $date|awk '{print $2}'` 13 | date2=`mysql -e "select date_sub(curdate(),interval 1 day);"` 14 | date2=`echo $date2|awk '{print $4}'` 15 | #check mysql server connect 16 | ping=`mysqladmin ping` 17 | #base dir 18 | base=`cat /etc/my.cnf|grep basedir` 19 | base=`echo ${base#*=}` 20 | #data dir 21 | data=`cat /etc/my.cnf | grep datadir` 22 | data=`echo ${data#*=}` 23 | #data free filesystem used 24 | used=`df -h $data` 25 | filesys=`echo $used|awk '{print $8}'` 26 | free=`echo $used|awk '{print $11}'` 27 | used=`echo $used|awk '{print $12}'` 28 | #database uptime 29 | uptime=`mysql -e"SHOW STATUS LIKE '%uptime%'"|awk '/ptime/{ calc = $NF / 3600;print $(NF-1), calc"Hour" }'` 30 | uptime=`echo $uptime|awk '{print $2}'` 31 | #database threads 32 | threads=`mysql -BNe "select count(host) from processlist;" information_schema` 33 | #mysql max_used_connection 34 | max_connect=`mysql -e "show status like '%max_used_connections%';"` 35 | max_connect=`echo $max_connect|awk '{print $4}'` 36 | #mysql aborted_clients 37 | aborted_clients=`mysql -e "show status like '%aborted_clients%';"` 38 | aborted_clients=`echo $aborted_clients|awk '{print $4}'` 39 | #mysql aborted_connects 40 | aborted_connects=`mysql -e "show status like '%aborted_connects%';"` 41 | aborted_connects=`echo $aborted_connects|awk '{print $4}'` 42 | #mysql server id 43 | id=`mysql -e "show variables like 'server_id';"` 44 | id=`echo $id|awk '{print $4}'` 45 | #mysql read_only 46 | reads=`mysql -e "show variables like 'read_only';"` 47 | reads=`echo $reads|awk '{print $4}'` 48 | #mysql max_connections 49 | maxc=`mysql -e "show variables like 'max_connections';"` 50 | maxc=`echo $maxc|awk '{print $4}'` 51 | #mysql max_connect_errors 52 | maxce=`mysql -e "show variables like 'max_connect_errors';"` 53 | maxce=`echo $maxce|awk '{print $4}'` 54 | #mysql wait_timeout 55 | wt=`mysql -e "show variables like 'wait_timeout';"` 56 | wt=`echo $wt|awk '{print $4}'` 57 | s='s' 58 | #mysql skip_name_resolve 59 | snr=`mysql -e "show variables like 'skip_name_resolve';"` 60 | snr=`echo $snr|awk '{print $4}'` 61 | #mysql sync_binlog 62 | sb=`mysql -e "show variables like 'sync_binlog';"` 63 | sb=`echo $sb|awk '{print $4}'` 64 | #mysql expire_logs_days 65 | eld=`mysql -e "show variables like 'expire_logs_days';"` 66 | eld=`echo $eld|awk '{print $4}'` 67 | day='day' 68 | #mysql table_open_cache 69 | toc=`mysql -e "show variables like 'table_open_cache';"` 70 | toc=`echo $toc|awk '{print $4}'` 71 | #mysql query_cache_size 72 | qcs=`mysql -e "show variables like 'query_cache_size';"` 73 | qcs=`echo $qcs|awk '{print $4}'` 74 | let qcs=$qcs/1024/1024 75 | m='M' 76 | #mysql sort_buffer_size 77 | sbs=`mysql -e "show variables like 'sort_buffer_size';"` 78 | sbs=`echo $sbs|awk '{print $4}'` 79 | let sbs=$sbs/1024/1024 80 | m='M' 81 | #mysql read_buffer_size 82 | rbs=`mysql -e "show variables like 'read_buffer_size';"` 83 | rbs=`echo $rbs|awk '{print $4}'` 84 | let rbs=$rbs/1024/1024 85 | m='M' 86 | #mysql join_buffer_size 87 | jbs=`mysql -e "show variables like 'join_buffer_size';"` 88 | jbs=`echo $jbs|awk '{print $4}'` 89 | let jbs=$jbs/1024/1024 90 | m='M' 91 | #mysql tmp_table_size 92 | tts=`mysql -e "show variables like 'tmp_table_size';"` 93 | tts=`echo $tts|awk '{print $4}'` 94 | let tts=$tts/1024/1024 95 | m='M' 96 | #mysql innodb_thread_concurrency 97 | itc=`mysql -e "show variables like 'innodb_thread_concurrency';"` 98 | itc=`echo $itc|awk '{print $4}'` 99 | #mysql innodb_flush_method 100 | ifm=`mysql -e "show variables like 'innodb_flush_method';"` 101 | ifm=`echo $ifm|awk '{print $4}'` 102 | #mysql innodb_file_per_table 103 | ifpt=`mysql -e "show variables like 'innodb_file_per_table';"` 104 | ifpt=`echo $ifpt|awk '{print $4}'` 105 | #mysql innodb_flush_log_at_trx_commit 106 | iflatc=`mysql -e "show variables like 'innodb_flush_log_at_trx_commit';"` 107 | iflatc=`echo $iflatc|awk '{print $4}'` 108 | #mysql innodb_lock_wait_timeout 109 | ilwt=`mysql -e "show variables like 'innodb_lock_wait_timeout';"` 110 | ilwt=`echo $ilwt|awk '{print $4}'` 111 | s='s' 112 | #mysql innodb_open_files 113 | iof=`mysql -e "show variables like 'innodb_open_files';"` 114 | iof=`echo $iof|awk '{print $4}'` 115 | #mysql lower_case_table_names 116 | lctn=`mysql -e "show variables like 'lower_case_table_names';"` 117 | lctn=`echo $lctn|awk '{print $4}'` 118 | #mysql innodb_buffer_pool_size 119 | buffer=`mysql -e "show variables like 'innodb_buffer_pool_size';"` 120 | buffer=`echo $buffer|awk '{print $4}'` 121 | let buffer=$buffer/1024/1024 122 | m="M" 123 | #log_bin_basename 124 | basename1=`mysql -e "show variables like 'log_bin_basename';"` 125 | basename1=`echo $basename1|awk '{print $4}'` 126 | #log_bin_index 127 | index=`mysql -e "show variables like 'log_bin_index';"` 128 | index=`echo $index|awk '{print $4}'` 129 | #mysql binlog 130 | binlog=`mysql -e "show variables like 'log_bin';"` 131 | binlog=`echo $binlog|awk '{print $4}'` 132 | #mysql binlog_format 133 | format=`mysql -e "show variables like 'binlog_format';"` 134 | format=`echo $format|awk '{print $4}'` 135 | #mysql binlog_row_image 136 | image=`mysql -e "show variables like 'binlog_row_image';"` 137 | image=`echo $image|awk '{print $4}'` 138 | #binlog file 139 | file=`mysql -e "show master status;"` 140 | file=`echo $file|awk '{print $6}'` 141 | #binlog Position 142 | pos=`mysql -e "show master status;"` 143 | pos=`echo $pos|awk '{print $7}'` 144 | #mysql slowlog 145 | slow=`mysql -e "show variables like 'slow_query_log';"` 146 | slow=`echo $slow|awk '{print $4}'` 147 | #mysql slow_query_log_file 148 | slowfile=`mysql -e "show variables like 'slow_query_log_file';"` 149 | slowfile=`echo $slowfile|awk '{print $4}'` 150 | #mysql error log 151 | error=`mysql -e "show variables like 'log_error';"` 152 | error=`echo $error|awk '{print $4}'` 153 | #mysql log_timestamps 154 | timestamps=`mysql -e "show variables like 'log_timestamps';"` 155 | timestamps=`echo $timestamps|awk '{print $4}'` 156 | #MySQL Master / Slave 157 | ms=`mysql -e "show slave status\G"` 158 | if [ -z "$ms" ];then 159 | ms="Master" 160 | else 161 | ms="Slave" 162 | fi 163 | #Seconds Behind Master 164 | seconds=`mysql -e "show slave status \G;"|awk '/Seconds_Behind_Master:/{print $2}'` 165 | seconds=`echo $seconds|awk '{print $1}'` 166 | #Slave_IO_Running 167 | io=`mysql -e "show slave status \G;"|awk '/Running:/{print $2}'` 168 | io=`echo $io|awk '{print $1}'` 169 | #Slave_SQL_Running 170 | sql=`mysql -e "show slave status \G;"|awk '/Running:/{print $2}'` 171 | sql=`echo $sql|awk '{print $2}'` 172 | #Master Log File 173 | mlf=`mysql -e "show slave status \G;"|awk '/Master_Log_File:/{print $2}'` 174 | mlf=`echo $mlf|awk '{print $1}'` 175 | #Relay Master Log File 176 | rmlf=`mysql -e "show slave status \G;"|awk '/Relay_Master_Log_File:/{print $2}'` 177 | rmlf=`echo $rmlf|awk '{print $1}'` 178 | #Read Master Log Pos 179 | rmlp=`mysql -e "show slave status \G;"|awk '/Read_Master_Log_Pos:/{print $2}'` 180 | rmlp=`echo $rmlp|awk '{print $1}'` 181 | #Exec Master Log Pos: 182 | emlp=`mysql -e "show slave status \G;"|awk '/Exec_Master_Log_Pos:/{print $2}'` 183 | emlp=`echo $emlp|awk '{print $1}'` 184 | #Qcache_hits 185 | hits=`mysql -e "SHOW STATUS LIKE 'Qcache_hits';"` 186 | hits=`echo $hits|awk '{print $4}'` 187 | #Qcache_inserts 188 | inserts=`mysql -e "SHOW STATUS LIKE 'Qcache_inserts';"` 189 | inserts=`echo $inserts|awk '{print $4}'` 190 | if [ $hits -ne 0 ];then 191 | let x1=$hits-$inserts 192 | let x2=$x1/$hits 193 | qmzl=`echo "scale=1;$x2*100"|bc` 194 | qmzl=`echo ${qmzl%.*}"%"` 195 | else 196 | qmzl=0 197 | qmzl=`echo $qmzl"%"` 198 | fi 199 | #table Com_select 200 | b1=`mysql -e "show global status like 'Handler_read_rnd_next';"` 201 | b2=`echo $b1|awk '{print $4}'` 202 | b3=`mysql -e "show global status like 'com_select';"` 203 | b4=`echo $b3|awk '{print $4}'` 204 | let bsml=$b2/$b4 205 | #innodb read 206 | requests=`mysql -e "SHOW STATUS LIKE 'Innodb_buffer_pool_read_requests';"` 207 | requests=`echo $requests|awk '{print $4}'` 208 | reads=`mysql -e "SHOW STATUS LIKE 'Innodb_buffer_pool_reads';"` 209 | reads=`echo $reads|awk '{print $4}'` 210 | if [ $requests -ne 0 ];then 211 | let i1=$requests-$reads 212 | let i2=$i1/$requests 213 | i2=`echo "scale=2;$i1/$requests"|bc` 214 | imzl=`echo "scale=1;$i2*100"|bc` 215 | imzl=`echo ${imzl%.*}"%"` 216 | else 217 | imzl=0 218 | imzl=`echo $imzl"%` 219 | fi 220 | 221 | ############################################################################################################### 222 | 223 | echo "

OS 文件系统

" 224 | echo "

" 225 | echo "

`df -h`
" 226 | echo "


返回页首" 227 | echo "
" 228 | 229 | echo "

MySQL 数据库版本

" 230 | echo "

" 231 | echo "

`mysqladmin version`
" 232 | echo "


返回页首" 233 | echo "
" 234 | 235 | echo "

MySQL 数据库基本状态信息

" 236 | echo "

" 237 | echo "

`echo "数据库连接状态:             $ping"`
" 238 | echo "
`echo "数据库启动时间:             $uptime"`
" 239 | echo "
`echo "数据库当前连接数:           $threads"`
" 240 | echo "
`echo "数据库使用的连接最大个数:   $max_connect"`
" 241 | echo "
`echo "数据库放弃的连接个数:       $aborted_clients"`
" 242 | echo "
`echo "数据库尝试连接失败次数:     $aborted_connects"`
" 243 | echo "
`echo "数据库软件目录:             $base"`
" 244 | echo "
`echo "数据目录:                   $data"`
" 245 | echo "
`echo "使用的文件系统:             $filesys"`
" 246 | echo "
`echo "文件系统使用率:             $used"`
" 247 | echo "
`echo "剩余空间:                   $free"`
" 248 | echo "


返回页首" 249 | echo "
" 250 | 251 | echo "

MySQL 数据库重要参数

" 252 | echo "

" 253 | echo "

`echo "Server_Id:                           $id"`
" 254 | echo "
`echo "Read_Only:                           $reads"`
" 255 | echo "
`echo "Max_Connections:                     $maxc"`
" 256 | echo "
`echo "Max_Connect_Errors:                  $maxce"`
" 257 | echo "
`echo "Wait_Timeout:                        $wt$s"`
" 258 | echo "
`echo "Skip_Name_Resolve:                   $snr"`
" 259 | echo "
`echo "Sync_Binlog:                         $sb"`
" 260 | echo "
`echo "Expire_Logs_Days:                    $eld$day"`
" 261 | echo "
`echo "Table_Open_Cache:                    $toc"`
" 262 | echo "
`echo "Query_Cache_Size:                    $qcs$m"`
" 263 | echo "
`echo "Sort_Buffer_Size:                    $sbs$m"`
" 264 | echo "
`echo "Read_Buffer_Size:                    $rbs$m"`
" 265 | echo "
`echo "Join_Buffer_Size:                    $jbs$m"`
" 266 | echo "
`echo "Tmp_Table_Size:                      $tts$m"`
" 267 | echo "
`echo "Lower_Case_Table_Names:              $lctn"`
" 268 | echo "
`echo "Innodb_Buffer_Pool_Size:             $buffer$m"`
" 269 | echo "
`echo "Innodb_Thread_Concurrency:           $itc"`
" 270 | echo "
`echo "Innodb_Flush_Method:                 $ifm"`
" 271 | echo "
`echo "Innodb_File_Per_Table:               $ifpt"`
" 272 | echo "
`echo "Innodb_Flush_Log_At_Trx_Commit:      $iflatc"`
" 273 | echo "
`echo "Innodb_Lock_Wait_Timeout:            $ilwt$s"`
" 274 | echo "
`echo "Innodb_Open_Files:                   $iof"`
" 275 | echo "
`echo "Log_Bin:                             $binlog"`
" 276 | echo "
`echo "Log_Bin_Basename:                    $basename1"`
" 277 | echo "
`echo "Log_Bin_Index:                       $index"`
" 278 | echo "
`echo "Binlog_Format:                       $format"`
" 279 | echo "
`echo "Binlog_Row_Image:                    $image"`
" 280 | echo "
`echo "Binlog File:                         $file"`
" 281 | echo "
`echo "Binlog Position:                     $pos"`
" 282 | echo "
`echo "Log_Timestamps:                      $timestamps"`
" 283 | echo "
`echo "Slow_Query_Log:                      $slow"`
" 284 | echo "
`echo "Slow_Query_Log_File:                 $slowfile"`
" 285 | echo "
`echo "Log_Error:                           $error"`
" 286 | echo "


返回页首" 287 | echo "
" 288 | 289 | echo "

MySQL 数据库主从状态

" 290 | echo "

" 291 | echo "

`echo "Master / Slave:           $ms"`
" 292 | echo "
`echo "Slave IO Running:         $io"`
" 293 | echo "
`echo "Slave SQL Running:        $sql"`
" 294 | echo "
`echo "Master Log File:          $mlf"`
" 295 | echo "
`echo "Relay Master Log File:    $rmlf"`
" 296 | echo "
`echo "Read Master Log Pos:      $rmlp"`
" 297 | echo "
`echo "Exec Master Log Pos:      $emlp"`
" 298 | echo "
`echo "Seconds Behind Master:    $seconds"`
" 299 | echo "


返回页首" 300 | echo "
" 301 | 302 | echo "

MySQL 数据库大小

" 303 | echo "

" 304 | echo "

`mysql -e 'select table_schema,round(sum(data_length+index_length)/1024/1024,2) as "Size(M)" from information_schema.tables group by table_schema order by round(sum(data_length+index_length)/1024/1024,2) desc\G'`
" 305 | echo "


返回页首" 306 | echo "
" 307 | 308 | echo "

MySQL 数据库中的大表(TOP 10)

" 309 | echo "

" 310 | echo "

`mysql -e 'select table_schema,table_name,round((sum(DATA_LENGTH)+sum(INDEX_LENGTH))/1024/1024,2) "Size(M)" from information_schema.tables group by table_schema,table_name order by round((sum(DATA_LENGTH)+sum(INDEX_LENGTH))/1024/1024,2) desc limit 10\G'`
" 311 | echo "


返回页首" 312 | echo "
" 313 | 314 | echo "

MySQL 数据库未建主键索引的表

" 315 | echo "

" 316 | echo "

`mysql -e "SELECT distinct table_name,table_schema FROM information_schema.columns WHERE table_schema not in ('sys','information_schema','performance_schema','mysql') AND table_name not in (select distinct table_name from information_schema.columns where column_key='PRI')\G"`
" 317 | echo "


返回页首" 318 | echo "
" 319 | 320 | echo "

MySQL 数据库从未使用过的索引

" 321 | echo "

" 322 | echo "

`mysql -e "select * from sys.schema_unused_indexes\G"`
" 323 | echo "


返回页首" 324 | echo "
" 325 | 326 | echo "

MySQL 数据库锁统计

" 327 | echo "

" 328 | echo "

`mysql -e "show status like 'table_locks_%'\G"`
" 329 | echo "


返回页首" 330 | echo "
" 331 | 332 | echo "

MySQL 数据库缓存命中率

" 333 | echo "

" 334 | echo "

`mysql -e "SHOW STATUS LIKE 'Qcache%'\G"`
" 335 | echo "
`echo "查询缓存命中率大约为:          $qmzl"`
" 336 | echo "


返回页首" 337 | echo "
" 338 | 339 | echo "

MySQL 数据库Innodb中Read命中率

" 340 | echo "

" 341 | echo "

`mysql -e "show status like 'Innodb_buffer_pool_%'\G"`
" 342 | echo "
`echo "Innodb命中率大约为:          $imzl"`
" 343 | echo "


返回页首" 344 | echo "
" 345 | 346 | echo "

MySQL 数据库临时表

" 347 | echo "

" 348 | echo "

`mysql -e "Show status like '%tmp%'\G"`
" 349 | echo "


返回页首" 350 | echo "
" 351 | 352 | echo "

MySQL 数据库全表扫描情况

" 353 | echo "

" 354 | echo "

`mysql -e "show global status like 'handler_read%'\G"`
" 355 | echo "


返回页首" 356 | echo "
" 357 | 358 | echo "

MySQL 数据库备份

" 359 | echo "

" 360 | echo "

`find /mysql/myback/* -mtime -2`
" 361 | echo "


返回页首" 362 | echo "
" 363 | 364 | echo "

MySQL 数据库日志错误输出

" 365 | echo "

" 366 | echo "

`cat $log_error|grep $date2|grep 'ERROR'`
" 367 | echo "
`cat $log_error|grep $date|grep 'ERROR'`
" 368 | echo "


返回页首" 369 | echo "
" 370 | 371 | echo "

MySQL 数据库error日志

" 372 | echo "

" 373 | echo "

`cat $log_error|grep $date2`
" 374 | echo "
`cat $log_error|grep $date`
" 375 | echo "


返回页首" 376 | echo "
" -------------------------------------------------------------------------------- /MySQL_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #################### 3 | ### MySQL5.7版本 #### 4 | ### CentOS7.x版本 ### 5 | #################### 6 | 7 | #####Install Failed Delete MySQL##### 8 | #####rm -rf $base/* 9 | #####rm -rf $data/* 10 | #####rm -rf /etc/init.d/mysqld 11 | #####rm -rf /usr/local/mysql 12 | clear 13 | 14 | #check /etc/hosts 15 | echo "Check /etc/hosts" 16 | hostname=`hostname` 17 | host=`cat /etc/hosts|grep $hostname` 18 | if [ -z "$host" ];then 19 | echo 'check /etc/hosts IP hostname Failed!' 20 | exit 0 21 | else 22 | echo 'check /etc/hosts IP hostname success!' 23 | rehost=`echo $host|awk '{print $1}'` 24 | id1=`echo ${rehost#*.}` 25 | id2=`echo ${id1#*.}` 26 | id=`echo $id2|sed 's/\.//g'` 27 | ##check memory 28 | mem=`grep MemTotal /proc/meminfo|awk '{print $2}'` 29 | let innobufsiz=$mem*7/10/1024 30 | let mem=$mem/1024 31 | echo " " 32 | echo "##########################################" 33 | echo "# 1,Default Quick Install #" 34 | echo "# 2,Custom Install #" 35 | echo "# 3,Cancel Install #" 36 | echo "# Version:MySQL 5.7.18 #" 37 | echo "##########################################" 38 | echo " " 39 | 40 | #####please input : 1,Default Install 2,Custom Install 3,Cancel Install####### 41 | read -p "Please Select [1-3] To Continue (Default 1): " which 42 | which=${which:=1} 43 | while true 44 | do 45 | case "$which" in 46 | 1) 47 | ################Default Quick Install################ 48 | 49 | ##Define variables 50 | port=3306 51 | base='/mysql/mysoft' 52 | data='/mysql/mydata' 53 | ser_id=$id 54 | char='utf8' 55 | innodb=$innobufsiz 56 | azlj=`pwd` 57 | ##create user 58 | usero=`id mysql|awk '{print $1}'` 59 | if [ -z "$usero" ];then 60 | /usr/sbin/groupadd -g 600 mysql 61 | /usr/sbin/useradd -u 600 -g mysql mysql 62 | echo mysql | passwd mysql --stdin 1>/dev/null 63 | echo "" 64 | id mysql 65 | echo "" 66 | else 67 | echo "" 68 | id mysql 69 | echo "" 70 | echo -n "Do you want to use users (mysql) ("no" delet user and rebuild)[y|n] (Default y): " 71 | read cho 72 | cho=${cho:='y'} 73 | echo "" 74 | while true 75 | do 76 | case $cho in 77 | 78 | N|NO|n|no) 79 | /usr/sbin/userdel -r mysql 2>/dev/null 80 | /usr/sbin/groupdel mysql 2>/dev/null 81 | /usr/sbin/groupadd -g 600 mysql 82 | /usr/sbin/useradd -u 600 -g mysql mysql 83 | echo mysql | passwd mysql --stdin 1>/dev/null 84 | id mysql 85 | echo "" 86 | break 87 | ;; 88 | Y|YES|y|yes) 89 | id mysql 90 | echo mysql | passwd mysql --stdin 1>/dev/null 91 | echo "" 92 | break 93 | ;; 94 | exit|EXIT) 95 | exit 96 | break 97 | ;; 98 | *) 99 | echo -n "Do you want to use users (mysql) ("no" delet user and rebuild)[y|n] (Default y): " 100 | read cho 101 | cho=${cho:='y'} 102 | echo "" 103 | ;; 104 | esac 105 | done 106 | fi 107 | 108 | ####################os check#################### 109 | echo "Check $base and $data" 110 | mysql=`df -hm| grep -w $base | awk '{print $(NF-2)}'` 111 | if [ ! -n "$mysql" ];then 112 | echo "$base not have lv" 113 | if [ ! -d "$base" ];then 114 | echo "$base dose not exist;" 115 | echo -n "please press y to create $base,n to quit (Y/N) (Default Y): " 116 | read cho 117 | cho=${cho:='y'} 118 | echo "" 119 | while true 120 | do 121 | case $cho in 122 | N|NO|n|no) 123 | echo "Please create $base !!!" 124 | echo "" 125 | exit 126 | ;; 127 | Y|YES|y|yes) 128 | mkdir -p $base 129 | break 130 | ;; 131 | esac 132 | done 133 | fi 134 | else 135 | if [ "$mysql" -lt 29000 ];then 136 | echo '$base lv must >=30G' 137 | fi 138 | fi 139 | mydata=`df -hm| grep -w $data | awk '{print $(NF-2)}'` 140 | if [ ! -n "$mydata" ];then 141 | echo "$data not have lv" 142 | if [ ! -d "$data" ];then 143 | echo "$data dose not exist;" 144 | echo -n "please press y to create $data,n to quit (Y/N) (Default Y): " 145 | read cho 146 | cho=${cho:='y'} 147 | echo "" 148 | while true 149 | do 150 | case $cho in 151 | N|NO|n|no) 152 | echo "Please create $data !!!" 153 | echo "" 154 | exit 155 | ;; 156 | Y|YES|y|yes) 157 | mkdir -p $data 158 | break 159 | ;; 160 | esac 161 | done 162 | fi 163 | else 164 | if [ "$mydata" -lt 99000 ];then 165 | echo '$data lv must >=100G' 166 | fi 167 | fi 168 | echo " " 169 | ##osversion 170 | os=`lsb_release -a|grep Description` 171 | v_version=`echo ${os#*:}` 172 | 173 | ##check old mysql 174 | echo "Check Old Mysql" 175 | rpm=`rpm -qa | grep mysql` 176 | if [ -z "$rpm" ];then 177 | echo "check old mysql success!" 178 | else 179 | rpm -e $rpm --nodeps 180 | echo "check old mysql: $rpm delete success!" 181 | fi 182 | echo " " 183 | 184 | ##print message 185 | echo "|--------------------------------------------------------------------|" 186 | echo " Os Version: $v_version " 187 | echo " MemTotal: $mem M " 188 | echo " BaseDir: $base " 189 | echo " DataDir: $data/$port " 190 | echo " Port : $port " 191 | echo " Server Id: $ser_id " 192 | echo " Defalut Character: $char " 193 | echo " Innodb_buffer_pool_size: $innodb M " 194 | echo " Host Ipaddr: $rehost " 195 | echo "|--------------------------------------------------------------------|" 196 | 197 | echo " " 198 | echo -n "please press y to continue,n to quit (Y/N) (Default Y): " 199 | read cho 200 | cho=${cho:='y'} 201 | echo "" 202 | while true 203 | do 204 | case $cho in 205 | 206 | N|NO|n|no) 207 | 208 | echo "Thanks!" 209 | echo "" 210 | break 211 | ;; 212 | Y|YES|y|yes) 213 | ##new directory 214 | mkdir -p $data/$port/data 215 | mkdir -p $data/$port/log 216 | mkdir -p $data/$port/binlog 217 | mkdir -p $data/$port/tmp 218 | 219 | ##edit limits.conf 220 | cat >>/etc/security/limits.conf << END 221 | mysql hard nofile 65535 222 | mysql soft nofile 65535 223 | END 224 | 225 | ##edit .bash_profile 226 | PROFILES="/home/mysql/.bash_profile" 227 | for PROFILE in $PROFILES ; do 228 | if [ -f "$PROFILE" ] ; then 229 | if [ -z "$(grep "MySQL" $PROFILE)" ] ; then 230 | cat >>$PROFILE << END 231 | #MySQL 232 | export MYSQL_HOME=$base 233 | export PATH=\$MYSQL_HOME/mysql5.7/bin:\$PATH 234 | END 235 | echo "$PROFILE parameters : success" 236 | else 237 | echo "$PROFILE parameters : already existed" 238 | fi 239 | else 240 | echo "$0: $PROFILE not found " 241 | fi 242 | done 243 | ##install software 244 | cd $azlj 245 | tar -xf mysql*5.7*tar* -C $base 246 | cd $base 247 | tar xf mysql-5.7*tar.gz 248 | ln -s mysql-5.7*-x86_64 mysql5.7 249 | chown -R mysql:mysql $base 250 | chown -R mysql:mysql $data 251 | chmod -R 755 $data 252 | #cd /usr/local 253 | #ln -s $base/mysql5.7 /usr/local/mysql 254 | rm -rf /etc/my.cnf 255 | M="M" 256 | cnf="/etc/my.cnf" 257 | cat >>$cnf << END 258 | [client] 259 | port = $port 260 | socket = $data/$port/mysql.sock 261 | 262 | [mysql] 263 | no-auto-rehash 264 | prompt=(\\u@\\h) [\\d]>\\_ 265 | 266 | [mysqld] 267 | # basic settings # 268 | server_id = $ser_id 269 | user = mysql 270 | port = $port 271 | basedir = $base/mysql5.7 272 | datadir = $data/$port/data 273 | socket = $data/$port/mysql.sock 274 | pid-file = $data/$port/mysql.pid 275 | log_error = $data/$port/log/error.log 276 | sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" 277 | autocommit = 1 278 | character_set_server=$char 279 | transaction_isolation = READ-COMMITTED 280 | explicit_defaults_for_timestamp = 1 281 | max_allowed_packet = 16777216 282 | event_scheduler = 1 283 | tmpdir = $data/$port/tmp 284 | log_timestamps=system 285 | lower_case_table_names = 1 286 | 287 | # connection # 288 | interactive_timeout = 43200 289 | wait_timeout = 43200 290 | lock_wait_timeout = 43200 291 | skip_name_resolve = 1 292 | max_connections = 2000 293 | max_connect_errors = 100000 294 | 295 | # table cache performance settings # 296 | table_open_cache = 4096 297 | table_definition_cache = 4096 298 | table_open_cache_instances = 64 299 | 300 | # session memory settings # 301 | read_buffer_size = 16M 302 | read_rnd_buffer_size = 32M 303 | sort_buffer_size = 32M 304 | tmp_table_size = 64M 305 | join_buffer_size = 128M 306 | thread_cache_size = 64 307 | 308 | # log settings # 309 | slow_query_log = 1 310 | slow_query_log_file = $data/$port/log/slow.log 311 | log_queries_not_using_indexes = 1 312 | log_slow_admin_statements = 1 313 | log_slow_slave_statements = 1 314 | log_throttle_queries_not_using_indexes = 10 315 | expire_logs_days = 7 316 | long_query_time = 2 317 | min_examined_row_limit = 100 318 | binlog-rows-query-log-events = 1 319 | log-bin-trust-function-creators = 1 320 | max_binlog_size = 512M 321 | 322 | # InnoDB settings # 323 | innodb_page_size = 16384 324 | innodb_data_file_path = ibdata1:1G:autoextend 325 | innodb_buffer_pool_size = $innodb$M 326 | innodb_buffer_pool_instances = 16 327 | innodb_buffer_pool_load_at_startup = 1 328 | innodb_buffer_pool_dump_at_shutdown = 1 329 | innodb_lru_scan_depth = 4096 330 | innodb_lock_wait_timeout = 50 331 | innodb_io_capacity = 10000 332 | innodb_io_capacity_max = 20000 333 | innodb_flush_method = O_DIRECT 334 | innodb_file_format = Barracuda 335 | innodb_file_format_max = Barracuda 336 | innodb_undo_logs = 128 337 | innodb_undo_tablespaces = 3 338 | innodb_flush_neighbors = 0 339 | innodb_log_buffer_size = 16777216 340 | innodb_log_file_size = 1048576000 341 | innodb_log_files_in_group = 3 342 | innodb_purge_threads = 4 343 | innodb_large_prefix = 1 344 | innodb_thread_concurrency = 64 345 | innodb_print_all_deadlocks = 1 346 | innodb_strict_mode = 1 347 | innodb_sort_buffer_size = 67108864 348 | innodb_write_io_threads = 16 349 | innodb_read_io_threads = 16 350 | innodb_file_per_table = 1 351 | innodb_stats_persistent_sample_pages = 64 352 | innodb_autoinc_lock_mode = 2 353 | innodb_online_alter_log_max_size = 1G 354 | innodb_open_files = 4096 355 | innodb_flush_log_at_trx_commit = 1 356 | 357 | # Myisam settings # 358 | myisam_max_sort_file_size=512M 359 | myisam_sort_buffer_size =8M 360 | 361 | # replication settings # 362 | #read_only = 1 363 | skip_slave_start = 1 364 | slave_parallel_workers = 4 365 | slave_parallel_type = 'LOGICAL_CLOCK' 366 | slave_preserve_commit_order = on 367 | master_info_repository = table 368 | relay_log_info_repository = table 369 | sync_binlog = 1 370 | gtid_mode = on 371 | enforce_gtid_consistency = 1 372 | log-slave-updates = 1 373 | log_bin = $data/$port/binlog/mysql-bin 374 | log_bin_index = $data/$port/binlog/binlog.index 375 | binlog_format = row 376 | binlog_row_image = minimal 377 | binlog_rows_query_log_events = 1 378 | #relay_log_index = $data/$port/binlog/relaylog.index 379 | #relay_log = $data/$port/binlog/relay.log 380 | #relay_log_recovery = 1 381 | #slave_skip_errors = ddl_exist_errors 382 | #slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN' 383 | 384 | # semi sync replication settings # 385 | #plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave.so' 386 | #rpl_semi_sync_master_enabled = 1 387 | #rpl_semi_sync_master_timeout = 3000 388 | #rpl_semi_sync_slave_enabled= 1 389 | 390 | # password plugin # 391 | #validate_password_policy = strong 392 | #validate-password = force_plus_permanent 393 | 394 | END 395 | chown mysql:mysql /etc/my.cnf 396 | $base/mysql5.7/bin/mysqld --initialize --user=mysql 397 | cd $base/mysql5.7/support-files/ 398 | cp mysql.server /etc/init.d/mysqld 399 | chkconfig --add mysqld 400 | chkconfig --level 345 mysqld on 401 | service mysqld start 402 | pass=`cat $data/$port/log/error.log | grep "A temporary password is" | awk '{print $NF}'` 403 | sed -i "/\[client\]/a\user=root" /etc/my.cnf 404 | sed -i "/\user=/a\password='$pass'" /etc/my.cnf 405 | cat >>/etc/profile </dev/null 2>/dev/null 413 | mysql -uroot -pmysql -e "flush privileges;">/dev/null 2>/dev/null 414 | mysql -umysqladmin -pmysql -e "create user @'%' identified by '';">/dev/null 2>/dev/null 415 | mysql -umysqladmin -pmysql -e "grant process,replication client on *.* to @'%';">/dev/null 2>/dev/null 416 | mysql -umysqladmin -pmysql -e "grant select on sys.* to @'%';">/dev/null 2>/dev/null 417 | mysql -umysqladmin -pmysql -e "grant select on performance_schema.* to @'%';">/dev/null 2>/dev/null 418 | mysql -umysqladmin -pmysql -e "create user tivoli@'%' identified by 'tivoli';">/dev/null 2>/dev/null 419 | mysql -umysqladmin -pmysql -e "grant process,replication client on *.* to tivoli@'%';">/dev/null 2>/dev/null 420 | mysql -umysqladmin -pmysql -e "grant select on sys.* to tivoli@'%';">/dev/null 2>/dev/null 421 | mysql -umysqladmin -pmysql -e "grant select on performance_schema.* to tivoli@'%';">/dev/null 2>/dev/null 422 | mysql -umysqladmin -pmysql -e "create user sjwh@'%' identified by 'sjwh';">/dev/null 2>/dev/null 423 | mysql -umysqladmin -pmysql -e "grant SELECT, UPDATE, INSERT, DELETE, CREATE, DROP, RELOAD, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES,CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE on *.* to sjwh@'%';">/dev/null 2>/dev/null 424 | sed -i '$d' /etc/profile 425 | source /etc/profile 426 | sed -i "/\[client\]/a\user=" /etc/my.cnf 427 | sed -i "/\user=/a\password=" /etc/my.cnf 428 | suce=`ps -ef | grep mysqld|wc -l` 429 | if [ $suce -gt 2 ] ; then 430 | echo "*******`date`*******" 431 | echo "**********Install Sucessful!**********" 432 | echo "******* MySQL User: mysqladmin ****" 433 | echo "******* User Password: mysql ******" 434 | echo "**************************************" 435 | else 436 | echo "*******`date`*******" 437 | echo "***Install Failed,Please Check!***" 438 | echo "**********************************" 439 | fi 440 | rm -rf /var/lock/subsys/mysql 441 | break 442 | ;; 443 | exit|EXIT) 444 | exit 445 | break 446 | ;; 447 | *) 448 | echo -n "please press y to continue,n to quit (Y/N):" 449 | read cho 450 | echo "" 451 | ;; 452 | esac 453 | done 454 | break 455 | ;; 456 | 2) 457 | ################Default Quick Install################ 458 | 459 | ##Define variables 460 | read -p "Please Input MySQL Port (Default 3306): " port 461 | port=${port:=3306} 462 | read -p "Please Input MySQL BaseDir (Default /mysql/mysoft): " base 463 | base=${base:='/mysql/mysoft'} 464 | read -p "Please Input MySQL DataDir (Default /mysql/mydata): " data 465 | data=${data:='/mysql/mydata'} 466 | read -p "Please Input MySQL Server_Id (Default $id): " ser_id 467 | ser_id=${ser_id:=$id} 468 | read -p "Please Input MySQL Default Character (Default utf8): " char 469 | char=${char:='utf8'} 470 | read -p "Please Input MySQL Innodb_Buffer_size (Default $innobufsiz M): " innodb 471 | innodb=${innodb:=$innobufsiz} 472 | azlj=`pwd` 473 | ##create user 474 | usero=`id mysql|awk '{print $1}'` 475 | if [ -z "$usero" ];then 476 | /usr/sbin/groupadd -g 600 mysql 477 | /usr/sbin/useradd -u 600 -g mysql mysql 478 | echo mysql | passwd mysql --stdin 1>/dev/null 479 | echo "" 480 | id mysql 481 | echo "" 482 | else 483 | echo "" 484 | id mysql 485 | echo "" 486 | echo -n "Do you want to use users (mysql) ("no" delet user and rebuild)[y|n] (Default y): " 487 | read cho 488 | cho=${cho:='y'} 489 | echo "" 490 | while true 491 | do 492 | case $cho in 493 | 494 | N|NO|n|no) 495 | /usr/sbin/userdel -r mysql 2>/dev/null 496 | /usr/sbin/groupdel mysql 2>/dev/null 497 | /usr/sbin/groupadd -g 600 mysql 498 | /usr/sbin/useradd -u 600 -g mysql mysql 499 | echo mysql | passwd mysql --stdin 1>/dev/null 500 | id mysql 501 | echo "" 502 | break 503 | ;; 504 | Y|YES|y|yes) 505 | id mysql 506 | echo mysql | passwd mysql --stdin 1>/dev/null 507 | echo "" 508 | break 509 | ;; 510 | exit|EXIT) 511 | exit 512 | break 513 | ;; 514 | *) 515 | echo -n "Do you want to use users (mysql) ("no" delet user and rebuild)[y|n] (Default y): " 516 | read cho 517 | cho=${cho:='y'} 518 | echo "" 519 | ;; 520 | esac 521 | done 522 | fi 523 | 524 | ####################os check#################### 525 | echo "Check $base and $data" 526 | mysql=`df -hm| grep -w $base | awk '{print $(NF-2)}'` 527 | if [ ! -n "$mysql" ];then 528 | echo "$base not have lv" 529 | if [ ! -d "$base" ];then 530 | echo "$base dose not exist;" 531 | echo -n "please press y to create $base,n to quit (Y/N) (Default Y): " 532 | read cho 533 | cho=${cho:='y'} 534 | echo "" 535 | while true 536 | do 537 | case $cho in 538 | N|NO|n|no) 539 | echo "Please create $base !!!" 540 | echo "" 541 | exit 542 | ;; 543 | Y|YES|y|yes) 544 | mkdir -p $base 545 | break 546 | ;; 547 | esac 548 | done 549 | fi 550 | else 551 | if [ "$mysql" -lt 29000 ];then 552 | echo '$base lv must >=30G' 553 | fi 554 | fi 555 | mydata=`df -hm| grep -w $data | awk '{print $(NF-2)}'` 556 | if [ ! -n "$mydata" ];then 557 | echo "$data not have lv" 558 | if [ ! -d "$data" ];then 559 | echo "$data dose not exist;" 560 | echo -n "please press y to create $data,n to quit (Y/N) (Default Y): " 561 | read cho 562 | cho=${cho:='y'} 563 | echo "" 564 | while true 565 | do 566 | case $cho in 567 | N|NO|n|no) 568 | echo "Please create $data !!!" 569 | echo "" 570 | exit 571 | ;; 572 | Y|YES|y|yes) 573 | mkdir -p $data 574 | break 575 | ;; 576 | esac 577 | done 578 | fi 579 | else 580 | if [ "$mydata" -lt 99000 ];then 581 | echo '$data lv must >=100G' 582 | fi 583 | fi 584 | echo " " 585 | ##osversion 586 | os=`lsb_release -a|grep Description` 587 | v_version=`echo ${os#*:}` 588 | 589 | ##check old mysql 590 | echo "Check Old Mysql" 591 | rpm=`rpm -qa | grep mysql` 592 | if [ -z "$rpm" ];then 593 | echo "check old mysql success!" 594 | else 595 | rpm -e $rpm --nodeps 596 | echo "check old mysql: $rpm delete success!" 597 | fi 598 | echo " " 599 | 600 | ##print message 601 | echo "|--------------------------------------------------------------------|" 602 | echo " Os Version: $v_version " 603 | echo " MemTotal: $mem M " 604 | echo " BaseDir: $base " 605 | echo " DataDir: $data " 606 | echo " Port : $port " 607 | echo " Server Id: $ser_id " 608 | echo " Defalut Character: $char " 609 | echo " Innodb_buffer_pool_size: $innodb M " 610 | echo " Host Ipaddr: $rehost " 611 | echo "|--------------------------------------------------------------------|" 612 | 613 | echo " " 614 | echo -n "please press y to continue,n to quit (Y/N) (Default Y): " 615 | read cho 616 | cho=${cho:='y'} 617 | echo "" 618 | while true 619 | do 620 | case $cho in 621 | 622 | N|NO|n|no) 623 | 624 | echo "Thanks!" 625 | echo "" 626 | break 627 | ;; 628 | Y|YES|y|yes) 629 | ##new directory 630 | mkdir -p $data/data 631 | mkdir -p $data/log 632 | mkdir -p $data/binlog 633 | mkdir -p $data/tmp 634 | 635 | ##edit limits.conf 636 | cat >>/etc/security/limits.conf << END 637 | mysql hard nofile 65535 638 | mysql soft nofile 65535 639 | END 640 | 641 | ##edit .bash_profile 642 | PROFILES="/home/mysql/.bash_profile" 643 | for PROFILE in $PROFILES ; do 644 | if [ -f "$PROFILE" ] ; then 645 | if [ -z "$(grep "MySQL" $PROFILE)" ] ; then 646 | cat >>$PROFILE << END 647 | #MySQL 648 | export MYSQL_HOME=$base 649 | export PATH=\$MYSQL_HOME/mysql5.7/bin:\$PATH 650 | END 651 | echo "$PROFILE parameters : success" 652 | else 653 | echo "$PROFILE parameters : already existed" 654 | fi 655 | else 656 | echo "$0: $PROFILE not found " 657 | fi 658 | done 659 | ##install software 660 | cd $azlj 661 | tar -xf mysql*5.7*tar* -C $base 662 | cd $base 663 | tar xf mysql-5.7*-x86_64.tar.gz 664 | ln -s mysql-5.7*-x86_64 mysql5.7 665 | chown -R mysql:mysql $base 666 | chown -R mysql:mysql $data 667 | chmod -R 755 $data 668 | #cd /usr/local 669 | #ln -s $base/mysql5.7 /usr/local/mysql 670 | rm -rf /etc/my.cnf 671 | M="M" 672 | cnf="/etc/my.cnf" 673 | cat >>$cnf << END 674 | [client] 675 | port = $port 676 | socket = $data/mysql.sock 677 | 678 | [mysql] 679 | no-auto-rehash 680 | prompt=(\\u@\\h) [\\d]>\\_ 681 | 682 | [mysqld] 683 | # basic settings # 684 | server_id = $ser_id 685 | user = mysql 686 | port = $port 687 | basedir = $base/mysql5.7 688 | datadir = $data/data 689 | socket = $data/mysql.sock 690 | pid-file = $data/mysql.pid 691 | log_error = $data/log/error.log 692 | sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" 693 | autocommit = 1 694 | character_set_server=$char 695 | transaction_isolation = READ-COMMITTED 696 | explicit_defaults_for_timestamp = 1 697 | max_allowed_packet = 16777216 698 | event_scheduler = 1 699 | tmpdir = $data/tmp 700 | log_timestamps=system 701 | lower_case_table_names = 1 702 | 703 | # connection # 704 | interactive_timeout = 43200 705 | wait_timeout = 43200 706 | lock_wait_timeout = 43200 707 | skip_name_resolve = 1 708 | max_connections = 2000 709 | max_connect_errors = 100000 710 | 711 | # table cache performance settings # 712 | table_open_cache = 4096 713 | table_definition_cache = 4096 714 | table_open_cache_instances = 64 715 | 716 | # session memory settings # 717 | read_buffer_size = 16M 718 | read_rnd_buffer_size = 32M 719 | sort_buffer_size = 32M 720 | tmp_table_size = 64M 721 | join_buffer_size = 128M 722 | thread_cache_size = 64 723 | 724 | # log settings # 725 | slow_query_log = 1 726 | slow_query_log_file = $data/log/slow.log 727 | log_queries_not_using_indexes = 1 728 | log_slow_admin_statements = 1 729 | log_slow_slave_statements = 1 730 | log_throttle_queries_not_using_indexes = 10 731 | expire_logs_days = 7 732 | long_query_time = 2 733 | min_examined_row_limit = 100 734 | binlog-rows-query-log-events = 1 735 | log-bin-trust-function-creators = 1 736 | max_binlog_size = 512M 737 | 738 | # InnoDB settings # 739 | innodb_page_size = 16384 740 | innodb_data_file_path = ibdata1:1G:autoextend 741 | innodb_buffer_pool_size = $innodb$M 742 | innodb_buffer_pool_instances = 16 743 | innodb_buffer_pool_load_at_startup = 1 744 | innodb_buffer_pool_dump_at_shutdown = 1 745 | innodb_lru_scan_depth = 4096 746 | innodb_lock_wait_timeout = 50 747 | innodb_io_capacity = 10000 748 | innodb_io_capacity_max = 20000 749 | innodb_flush_method = O_DIRECT 750 | innodb_file_format = Barracuda 751 | innodb_file_format_max = Barracuda 752 | innodb_undo_logs = 128 753 | innodb_undo_tablespaces = 3 754 | innodb_flush_neighbors = 0 755 | innodb_log_buffer_size = 16777216 756 | innodb_log_file_size = 1048576000 757 | innodb_log_files_in_group = 3 758 | innodb_purge_threads = 4 759 | innodb_large_prefix = 1 760 | innodb_thread_concurrency = 64 761 | innodb_print_all_deadlocks = 1 762 | innodb_strict_mode = 1 763 | innodb_sort_buffer_size = 67108864 764 | innodb_write_io_threads = 16 765 | innodb_read_io_threads = 16 766 | innodb_file_per_table = 1 767 | innodb_stats_persistent_sample_pages = 64 768 | innodb_autoinc_lock_mode = 2 769 | innodb_online_alter_log_max_size = 1G 770 | innodb_open_files = 4096 771 | innodb_flush_log_at_trx_commit = 1 772 | 773 | # Myisam settings # 774 | myisam_max_sort_file_size=512M 775 | myisam_sort_buffer_size =8M 776 | 777 | # replication settings # 778 | #read_only = 1 779 | skip_slave_start = 1 780 | slave_parallel_workers = 4 781 | slave_parallel_type = 'LOGICAL_CLOCK' 782 | slave_preserve_commit_order = on 783 | master_info_repository = table 784 | relay_log_info_repository = table 785 | sync_binlog = 1 786 | gtid_mode = on 787 | enforce_gtid_consistency = 1 788 | log-slave-updates = 1 789 | log_bin = $data/binlog/mysql-bin 790 | log_bin_index = $data/binlog/binlog.index 791 | binlog_format = row 792 | binlog_row_image = minimal 793 | binlog_rows_query_log_events = 1 794 | #relay_log_index = $data/binlog/relaylog.index 795 | #relay_log = $data/binlog/relay.log 796 | #relay_log_recovery = 1 797 | #slave_skip_errors = ddl_exist_errors 798 | #slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN' 799 | 800 | # semi sync replication settings # 801 | #plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave.so' 802 | #rpl_semi_sync_master_enabled = 1 803 | #rpl_semi_sync_master_timeout = 3000 804 | #rpl_semi_sync_slave_enabled= 1 805 | 806 | # password plugin # 807 | #validate_password_policy = strong 808 | #validate-password = force_plus_permanent 809 | 810 | END 811 | chown mysql:mysql /etc/my.cnf 812 | $base/mysql5.7/bin/mysqld --initialize --user=mysql 813 | cd $base/mysql5.7/support-files/ 814 | cp mysql.server /etc/init.d/mysqld 815 | chkconfig --add mysqld 816 | chkconfig --level 345 mysqld on 817 | service mysqld start 818 | pass=`cat $data/log/error.log | grep "A temporary password is" | awk '{print $NF}'` 819 | sed -i "/\[client\]/a\user=root" /etc/my.cnf 820 | sed -i "/\user=/a\password='$pass'" /etc/my.cnf 821 | cat >>/etc/profile < /etc/hosts << EOF 36 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 37 | ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 38 | 172.16.12.54 aliyun 39 | EOF 40 | ``` 41 | 42 | ### 1.3 查看 `/etc/hosts` 43 | 44 | ```bash 45 | [root@aliyun ~]$ cat /etc/hosts 46 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 47 | ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 48 | 172.16.12.54 aliyun 49 | ``` 50 | 51 | ### 1.4 开始安装 52 | 53 | ```bash 54 | [root@aliyun ~]$ pwd 55 | /root 56 | ``` 57 | 58 | ```bash 59 | [root@aliyun ~]$ wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar 60 | ``` 61 | 62 | ```bash 63 | [root@aliyun ~]$ git clone https://github.com/ghl1024/MySQL_Install.git 64 | ``` 65 | 66 | ```bash 67 | [root@aliyun ~]$ ll 68 | total 680908 69 | -rw-r--r-- 1 root root 697240064 Dec 18 21:54 mysql-5.7.29-linux-glibc2.12-x86_64.tar 70 | drwxr-xr-x 3 root root 4096 Apr 11 16:49 MySQL_Install 71 | ``` 72 | 73 | ```bash 74 | [root@aliyun ~]$ sh MySQL_Install/MySQL_install.sh 75 | Check /etc/hosts 76 | check /etc/hosts IP hostname success! 77 | 78 | ########################################## 79 | # 1,Default Quick Install # 80 | # 2,Custom Install # 81 | # 3,Cancel Install # 82 | # Version:MySQL 5.7.18 # 83 | ########################################## 84 | 85 | Please Select [1-3] To Continue (Default 1): 1 ###快速默认安装 86 | id: mysql: no such user 87 | 88 | uid=600(mysql) gid=600(mysql) groups=600(mysql) 89 | 90 | Check /mysql/mysoft and /mysql/mydata 91 | /mysql/mysoft not have lv ###检测/mysql/mysoft不是lv 92 | /mysql/mysoft dose not exist; 93 | please press y to create /mysql/mysoft,n to quit (Y/N) (Default Y): Y ###是否创建目录/mysql/mysoft,在根下。(y,创建;n,不创建) 94 | 95 | /mysql/mydata not have lv ###检测/mysql/mysoft不是lv 96 | /mysql/mydata dose not exist; 97 | please press y to create /mysql/mydata,n to quit (Y/N) (Default Y): Y ###是否创建目录/mysql/mydata,在根下。(y,创建;n,不创建) 98 | 99 | 100 | Check Old Mysql 101 | check old mysql success! 102 | 103 | |--------------------------------------------------------------------| 104 | Os Version: CentOS Linux release 7.3.1611 (Core) 105 | MemTotal: 1839 M 106 | BaseDir: /mysql/mysoft 107 | DataDir: /mysql/mydata/3306 108 | Port : 3306 109 | Server Id: 55186 110 | Defalut Character: utf8 111 | Innodb_buffer_pool_size: 1287 M 112 | Host Ipaddr: 172.16.12.54 113 | |--------------------------------------------------------------------| 114 | 115 | please press y to continue,n to quit (Y/N) (Default Y): Y ###列表输出安装信息,核对并确认是否继续安装(y,开始安装;n,取消安装) 116 | 117 | /home/mysql/.bash_profile parameters : success 118 | Starting MySQL.. [ OK ] 119 | *******Sat Apr 11 21:03:09 CST 2020******* 120 | **********Install Sucessful!********** 121 | ******* MySQL User: mysqladmin **** ###输出mysql管理员用户名 122 | ******* User Password: mysql ****** ###输出mysql管理员密码 123 | ************************************** 124 | [root@aliyun ~]$ 125 | ``` 126 | 127 | ### 1.5 安装完成查看 128 | 129 | ```bash 130 | [root@aliyun ~]$ netstat -tnlp|egrep "3306|mysql" 131 | tcp6 0 0 :::3306 :::* LISTEN 3911/mysqld 132 | ``` 133 | 134 | ```bash 135 | [root@aliyun ~]$ ps -aux|grep mysql 136 | root 2676 0.0 0.0 11760 1628 pts/0 S 21:03 0:00 /bin/sh /mysql/mysoft/mysql5.7/bin/mysqld_safe --datadir=/mysql/mydata/3306/data --pid-file=/mysql/mydata/3306/mysql.pid 137 | mysql 3911 0.1 15.1 2660972 285380 pts/0 Sl 21:03 0:00 /mysql/mysoft/mysql5.7/bin/mysqld --basedir=/mysql/mysoft/mysql5.7 --datadir=/mysql/mydata/3306/data --plugin-dir=/mysql/mysoft/mysql5.7/lib/plugin --user=mysql --log-error=/mysql/mydata/3306/log/error.log --pid-file=/mysql/mydata/3306/mysql.pid --socket=/mysql/mydata/3306/mysql.sock --port=3306 138 | ``` 139 | 140 | ```bash 141 | #使用mysql用户登录 142 | [root@aliyun ~]$ su - mysql 143 | Last login: Sat Apr 11 21:07:01 CST 2020 on pts/0 144 | ``` 145 | 146 | ```bash 147 | [mysql@aliyun ~]$ mysql -umysqladmin -pmysql 148 | mysql: [Warning] Using a password on the command line interface can be insecure. 149 | Welcome to the MySQL monitor. Commands end with ; or \g. 150 | Your MySQL connection id is 17 151 | Server version: 5.7.29-log MySQL Community Server (GPL) 152 | 153 | Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. 154 | 155 | Oracle is a registered trademark of Oracle Corporation and/or its 156 | affiliates. Other names may be trademarks of their respective 157 | owners. 158 | 159 | Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 160 | 161 | (mysqladmin@localhost) [(none)]> show databases; 162 | +--------------------+ 163 | | Database | 164 | +--------------------+ 165 | | information_schema | 166 | | mysql | 167 | | performance_schema | 168 | | sys | 169 | +--------------------+ 170 | 4 rows in set (0.00 sec) 171 | 172 | (mysqladmin@localhost) [(none)]> 173 | ``` 174 | 175 | ## :sun_with_face: 2. 自定义安装过程如下 176 | 177 | - 自定义安装,是根据用户需要安装到指定路径下,(自动创建用户指定的软件目录与数据目录); 178 | - 如下示例(软件安装在 `/home/mysql/mysoft` 下,数据目录在 `/home/mysql/mydata` 下,端口为 `3333`,管理员用户为 `root`,管理员密码为 `root`); 179 | 180 | ### 2.1 查看主机名 181 | 182 | ```bash 183 | [root@aliyun ~]$ hostname 184 | aliyun 185 | ``` 186 | 187 | ### 2.2 将 `ip` 和 `hostname` 加入到 `/etc/hosts` 中 188 | 189 | ```bash 190 | [root@aliyun ~]$ cat > /etc/hosts << EOF 191 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192 | ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 193 | 172.16.12.54 aliyun 194 | EOF 195 | ``` 196 | 197 | ### 2.3 查看 `/etc/hosts` 198 | 199 | ```bash 200 | [root@aliyun ~]$ cat /etc/hosts 201 | 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 202 | ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 203 | 172.16.12.54 aliyun 204 | ``` 205 | 206 | ### 2.4 开始安装 207 | 208 | ```bash 209 | [root@aliyun ~]$ pwd 210 | /root 211 | ``` 212 | 213 | ```bash 214 | [root@aliyun ~]$ wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar 215 | ``` 216 | 217 | ```bash 218 | [root@aliyun ~]$ git clone https://github.com/ghl1024/MySQL_Install.git 219 | ``` 220 | 221 | ```bash 222 | [root@aliyun ~]$ ll 223 | total 680908 224 | -rw-r--r-- 1 root root 697240064 Dec 18 21:54 mysql-5.7.29-linux-glibc2.12-x86_64.tar 225 | drwxr-xr-x 3 root root 4096 Apr 11 16:49 MySQL_Install 226 | ``` 227 | 228 | ```bash 229 | [root@aliyun ~]$ sh MySQL_Install/MySQL_install.sh 230 | Check /etc/hosts 231 | check /etc/hosts IP hostname success! 232 | 233 | ########################################## 234 | # 1,Default Quick Install # 235 | # 2,Custom Install # 236 | # 3,Cancel Install # 237 | # Version:MySQL 5.7.18 # 238 | ########################################## 239 | 240 | Please Select [1-3] To Continue (Default 1): 2 ###选择自定义安装 241 | Please Input MySQL Port (Default 3306): 3333 ###输入端口号(默认为3306) 242 | Please Input MySQL BaseDir (Default /mysql/mysoft): /home/mysql/mysoft ###输入软件安装目录(默认为/mysql/mysoft) 243 | Please Input MySQL DataDir (Default /mysql/mydata): /home/mysql/mydata ###输入数据文件目录(默认为/mysql/mydata) 244 | Please Input MySQL Server_Id (Default 55186): ###输入server_id(默认取值为IP后两位的结合,如:192.168.1.124,server_id为1124) 245 | Please Input MySQL Default Character (Default utf8): ###输入数据库默认字符集(默认为utf8) 246 | Please Input MySQL Innodb_Buffer_size (Default 1287 M): ###输入innodb_buffer_size大小(默认取值为实际系统内存的70%) 247 | 248 | uid=600(mysql) gid=600(mysql) groups=600(mysql) 249 | 250 | Do you want to use users (mysql) (no delet user and rebuild)[y|n] (Default y): y ###是否重建mysql用户(y,不重建;n,删除现有mysql用户并重建) 251 | 252 | uid=600(mysql) gid=600(mysql) groups=600(mysql) 253 | 254 | Check /home/mysql/mysoft and /home/mysql/mydata 255 | /home/mysql/mysoft not have lv ###检测/home/mysql/mysoft不是lv 256 | /home/mysql/mysoft dose not exist; 257 | please press y to create /home/mysql/mysoft,n to quit (Y/N) (Default Y): y ###是否创建目录/home/mysql/mysoft,在根下。(y,创建;n,不创建) 258 | 259 | /home/mysql/mydata not have lv ###检测/home/mysql/mydata不是lv 260 | /home/mysql/mydata dose not exist; 261 | please press y to create /home/mysql/mydata,n to quit (Y/N) (Default Y): y ###是否创建目录/home/mysql/mydata,在根下。(y,创建;n,不创建) 262 | 263 | 264 | Check Old Mysql 265 | check old mysql success! 266 | 267 | |--------------------------------------------------------------------| 268 | Os Version: CentOS Linux release 7.3.1611 (Core) 269 | MemTotal: 1839 M 270 | BaseDir: /home/mysql/mysoft 271 | DataDir: /home/mysql/mydata 272 | Port : 3333 273 | Server Id: 55186 274 | Defalut Character: utf8 275 | Innodb_buffer_pool_size: 1287 M 276 | Host Ipaddr: 172.16.12.54 277 | |--------------------------------------------------------------------| 278 | 279 | please press y to continue,n to quit (Y/N) (Default Y): y ###列表输出安装信息,核对并确认是否继续安装(y,开始安装;n,取消安装) 280 | 281 | /home/mysql/.bash_profile parameters : already existed 282 | Starting MySQL.. [ OK ] 283 | *******Sat Apr 11 21:57:52 CST 2020******* 284 | *******Install Sucessful!******* 285 | ******* MySQL User: root ******* ###输出mysql管理员用户名 286 | ***** User Password : root ***** ###输出mysql管理员密码 287 | ******************************** 288 | [root@aliyun ~]$ 289 | ``` 290 | 291 | ### 2.5 安装完成查看 292 | 293 | ```bash 294 | [root@aliyun ~]$ netstat -tnlp|egrep "3306|mysql" 295 | tcp6 0 0 :::3333 :::* LISTEN 4158/mysqld 296 | [root@aliyun ~]$ ps -aux | grep mysql 297 | root 2923 0.0 0.0 11760 1628 pts/0 S 21:57 0:00 /bin/sh /home/mysql/mysoft/mysql5.7/bin/mysqld_safe --datadir=/home/mysql/mydata/data --pid-file=/home/mysql/mydata/mysql.pid 298 | mysql 4158 0.1 15.3 2660972 288628 pts/0 Sl 21:57 0:00 /home/mysql/mysoft/mysql5.7/bin/mysqld --basedir=/home/mysql/mysoft/mysql5.7 --datadir=/home/mysql/mydata/data --plugin-dir=/home/mysql/mysoft/mysql5.7/lib/plugin --user=mysql --log-error=/home/mysql/mydata/log/error.log --pid-file=/home/mysql/mydata/mysql.pid --socket=/home/mysql/mydata/mysql.sock --port=3333 299 | root 4294 0.0 0.0 112648 968 pts/0 R+ 22:07 0:00 grep --color=auto mysql 300 | [root@aliyun ~]$ 301 | ``` 302 | 303 | ## :sun_with_face: 3. 退出 304 | 305 | ```bash 306 | [root@aliyun ~]$ sh MySQL_Install/MySQL_install.sh 307 | Check /etc/hosts 308 | check /etc/hosts IP hostname success! 309 | 310 | ########################################## 311 | # 1,Default Quick Install # 312 | # 2,Custom Install # 313 | # 3,Cancel Install # 314 | # Version:MySQL 5.7.18 # 315 | ########################################## 316 | 317 | Please Select [1-3] To Continue (Default 1): 3 318 | [root@aliyun ~]$ 319 | ``` 320 | --------------------------------------------------------------------------------