编译安装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'
编译安装中遇到的问题
- [ERROR] --initialize specified but the data directory has files in it. Aborting.
/zhang_data/mysql目录下已存在文件,终止运行。
解决办法:rm -rf /zhang_data/mysql/* - 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有了更深入的了解,也希望这篇文章能对大家有帮助!