在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
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数据库自动化安装完成。