MySQL5.7安装部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,意思为全部导出,如下图所示:

wKiom1fjcbXjsiZ7AACrCgT08qo965.jpg

注:在MariaDB10.1里,同样提供了该参数,不过其默认值是100



在线调整innodb_buffer_pool_size,不用重启mysql进程

在MySQL5.6/MariaDB 10.1版本,调整该参数必须重启MySQL进程才可以生效,而mysql5.7版本里,可以直接动态设置,非常方便。

这个功能应用场景如:

1.机器新增内存,DBA忘记调大该参数;

2.工作交接,新来的DBA发现前任DBA对该参数设置不合理。

下面在我机器里进行测试,把512M内存变更为256M,见下图:

wKioL1fjdMSSu3ApAAES8CSuJE4611.jpg

需注意的是,在调整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

[[email protected] ~]# 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一下环境变量文件使生效

[[email protected] ~] source /etc/profile


2.输入用户名密码(默认为MANAGER)登录数据库

wKioL1fg55bRtezyAAEwCj3jwm4534.jpg


至此,MySQL5.7.15安装完成


——总结——

MySQL5.7拥有诸多让我们激动和期待的新功能,限于文章篇幅原因,这里仅仅介绍冰山一角。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。


本文出自 “阳光总在风雨后!” 博客,请务必保留此出处http://xiaofeng886.blog.51cto.com/781833/1917248

以上是关于MySQL5.7安装部署的主要内容,如果未能解决你的问题,请参考以下文章

mysql5.7源码安装数据库部署

一键部署----shell脚本安装MySQL5.7

一文带你centos7下yum安装部署mysql5.7版本

Mysql5.7.17安装部署

部署基于python的web发布环境(第一篇)1:安装nginx2:安装mysql5.7

一分钟完成MySQL5.7安装部署