【MySQL】基于centos7编译安装MySQL5.7.29

MySQL介绍

MySQL一般特制完整的MySQLRDBMS,是一个开源的关系型数据库管理系统(Relational Database Management System),现在属于Oracle公司。

MySQL特性

(1) MySQL性能卓越、服务稳定,很少出现异常宕机
(2) MySQL开放源代码且无版权制约,自主性及使用成本低
(3) MySQL历史悠久,社区及用户活跃,遇到问题可以解决
(4) MySQL软件体积小,安装使用简单,并且易于文虎,安装及维护成本 低
(5) MySQL支持多用操作系统,提供多种API接口,支持多用开发语言

前期准备

官网下载MySQL5.7.29源码包。
官方网站:https://downloads.mysql.com/archives/community/
在这里插入图片描述
由于MySQL官方网站下载源码包有时下载速度非常慢,为此我将MySQL5.7.29的源码包和安装包都上传了,供大家下载!
地址:https://download.csdn.net/download/weixin_42526641/20559235

编译安装具体步骤

本次所有的操作都是建立在MySQL源码包以及上传到当前目录下

解决软件的依赖关系

yum  install cmake ncurses-devel gcc  gcc-c++  vim  lsof bzip2 openssl-devel ncurses-compat-libs -y

cmake:一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)
ncurses-devel:ncurses是字符终端下屏幕控制的基本库,devel代表的是开发库
gcc:C语言编译器
gcc-c++:C++语言编译器
lsof:查看端口的命令
bzip2:bzip2命令是.bz2文件的压缩程序
openssl-devel:是第三方软件开发时使用的Lib包,是用于编译的时候连接的库之类的文件
ncurses-compat-libs:支持安装程序的库

创建管理MySQL的用户和存放MySQL数据的目录

# 新建用户
useradd -r -s /sbin/nologin mysql

# 新建数据目录
mkdir -p /data/mysql

# 修改数据目录的拥有者为mysql
chown mysql:mysql /data/mysql

解压源码包

# 解压src的rpm包
rpm -ivh mysql-community-5.7.29-1.el7.src.rpm 

# 进入/root/rpmbuild目录
cd /root/rpmbuild/SOURCES

# 解压MySQL真正的源码包
tar xf mysql-5.7.29.tar.gz

# 解压boost源码包
tar xf boost_1_59_0.tar.bz2

# 将boost包移动到mysql解压的包里
mv boost_1_59_0 mysql-5.7.29

配置MySQL相关信息

# 进入解压后的目录
cd mysql-5.7.29
 
# 配置MySQL相关信息
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/sc_mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost_1_59_0

-DCMAKE_INSTALL_PREFIX=/usr/local/sc_mysql:
是编译安装MySQL的时候的固定语法参数,是给cmake传参的,告诉cmake去生成一个叫做Makefile的文件
指定MySQL安装的路径/usr/local/mysql,具体的路径可以自己定义
-DMYSQL_DATADIR=/data/mysql:
指定MySQL的存放数据的目录,目录的路径可以自定义
-DSYSCONFDIR=/etc:
指定mysql的配置文件存放的目录
-DMYSQL_USER=mysql:
指定启MySQL的用户,用户名可以自定义
-DDEFAULT_CHARSET=utf8:
指定MySQL里的默认的字符集
-DDEFAULT_COLLATION=utf8_general_ci:
排序规则,指定不区分大小写
-DWITH_BOOST=boost_1_59_0:
指定boost源码的位置,在MySQL源码的当前目录下一个叫做boost的文件夹,boost通过免费的经过同行评审的可移植的C++源库

真正开始编译安装

# 启动2个进程同时编译,2代表2个进程,建议进程数和cpu核心数量一致
make -j 2

# 安装编译好的二进制文件到指定的目录,放在当前目录下编译好的二进制文件到当时指定目录
make install

备份文件

# 备份原来的my.cnf配置文件,然后清空这个配置文件,这个文件是mariadb的,不是mysql的
cp /etc/my.cnf{,.bak}
>/etc/my.cnf

初始化MySQL

# 进入编译安装好的mysql的目录
cd /usr/local/sc_mysql/bin
# 执行mysqld这个程序,初始化我们的mysql,并且将日志和临时密码重定向到/root/temp_password.txt文件中
./mysqld --initialize --user=mysql --basedir=/usr/local/sc_mysql/ --datadir=/data/mysql &>/root/temp_password.txt

–initialize:初始化操作
–user=mysql:指定用户
–basedir=/usr/local/sc_mysql/:指定了安装 MySQL 的安装路径
–datadir=/data/mysql:指定了 MySQL 的数据库文件放在/data/mysql下
&>/root/temp_password.txt:并且将日志和临时密码重定向到对应文件中

将mysql指令写入环境变量里

# 临时修改PATH变量
PATH=$PATH:/usr/local/sc_mysql/bin
# 修改PATH变量,将mysql命令永久写入环境变量里
echo 'PATH=$PATH:/usr/local/sc_mysql/bin' >> /etc/bashrc

永久配置是要重新前端一个窗口才能生效,所有为了脚本后续的操作需要临时配置环境变量

拷贝mysqld

# 拷贝mysqld的程序文件到指定的目录,方便设置mysql开机启动,是MySQL服务的启动停止重启脚本
cp ../support-files/mysql.server /etc/init.d/mysqld

关闭防火墙和selinux

# 关闭防火墙
systemctl stop firewalld
# 禁用防火墙
systemctl disable firewalld
# 临时关闭selinux
setenforce 0
# 永久修改selinux配置文件的内容
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

为了后续的相关操作,需要关闭防火墙和selinux

启动MySQL服务

# 设置MySQL开机启动
chkconfig mysqld on

# 启动mysql
service mysqld start

这里需要注意的是在启动MySQL服务时应该使用service命令,不要使用systemctl命令,因为systemctl命令是主要针对yum安装的,使用它很有可能是服务启动不起来

登录MySQL并修改密码

# 登录进去MySQL并且重新设置密码Pp.123456
# 从保存的临时密码文件里,截取临时文件,赋值给一个变量tmp_pwd
temp_pwd=$(cat /root/temp_password.txt |tail -1 |awk '{print $NF}')
# 给MySQL设置密码为Pp.123456
mysql -uroot -p$temp_pwd --connect-expired-password -e "set password='Pp.123456'"

mysql -uroot -p$temp_pwd --connect-expired-password -e "set password=‘Pp.123456’”:是shell脚本操作MySQL语句

编译安装一键部署脚本

#!/bin/bash

# time 2021-7-17
# company: SC
########################################
# 编译安装mysql5.7.29
# os: CentOS Linux release 7.9.2009
########################################

# 假设MySQL源码包已经上传到当前目录下

#解决软件的依赖关系
yum  install cmake ncurses-devel gcc  gcc-c++  vim  lsof bzip2 openssl-devel ncurses-compat-libs -y

# 新建用户
useradd -r -s /sbin/nologin mysql

# 新建数据目录
mkdir -p /data/mysql

# 修改数据目录的拥有者为mysql
chown mysql:mysql /data/mysql

# 解压src的rpm包
rpm -ivh mysql-community-5.7.29-1.el7.src.rpm 

# 进入/root/rpmbuild目录
cd /root/rpmbuild/SOURCES

# 解压MySQL真正的源码包
tar xf mysql-5.7.29.tar.gz

# 解压boost源码包
tar xf boost_1_59_0.tar.bz2

# 将boost包移动到mysql解压的包里
mv boost_1_59_0 mysql-5.7.29

# 进入解压后的目录
cd mysql-5.7.29
 
# 配置MySQL相关信息
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/sc_mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost_1_59_0

# 开始编译安装
# 启动进程
make -j 2

# 安装编译好的二进制文件到指定的目录,放在当前目录下编译好的二进制文件到当时指定目录
make install

# 备份原来的my.cnf配置文件,然后清空这个配置文件,这个文件是mariadb的,不是mysql的
cp /etc/my.cnf{,.bak}
>/etc/my.cnf

# 进入编译安装好的mysql的目录
cd /usr/local/sc_mysql/bin
# 执行mysqld这个程序,初始化我们的mysql,并且将日志和临时密码重定向到/root/temp_password.txt文件中
./mysqld --initialize --user=mysql --basedir=/usr/local/sc_mysql/ --datadir=/data/mysql &>/root/temp_password.txt

# 临时修改PATH变量
PATH=$PATH:/usr/local/sc_mysql/bin
# 修改PATH变量,将mysql命令永久写入环境变量里
echo 'PATH=$PATH:/usr/local/sc_mysql/bin' >> /etc/bashrc

# 拷贝mysqld的程序文件到指定的目录,方便设置mysql开机启动,是MySQL服务的启动停止重启脚本
cp ../support-files/mysql.server /etc/init.d/mysqld

# 关闭防火墙
systemctl stop firewalld
# 禁用防火墙
systemctl disable firewalld
# 临时关闭selinux
setenforce 0
# 永久修改selinux配置文件的内容
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

# 设置MySQL开机启动
chkconfig mysqld on

# 启动mysql
service mysqld start

# 登录进去MySQL并且重新设置密码Pp.123456
# 从保存的临时密码文件里,截取临时文件,赋值给一个变量tmp_pwd
temp_pwd=$(cat /root/temp_password.txt |tail -1 |awk '{print $NF}')
# 给MySQL设置密码为Pp.123456
mysql -uroot -p$temp_pwd --connect-expired-password -e "set password='Pp.123456'"

echo '###### congratulation! your mysql has be installed successfully #####'

测试

查看服务

查看端口

lsof -i:3306

在这里插入图片描述

查看进程

ps aux|grep mysqld

在这里插入图片描述

登录MySQL

mysql -uroot -p'Pp.123456'

在这里插入图片描述

编译安装中遇到的问题

在这里插入图片描述

  1. [ERROR] --initialize specified but the data directory has files in it. Aborting.
    /zhang_data/mysql目录下已存在文件,终止运行。
    解决办法:rm -rf /zhang_data/mysql/*
  2. Check that your 0S and file system support files of this size. Check also that the disk is not full or a disk quota exceeded.
    主要意思是磁盘空间满了,无法存放MySQL安装的数据
    解决办法:清除磁盘中无意义的大文件

心得

通过对MySQL的编译安装让我对MySQL有了更深入的了解,也希望这篇文章能对大家有帮助!

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值