天天看點

一分鐘完成MySQL5.7安裝部署

1分鐘完成MySQL5.7安裝部署

一分鐘完成MySQL5.7安裝部署

簡介

Part1:寫在最前

MYSQL5.7.15是截止至本文撰寫當日,mysql官網的最新社群版,mysql5.7的多項功能優化可以用激動人心來形容,嫌安裝麻煩?沒關系,跟着本文,帶你1分鐘搞定MySQL5.7.15資料庫安裝部署。

Part2:僅僅安裝就夠了?

不,當然不夠,MySQL5.7的多項功能特性更新,無法一一贅述,是以,我們先從和本文最相關的my.cnf,來解讀一些MySQL5.7的部分新特性。

在之前我寫過一篇MySQL5.6的新特性參數,諸如:

innodb_buffer_pool_dump_at_shutdown=1

innodb_buffer_pool_load_at_startup=1

開啟這個兩個參數當資料庫重新開機後把這些熱資料重新加載回去

隻有正常關庫才會dump熱資料塊,當機和kill -9不會

更多5.6安裝内容可移步:

http://suifu.blog.51cto.com/9167728/1846671

在5.7裡,一個新的系統參數:innodb_buffer_pool_dump_pct,其預設值為25

允許DBA控制每個緩沖池最近使用頁的百分比來導出,以減緩導出innodb buffer pool所有頁占用過大的磁盤。如果innodb buffer pool裡緩存了100個頁,那麼會将最近使用的25個頁導出去,最大值是100,意思為全部導出,如下圖所示:

注:在MariaDB10.1裡,同樣提供了該參數,不過其預設值是100

線上調整innodb_buffer_pool_size,不用重新開機mysql程序

在MySQL5.6/MariaDB 10.1版本,調整該參數必須重新開機MySQL程序才可以生效,而mysql5.7版本裡,可以直接動态設定,非常友善。

這個功能應用場景如:

1.機器新增記憶體,DBA忘記調大該參數;

2.工作交接,新來的DBA發現前任DBA對該參數設定不合理。

下面在我機器裡進行測試,把512M記憶體變更為256M,見下圖:

需注意的是,在調整buffer_pool期間,使用者的請求會被阻塞,直到調整完畢,是以請勿在高峰期調整。

實戰

Part1:整個流程分3步

1.mysql官網下載下傳二進制版本的mysql5.7.15安裝包(mysql-5.7.15-linux-glibc2.5-x86_64.tar.gz)至/root目錄

2.執行下文所述的mysql_auto_install.sh腳本

3.輸入您設定的密碼登入資料庫

Part2:自動化腳本

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

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

[root@HE2 ~]

# cat mysql_auto_install.sh

###### 二進制自動安裝資料庫腳本root密碼MANAGER将腳本和安裝包放在/root目錄即可###############

######資料庫目錄/usr/local/mysql############

######資料目錄/data/mysql############

######慢日志目錄/data/slowlog############

######端口号預設3306其餘參數按需自行修改############

##################

#author:[email protected]#

##################

#!/bin/bash

# Check if user is root

if

[ $(

id

-u) != 

"0"

]; 

then

echo

"Error: You must be root to run this script, please use root to install"

exit

1

fi

clear

echo

"========================================================================="

echo

"A tool to auto-compile & install MySQL 5.7.15 on Redhat/CentOS Linux "

echo

"========================================================================="

cur_dir=$(

pwd

)

#set mysql root password

echo

"==========================="

mysqlrootpwd=

"MANAGER"

echo

-e 

"Please input the root password of mysql:"

read

-p 

"(Default password: MANAGER):"

mysqlrootpwd

if

"$mysqlrootpwd"

""

]; 

then

mysqlrootpwd=

"MANAGER"

fi

echo

"==========================="

echo

"MySQL root password:$mysqlrootpwd"

echo

"==========================="

#which MySQL Version do you want to install?

echo

"==========================="

isinstallmysql57=

"n"

echo

"Install MySQL 5.7.15,Please input y"

read

-p 

"(Please input y , n):"

isinstallmysql57

case

"$isinstallmysql57"

in

y|Y|Yes|YES|

yes

|yES|yEs|YeS|yeS)

echo

"You will install MySQL 5.7.15"

isinstallmysql57=

"y"

;;

*)

echo

"INPUT error,You will exit install MySQL 5.7.15"

isinstallmysql57=

"n"

exit

esac

get_char()

{

SAVEDSTTY=`stty -g`

stty -

echo

stty cbreak

#dd if=/dev/tty bs=1 count=1 2> /dev/null

stty -raw

stty 

echo

stty $SAVEDSTTY

}

echo

""

echo

"Press any key to start...or Press Ctrl+c to cancel"

char=`get_char`

# Initialize  the installation related content.

function

InitInstall()

{

cat

/etc/issue

uname

-a

MemTotal=`

free

-m | 

grep

Mem | 

awk

'{print  $2}'

`  

echo

-e 

"\n Memory is: ${MemTotal} MB "

#Set timezone

#rm -rf /etc/localtime

#ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#Delete Old Mysql program

rpm -qa|

grep

mysql

rpm -e mysql

#Disable SeLinux

if

[ -s 

/etc/selinux/config

]; 

then

sed

-i 

's/SELINUX=enforcing/SELINUX=disabled/g'

/etc/selinux/config

fi

setenforce 0

}

#Installation of depend on and optimization options.

function

InstallDependsAndOpt()

{

cd

$cur_dir

cat

>>

/etc/security/limits

.conf<<EOF

* soft nproc 65535

* hard nproc 65535

* soft nofile 65535

* hard nofile 65535

EOF

echo

"fs.file-max=65535"

>> 

/etc/sysctl

.conf

}

#Install MySQL

function

InstallMySQL57()

{

echo

"============================Install MySQL 5.7.15=================================="

cd

$cur_dir

#Backup old my.cnf

#rm -f /etc/my.cnf

if

[ -s 

/etc/my

.cnf ]; 

then

mv

/etc/my

.cnf 

/etc/my

.cnf.`

date

+%Y%m%d%H%M%S`.bak

fi

echo

"============================MySQL 5.7.15 installing…………========================="

#mysql directory configuration

tar

xvf 

/root/mysql-5

.7.15-linux-glibc2.5-x86_64.

tar

.gz

mv

/root/mysql-5

.7.15-linux-glibc2.5-x86_64 

/usr/local/mysql

groupadd mysql -g 512

useradd

-u 512 -g mysql -s 

/sbin/nologin

-d 

/home/mysql

mysql

mkdir

-p 

/data/mysql

mkdir

-p 

/data/slowlog

chown

-R mysql:mysql 

/data/mysql

chown

-R mysql:mysql 

/usr/local/mysql

chown

-R mysql:mysql 

/data/slowlog

#edit /etc/my.cnf

SERVERID=`

ifconfig

eth0 | 

grep

"inet addr"

awk

'{ print $2}'

awk

-F. 

'{ print $3$4}'

`

cat

>>

/etc/my

.cnf<<EOF

[client]

port=3306

socket=

/tmp/mysql

.sock

default-character-

set

=utf8

[mysql]

no-auto-rehash

default-character-

set

=utf8

[mysqld]

port=3306

character-

set

-server=utf8

socket=

/tmp/mysql

.sock

basedir=

/usr/local/mysql

datadir=

/data/mysql

explicit_defaults_for_timestamp=

true

lower_case_table_names=1

back_log=103

max_connections=3000

max_connect_errors=100000

table_open_cache=512

external-locking=FALSE

max_allowed_packet=32M

sort_buffer_size=2M

join_buffer_size=2M

thread_cache_size=51

query_cache_size=32M

#query_cache_limit=4M

transaction_isolation=REPEATABLE-READ

tmp_table_size=96M

max_heap_table_size=96M

###***slowqueryparameters

long_query_time=1

slow_query_log = 1

slow_query_log_file=

/data/slowlog/slow

.log

###***binlogparameters

log-bin=mysql-bin

binlog_cache_size=4M

max_binlog_cache_size=4096M

max_binlog_size=1024M

binlog_format=MIXED

expire_logs_days=7

###***relay-logparameters

#relay-log=/data/3307/relay-bin

#relay-log-info-file=/data/3307/relay-log.info

#master-info-repository=table

#relay-log-info-repository=table

#relay-log-recovery=1

#***MyISAMparameters

key_buffer_size=16M

read_buffer_size=1M

read_rnd_buffer_size=16M

bulk_insert_buffer_size=1M

#skip-name-resolve

###***master-slavereplicationparameters

server-

id

=$SERVERID

#slave-skip-errors=all

#***Innodbstorageengineparameters

innodb_buffer_pool_size=512M

innodb_data_file_path=ibdata1:10M:autoextend

#innodb_file_io_threads=8

innodb_thread_concurrency=16

innodb_flush_log_at_trx_commit=1

innodb_log_buffer_size=16M

innodb_log_file_size=512M

innodb_log_files_in_group=2

innodb_max_dirty_pages_pct=75

innodb_buffer_pool_dump_pct=50

innodb_lock_wait_timeout=50

innodb_file_per_table=on

[mysqldump]

quick

max_allowed_packet=32M

[myisamchk]

key_buffer=16M

sort_buffer_size=16M

read_buffer=8M

write_buffer=8M

[mysqld_safe]

open

-files-limit=8192

log-error=

/data/mysql/error

.log

pid-

file

=

/data/mysql/mysqld

.pid

EOF

/usr/local/mysql/bin/mysqld

--defaults-

file

=

/etc/my

.cnf --user=mysql --datadir=

/data/mysql

--basedir=

/usr/local/mysql

--initialize-insecure

cp

/usr/local/mysql/support-files/mysql

.server 

/etc/init

.d

/mysqld

chmod

700 

/etc/init

.d

/mysqld

chkconfig --add mysqld

chkconfig --level 2345 mysqld on

cat

>> 

/etc/ld

.so.conf.d

/mysql-x86_64

.conf<<EOF

/usr/local/mysql/lib

EOF

ldconfig

if

[ -d 

"/proc/vz"

];

then

ulimit

-s unlimited

fi

/etc/init

.d

/mysqld

start

cat

>> 

/etc/profile

<<EOF

export

PATH=$PATH:

/usr/local/mysql/bin

export

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:

/usr/local/mysql/lib

EOF

/usr/local/mysql/bin/mysqladmin

-u root password $mysqlrootpwd

cat

/tmp/mysql_sec_script

<<EOF

use mysql;

delete from mysql.user where user!=

'root'

or host!=

'localhost'

;

grant all privileges on *.* to 

'sys_admin'

@

'%'

identified by 

'MANAGER'

;

flush privileges;

EOF

/usr/local/mysql/bin/mysql

-u root -p$mysqlrootpwd -h localhost < 

/tmp/mysql_sec_script

#rm -f /tmp/mysql_sec_script

#/etc/init.d/mysqld restart

echo

"============================MySQL 5.7.15 install completed========================="

}

function

CheckInstall()

{

echo

"===================================== Check install ==================================="

clear

ismysql=

""

echo

"Checking..."

if

[ -s 

/usr/local/mysql/bin/mysql

] && [ -s 

/usr/local/mysql/bin/mysqld_safe

] && [ -s 

/etc/my

.cnf ]; 

then

echo

"MySQL: OK"

ismysql=

"ok"

else

echo

"Error: /usr/local/mysql not found!!!MySQL install failed."

fi

if

"$ismysql"

"ok"

]; 

then

echo

"Install MySQL 5.7.15 completed! enjoy it."

echo

"========================================================================="

netstat

-ntl

else

echo

"Sorry,Failed to install MySQL!"

echo

"You can tail /root/mysql-install.log from your server."

fi

}

#The installation log

InitInstall 2>&1 | 

tee

/root/mysql-install

.log

InstallDependsAndOpt 2>&1 | 

tee

-a 

/root/mysql-install

.log

InstallMySQL57 > 

/dev/null

CheckInstall 2>&1 | 

tee

-a 

/root/mysql-install

.log

Part5:登入&享受吧

1.先source一下環境變量檔案使生效

[root@HE2 ~] source /etc/profile

2.輸入使用者名密碼(預設為MANAGER)登入資料庫

一分鐘完成MySQL5.7安裝部署

至此,MySQL5.7.15安裝完成

——總結——

MySQL5.7擁有諸多讓我們激動和期待的新功能,限于文章篇幅原因,這裡僅僅介紹冰山一角。由于筆者的水準有限,編寫時間也很倉促,文中難免會出現一些錯誤或者不準确的地方,不妥之處懇請讀者批評指正。

本文出自: http://suifu.blog.51cto.com/9167728/1855415

繼續閱讀