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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介:




简介

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,如需转载请自行联系原作者


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
7月前
|
Ubuntu 关系型数据库 MySQL
MySQL源码编译安装
本文详细介绍了MySQL 8.0及8.4版本的源码编译安装全过程,涵盖用户创建、依赖安装、cmake配置、编译优化等步骤,并提供支持多Linux发行版的一键安装脚本,适用于定制化数据库部署需求。
1889 4
MySQL源码编译安装
|
7月前
|
Ubuntu 关系型数据库 MySQL
MySQL二进制包安装
本文详细介绍了在多种Linux系统上通过二进制包安装MySQL 8.0和8.4版本的完整过程,涵盖用户创建、glibc版本匹配、程序解压、环境变量配置、初始化数据库及服务启动等步骤,并提供支持多发行版的一键安装脚本,助力高效部署MySQL环境。
1092 4
MySQL二进制包安装
|
7月前
|
安全 关系型数据库 MySQL
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
本文详细介绍在openSUSE系统上通过离线RPM包安装MySQL 8.0和8.4版本的完整步骤,包括下载地址、RPM包解压、GPG密钥导入、使用rpm或zypper命令安装及服务启动验证,涵盖初始密码获取与安全修改方法,适用于无网络环境下的MySQL部署。
773 3
MySQL包安装 -- SUSE系列(离线RPM包安装MySQL)
|
7月前
|
关系型数据库 MySQL Linux
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
本文介绍了在openSUSE系统上通过SUSE资源库安装MySQL 8.0和8.4版本的完整步骤,包括配置国内镜像源、安装MySQL服务、启动并验证运行状态,以及修改初始密码等操作,适用于希望在SUSE系列系统中快速部署MySQL的用户。
748 3
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
|
7月前
|
弹性计算 人工智能 前端开发
在阿里云ECS上部署n8n自动化工作流:U2实例实战
本文介绍如何在阿里云ECS的u2i/u2a实例上部署开源工作流自动化平台n8n,利用Docker快速搭建并配置定时任务,实现如每日抓取MuleRun新AI Agent并推送通知等自动化流程。内容涵盖环境准备、安全组设置、实战案例与优化建议,助力高效构建低维护成本的自动化系统。
1808 5
|
7月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
798 6
|
8月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
517 158
|
8月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1358 152
|
8月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
978 156

推荐镜像

更多