在Linux中自动化安装 mysql 5.7.xx版本系列的数据库

Automated installation of the mysql 5.7.xx version of the database in Linux

在Linux中自动化安装 mysql 5.7.xx版本系列的数据库

一、系统环境的配置规划

1、系统环境为腾讯云的CentOS系统

CentOS release 6.10 (Final)

 

 

2、系统内存

[root@myldbg ~]# fren -m

3、数据库系统存储空间

这里的数据库磁盘空间需求,老司机们可以根据自己的生产环境或者测试环境,自主规划自己的数据库目录空间,我这里给数据库的存储空间为30G勉强够用测试了。

4、将从mysql官网下载好的安装包,放置到脚本指定的目录中“mysoft_path=/home/web_tools”,以便脚本调用解压并进行安装,这里我选择安装5.7.25版本的进行安装。

# cd /home/web_tools

# wget  https://downloads.mysql.com/archives/get/file/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

5、接下来我们通过跑下面的脚本自动安装数据库

  5.1、脚本内容展示如下:

  
  1 #!/bin/bash
  2 #**************************************************************************
  3 #CreateDate:2019-06-24
  4 #Author:ShawnYi
  5 #Purpose: MySQL installation script
  6 #This installation is only for testing environments
  7 #Binary installation database version:mysql-5.7.25-linux-glibc2.12-x86_64
  8 #**************************************************************************
  9 #注意:对于5.7以上的数据库版本的配置my.cnf文件,是没有默认存在的,在这里需要自己新建一个新的的my.cnf配置文件即可。
 10 #5.7版本以上的MySQL初始化语句已经跟之前5.7以下的版本有区别。请参考:./bin/mysqld  --initialize-insecure --user=mysql
 11 #MySQL安装包下载完成后,放在脚本调用的目录下即可,进行下一步操作。
 12 #=============================================================
 13 #                 MySQL自动化执行流程如下                    #
 14 #=============================================================
 15 #1、定义数据库环境变量
 16 #2、创建目录及用户、赋权并安装
 17 #3、解压数据库安装包
 18 #4、检查环境依赖包是否安装,执行yum安装时,若系统没有安装就地安装,系统若安装执行会提示系统已经安装。
 19 #5、执行数据库初始化状态
 20 #6、添加数据库的启动文件并命名为 mysql
 21 #7、添加数据库的配置文件my.cnf
 22 #8、授权数据库目录
 23 #9、数据库的启动文件授权
 24 #10、添加数据库启动和关闭脚本
 25 #11、启动MySQL数据库
 26 #12、判断数据库启动是否成功
 27 #13、配置mysql数据库命令使用环境变量
 28 #14、重新修改数据库的密码
 29 #=============================================================
 30 #1、定义数据库环境变量
 31 #*************************************************************
 32 mysql_user=mysql
 33 mysql_port=3306
 34 mysql_passwd='mysql3306'
 35 mysql_version=mysql5.7.25
 36 mysoft_path=/home/web_tools
 37 mysql_install_path=/data_mart
 38 mysql_path=${mysql_install_path}/${mysql_version}
 39 mysql_data_path=${mysql_path}/data
 40 mysql_sata=${mysql_install_path}/statmysql_scripts
 41 mysql_pack=mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
 42 mysql_pack_tar_name=mysql-5.7.25-linux-glibc2.12-x86_64
 43 #*************************************************************
 44 #2、创建目录及用户、赋权并安装
 45 #useradd -g ${mysql_user} -r -s /sbin/nologin -M -d /home/${mysql_user} ${mysql_user}
 46 #/usr/sbin/useradd -r -g ${mysql_user} ${mysql_user}两种方式,添加mysql用户的属主关系,任选一种都可以。
 47 mkdir -p ${mysql_install_path}
 48 groupadd -r ${mysql_user}
 49 if [ $? -ne 0 ]
 50 then
 51   echo "This user mysql is not exist!!"
 52         else
 53   echo "This user mysql is exist!!"
 54 fi
 55 #*************************************************************
 56 useradd -g ${mysql_user} -r -s /sbin/nologin -M -d /home/${mysql_user} ${mysql_user}
 57 cd ${mysoft_path}
 58 if [ ! -e ${mysql_pack} ]
 59 then
 60   echo "install pack is not exist!!"
 61         exit 0
 62 fi
 63 #*************************************************************
 64 #3、解压数据库安装包
 65 tar zxvf ${mysql_pack} -C ${mysql_install_path} > /dev/null 2>&1
 66 cd ${mysql_install_path} && mv ${mysql_pack_tar_name} ${mysql_version} && mkdir -p ${mysql_data_path}
 67 if [ $? -ne 0 ]
 68 then
 69   echo -e "\033[37;31;5m[The previous operation failed.!!]\033[39;49;0m"
 70         else
 71   echo -e "\033[37;32;5m[The last operation was successful.!!]\033[39;49;0m"
 72 fi
 73 #4、检查环境依赖包是否安装,执行yum安装时,若系统没有安装就地安装,系统若安装执行会提示系统已经安装。
 74 yum -y install libaio > /dev/null 2>&1
 75 #*************************************************************
 76 #5、执行数据库初始化状态
 77 #这里对数据库5.7版本以上的初始化方法有两种:
 78 #第一种:在初始化过程中,没有密码生成,所以密码为空:/mysqld  --initialize-insecure --user=mysql
 79 #第二种:在初始化过程中,有密码生成显示,复制出来记录,以便安装成功以后登录使用:/mysqld  --initialize --console --user=mysql
 80 #在这里我选择了第一种初始化方式,这样脚本跑起来比较方便,反正后面也要先执行修改数据库的密码的。
 81 cd ${mysql_path} 
 82 ./bin/mysqld  --initialize-insecure --user=${mysql_user} --basedir=${mysql_path} --datadir=${mysql_data_path}
 83 if [ $? -ne 0 ]
 84 then
 85   echo -e "\033[37;31;5m[MySQL initialization failed...]\033[39;49;0m"
 86         else
 87   echo -e "\033[37;32;5m[MySQL initialization secessful...]\033[39;49;0m"
 88 fi
 89 #*************************************************************
 90 #6、添加数据库的启动文件并命名为 mysql
 91 cp -p ${mysql_path}/support-files/mysql.server /etc/rc.d/init.d/mysql
 92 #7、添加数据库的配置文件my.cnf
 93 cd ${mysql_path}
 94 cat >>my.cnf<<EOF
 95 [client]
 96 # 设置mysql客户端连接服务端时默认使用的端口
 97 port = 3306
 98 default-character-set = utf8
 99 [mysql]
100 # 设置mysql客户端默认字符集
101 default-character-set = utf8
102 [mysqld]
103 basedir = /data_mart/mysql5.7.25/
104 datadir = /data_mart/mysql5.7.25/data
105 port = 3306
106 server_id = 1
107 socket = /tmp/
108 #开启事物的调度器
109 event_scheduler = 1
110 #开启数据库不区分大小写功能
111 lower_case_table_names = 1
112 #开启独立表空间功能    
113 innodb_file_per_table = 1
114 max_user_connections = 50
115 innodb_buffer_pool_size = 500M
116 # 允许最大连接数
117 max_connections=50
118 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
119 max_connect_errors=3
120 # 服务端使用的字符集默认为UTF8
121 character-set-server = utf8
122 # 创建新表时将使用的默认存储引擎
123 default-storage-engine = INNODB
124 ############开启数据库mysql的日志功能###################
125 # 1、开启错误日志功能
126 log-error = /data_mart/mysql5.7.25/logs/myldbg.com.err
127 # 2、开启查询日志功能
128 log-output = FILE
129 general_log = ON
130 log_timestamps = SYSTEM
131 general_log_file = /data_mart/mysql5.7.25/logs/general_myldbg.com.log
132 # 3、开启慢查询日志功能,设置慢查询日志延迟2秒
133 log-output = FILE
134 slow_query_log = ON
135 long_query_time = 2
136 slow_query_log_file = /data_mart/mysql5.7.25/logs/query_myldbg.com.log
137 # 4、开启二进制日志功能
138 binlog-format = Row
139 log_bin = /data_mart/mysql5.7.25/log_bin/mysql_myldbg_com_bin
140 sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
141 EOF
142 #*************************************************************
143 #这里注意哈,个人觉得可能是5.7的版本特性,若要指定MySQL错误日志的路径时,首先要创建这个日志文件,
144 #这样数据库默认启动的时候就能把启动信息写进去,其次其它日志也会自动生成,最后数据库启动成功。
145 #我这样记录是我对这个版本和安装脚本一同测试过几次,才总结出这样的分析结果,提供给大家参考。
146 touch /data_mart/mysql5.7.25/logs/myldbg.com.err
147 chown mysql:mysql /data_mart/mysql5.7.25/logs/myldbg.com.err
148 #*************************************************************
149 #8、授权数据库目录
150 mkdir -p ${mysql_path}/logs
151 mkdir -p ${mysql_path}/log_bin
152 chmod +x ${mysql_path}/bin/
153 chmod +x ${mysql_path}/my.cnf
154 chown -R ${mysql_user}:${mysql_user} ${mysql_path}
155 #*************************************************************
156 #修改mysql启动文件的配置my.cnf的路径,sed指定行号替换新内容
157 sed -i '46c basedir=/data_mart/mysql5.7.25' /etc/rc.d/init.d/mysql && echo 'ok'||echo 'no'  
158 sed -i '47c datadir=/data_mart/mysql5.7.25/data' /etc/rc.d/init.d/mysql && echo 'ok'||echo 'no'  
159 sed -i '207c conf=/data_mart/mysql5.7.25/my.cnf' /etc/rc.d/init.d/mysql && echo 'ok'||echo 'no'
160 #*************************************************************
161 #9、数据库的启动文件授权
162 chmod 755 /etc/rc.d/init.d/mysql
163 chown ${mysql_user}:${mysql_user} /etc/rc.d/init.d/mysql
164 #*************************************************************
165 #10、添加数据库启动和关闭脚本
166 mkdir -p ${mysql_sata}
167 cd ${mysql_sata}
168 cat >>mysql_start.sh<<EOF
169 #!/bin/sh
170 nohup /etc/rc.d/init.d/mysql start >> ${mysql_install_path}/mysql_start.log 2>&1
171 exit
172 EOF
173 cat >>mysql_shutdown.sh<<EOF
174 #!/bin/bash
175 nohup /etc/rc.d/init.d/mysql stop >> ${mysql_install_path}/mysql_stop.log 2>&1
176 exit
177 EOF
178 #*************************************************************
179 #11、启动MySQL数据库
180 chmod +x mysql_start.sh mysql_shutdown.sh && sh mysql_start.sh
181 sleep 50
182 #12、判断数据库启动是否成功
183 netstat -atunlp |grep ${mysql_port}
184 if [ $? -ne 0 ]
185 then
186    echo -e "\033[37;31;5m[MySQL start failure...]\033[39;49;0m"
187 else
188     echo -e "\033[37;32;5m[MySQL start secessful...]\033[39;49;0m"
189 fi
190 #*************************************************************
191 #13、配置mysql数据库命令使用环境变量
192 echo "PATH=$PATH:/data_mart/mysql5.7.25/bin" >> /etc/profile
193 source /etc/profile
194 #*************************************************************
195 #14、重新修改数据库的密码
196 ${mysql_path}/bin/mysqladmin -uroot password ${mysql_passwd} -S /tmp/mysql.sock 
197 exit
mysql 自动化安装脚本

6、通过以上脚本的执行过程直至数据库启动,如下显示:

7、在主机上确认了,数据库确实启动失败。如下所示:没有查到数据库启动的端口和进程信息

8、脚本执行到最后一步后也报错了,这个错误是因为前面数据库启动失败的原因导致的,这里报错很正常,因为数据库都没启动成功,自然你修改密码必然会报错哈。

 

9、经过反复测试排查脚本执行过程,终于发现,原来是我的my.cnf配置有问题。因为我上面那部分配置是开启了数据库的各项日志功能,错误日志的配置出错,导致启动数据库的时候报如下错误:

10、解决方法:这里注意哈,个人觉得可能是5.7的版本特性,若要指定MySQL错误日志的路径时,首先要创建这个日志文件,这样数据库默认启动的时候就能把启动信息写进去,其次其它日志也会自动生成,最后数据库启动成功。我这样记录是我对这个版本和安装脚本一同测试过几次,才总结出这样的分析结果,提供给大家参考。

[root@myldbg mysql5.7.25]# touch /data_mart/mysql5.7.25/logs/myldbg.com.err

[root@myldbg mysql5.7.25]# chown mysql:mysql /data_mart/mysql5.7.25/logs/myldbg.com.err

11、最后启动数据库,所有日志就正常开启了并且数据库也启动成功了,启动显示如下:

 

12、检查数据库端口是否存在,这样可以确认数据库是否真正启动成功

[root@myldbg mysql5.7.25]# netstat -atnulp |grep 3306

13、接下来我们修改数据库的密码,最后在登陆数据库

[root@myldbg ~]# cd /data_mart/mysql5.7.25/bin

[root@myldbg bin]# ./mysqladmin -uroot password "mysql3306" -S /tmp/mysql.sock

 

14、登陆数据库

第一种:无密码登陆方式报错

[root@myldbg bin]# mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

第二种:有密码登陆方式成功进入数据库如下图所示:

 

15、目前数据库已经安装完成,并且能正常登陆,接下来是不是要通过客户端远程mysql数据库,那我们就给数据库赋予远程权限的控制,具体操作如下。

  15.1、创建一个数据库的远程账号,这里可以用root账号也可以用其它命名的账号哈。

    mysql> create user 'root'@'%' identified by 'mysql3306';

    Query OK, 0 rows affected (0.00 sec)

  15.2、给远程账号授权,这里我给了远程账号的权限是属于:管理员权限,若是生产环境,老司机们一定要注意慎用管理员权限哦

    mysql> grant all privileges on *.* to 'root'@'%' identified by 'mysql3306' with grant option;

    Query OK, 0 rows affected, 1 warning (0.00 sec)

  15.3、最后刷新权限表,这样远程账号创建完成,下面通过客户端进行验证登陆。

    mysql> flush privileges;

    Query OK, 0 rows affected (0.00 sec)

16、这里mysql的客户端我是用Navicat premium客户端远程验证如下:

 

17、远程验证登陆成功,下面我们创建一个数据库如下:

 

18、最终,MySQL数据库自动化安装完成。

 

posted @ 2019-08-29 12:13  易知乐  阅读(451)  评论(0编辑  收藏  举报