1分钟完成MySQL5.6生产库自动化安装部署

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:




简介

Part1:写在最前

自动化运维是一个DBA应该掌握的技术,其中,自动化安装数据库是一项基本的技能,本文中的安装脚本已通过测试,作为生产库来说没有问题,鉴于每个公司存储规划要求不同,可以按需自行修改脚本。

由于源码安装费时费力,rpm包可定制性差,生产库一般采用二进制安装包,本文的安装包为二进制安装文件,本文使用的是mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz,如版本不同,替换第109、110行的tar命令后的mysql安装包名即可



Part2:新特性简介

本脚本默认启用5.6部分新特性

innodb_buffer_pool_dump_at_shutdown=1  它dump的不是数据,是Id号

innodb_buffer_pool_load_at_startup=1

开启这个两个参数当数据库重启后把这些热数据重新加载回去

只有正常关库才会dump热数据块,宕机和kill -9不会

部分参数按需整改,例如innodb_buffer_pool_size,本文给的512M,一般为内存的50%-80%

来看一下脚本的具体情况


实战

Part1:自动化脚本

[root@HE3 ~]# cat mysql_auto_install.sh

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
###### 二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可###############
######数据库目录/usr/local/mysql############
######数据目录/data/mysql############
######日志目录/log/mysql############
######端口号默认3306其余参数按需自行修改############
##################
#author:rrhelei@126.com#
##################
#!/bin/bash
PATH= /bin : /sbin : /usr/bin : /usr/sbin : /opt/bin : /opt/sbin :~ /bin
export  PATH
# 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.6.25 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  "==========================="
isinstallmysql56= "n"
echo  "Install MySQL 5.6.25,Please input y"
read  -p  "(Please input y , n):"  isinstallmysql56
case  "$isinstallmysql56"  in
y|Y|Yes|YES| yes |yES|yEs|YeS|yeS)
echo  "You will install MySQL 5.6.25"
isinstallmysql56= "y"
;;
*)
echo  "INPUT error,You will exit install MySQL 5.6.25"
isinstallmysql56= "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
#yum -y remove mysql-server mysql mysql-libs
#yum -y remove php-mysql
#yum -y install yum-fastestmirror
#yum -y update
#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  InstallMySQL56()
{
echo  "============================Install MySQL 5.6.22=================================="
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
#mysql directory configuration
groupadd mysql -g 512
useradd  -u 512 -g mysql -s  /sbin/nologin  -d  /home/mysql  mysql
tar  xvf  /root/mysql-5 .6.25-linux-glibc2.5-x86_64. tar .gz
mv  /root/mysql-5 .6.25-linux-glibc2.5-x86_64  /usr/local/mysql
mkdir  -p  /data/mysql
mkdir  -p  /log/mysql
chown  -R mysql:mysql  /data/mysql
chown  -R mysql:mysql  /usr/local/mysql
chown  -R mysql:mysql  /log
#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]
default-character- set =utf8
[mysqld]
port= 3306
socket=  /tmp/mysql .sock
basedir=  /usr/local/mysql
datadir=  /data/mysql
open_files_limit    = 3072
back_log = 103
max_connections = 800
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
tmp_table_size = 96M
max_heap_table_size = 96M
slow_query_log = 1
slow_query_log_file =  /log/mysql/slow .log
log-error =  /log/mysql/error .log
long_query_time = 1
server- id  = $SERVERID
log-bin = mysql-bin
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 4096M
max_binlog_size = 1024M
expire_logs_days = 60
key_buffer_size = 32M
read_buffer_size = 1M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
character- set -server=utf8
default-storage-engine = InnoDB
binlog_format = row
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1
binlog_rows_query_log_events = 1
explicit_defaults_for_timestamp = 1
#log_slave_updates=1
#gtid_mode=on
#enforce_gtid_consistency=1
#innodb_write_io_threads = 8
#innodb_read_io_threads = 8
#innodb_thread_concurrency = 0
transaction_isolation = REPEATABLE-READ
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 512M
#innodb_data_home_dir =
innodb_data_file_path = ibdata1:1024M:autoextend
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 = 50
innodb_file_per_table = 1
innodb_locks_unsafe_for_binlog = 0
wait_timeout = 14400
interactive_timeout = 14400
skip-name-resolve
[mysqldump]
quick
max_allowed_packet = 32M
EOF
/usr/local/mysql/scripts/mysql_install_db  --basedir= /usr/local/mysql  --datadir= /data/mysql  --defaults- file = /etc/my .cnf --user=mysql
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
source  /etc/profile
/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.6.25 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.6.25 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
CheckAndDownloadFiles 2>&1 |  tee  -a  /root/mysql-install .log
InstallDependsAndOpt 2>&1 |  tee  -a  /root/mysql-install .log
InstallMySQL56 2>&1 |  tee  -a  /root/mysql-install .log
CheckInstall 2>&1 |  tee  -a  /root/mysql-install .log




Part2:安装


下载完毕安装包,将脚本和安装文件放在/root目录下,执行上述脚本即可(如不是5.6.25版本,需修改脚本132、133行为对应版本号)

[root@HE3 ~]# sh -x mysql_auto_install.sh

如首次安装,请再次执行source /etc/profile

[root@HE3 ~]# source /etc/profile

验证

执行脚本后,输入用户名密码(默认MANAGER)后登录数据库成功。


wKioL1fOIHTQR5ktAAElfoh_FOg089.jpg-wh_50


至此,MySQL5.6安装完成。




 本文转自 dbapower 51CTO博客,原文链接:http://blog.51cto.com/suifu/1846671,如需转载请自行联系原作者


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
Kubernetes 关系型数据库 MySQL
k8s快速部署MySQL单机
k8s快速部署MySQL单机
|
9天前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
23 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
2天前
|
数据采集 数据可视化 数据挖掘
利用 Jupyter 实现自动化报告生成 展示如何结合 Jupyter 和 Python 库
【8月更文第29天】为了创建自动化报告,我们可以利用 Jupyter Notebook 结合 Python 的强大库如 Pandas、Matplotlib 和 Seaborn 来处理数据、制作图表,并使用 Jinja2 模板引擎来生成 HTML 报告。这种方式非常适合需要定期生成相同类型报告的情况,比如数据分析、业务报表等。
12 1
|
6天前
|
机器学习/深度学习 传感器 数据采集
深度学习之生产流程自动化
基于深度学习的生产流程自动化是一种将深度学习技术应用于工业生产流程中,以实现更高效、智能化和自适应的生产管理和控制的方式。通过利用深度学习算法对大规模数据进行分析与预测,生产流程自动化系统可以优化资源分配、提高生产效率、降低成本,并适应快速变化的市场需求。
19 2
|
11天前
|
监控 关系型数据库 MySQL
mysql误删的performance_schema库
`performance_schema`库是MySQL性能监控的重要工具,误删除后可以通过上述方法尝试恢复。在操作过程中,重启MySQL服务器是最简单的尝试方法。如果这不起作用,可以尝试使用MySQL的初始化选项,但请注意备份数据以防数据丢失。检查MySQL配置也是一个好的步骤,以确保 `performance_schema`没有被禁用。最后,如果有备份,通过恢复备份来恢复 `performance_schema`库是最保险的方法。在操作过程中,确保遵循最佳实践和操作前备份重要数据。
28 5
|
11天前
|
SQL 关系型数据库 MySQL
MySQL主从:延时从库恢复全解
MySQL主从:延时从库恢复全解
|
2天前
|
SQL 监控 关系型数据库
MySQL 延迟从库介绍
我们都知道,MySQL 主从延迟是一件很难避免的情况,从库难免会偶尔追不上主库,特别是主库有大事务或者执行 DDL 的时候。MySQL 除了这种正常从库外,还可以设置延迟从库,顾名思义就是故意让从库落后于主库多长时间,本篇文章我们一起来了解下 MySQL 中的延迟从库。
18 0
|
8天前
|
关系型数据库 MySQL 测试技术
使用docker部署MySQL测试环境
使用docker部署MySQL测试环境
11 0
|
8天前
|
固态存储 关系型数据库 MySQL
mysql多实例一键部署
mysql多实例一键部署
|
10天前
|
Kubernetes 关系型数据库 MySQL
k8s练习--通过NFS+PV+PVC+POD,部署一个MySQL服务,并将MySQL的数据进行持久化存储
本文档介绍了如何使用Kubernetes (K8s)、NFS、PersistentVolume (PV)、PersistentVolumeClaim (PVC)和Pod来部署并实现MySQL服务的数据持久化存储。Kubernetes是一个用于自动化部署、扩展和管理容器化应用的强大平台。NFS作为一种网络文件系统协议,能够使Kubernetes集群中的Pod跨节点访问共享文件。PV和PVC机制则提供了持久化的存储解决方案,确保数据即使在Pod生命周期结束后仍得以保留。

热门文章

最新文章

下一篇
云函数