linux通过源码编译安装mysql

  • 操作系统:CentOS 7
  • MySQL版本:5.7.29

MySQL源码编译安装比较复杂,但是具有高度自定义的优点。

一、下载MySQL源码包

下载地址:https://downloads.mysql.com/archives/community/
linux通过源码编译安装mysql
我是在Windows中下载的,下载好后上传到Linux系统中。我就把源码包放到家目录下。
linux通过源码编译安装mysql

二、具体安装步骤

第一步:下载软件依赖

把接下来安装过程中所需要的软件下载好。

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

第二步:解压源码包

把之前传到Linux下的.src.rpm文件包解压。

rpm -ivh mysql-community-5.7.29-1.el7.src.rpm

解压后如下图所示。很明显在家目录下多了一个rpmbuild目录。
linux通过源码编译安装mysql

进入./rpmbuild/SOURCES目录,真正的源码包就存放在这个目录下。这个目录下有如下文件。
linux通过源码编译安装mysql
mysql-5.7.29.tar.gz就是源码所在的压缩包。还有一个boost_1_59_0.tar.bz2包,这是Boost的包。

Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。 ——摘自百度百科

把mysql-5.7.29.tar.gz和boost_1_59_0.tar.bz2包解压。

tar xf mysql-5.7.29.tar.gz
tar xf boost_1_59_0.tar.bz2

将解压后的boost包目录移动到解压后的mysql包目录下,当然也可以不移动,在之后进行编译前的配置的时候使用绝对路径就好了。

第三步:进行编译前的配置

# 进入解压后的mysql包
cd mysql-5.7.29
# 新建一个无家目录且禁止登录的用户mysql,这个用户是linux系统用来启动MySQL的。
useradd -r -s /sbin/nologin mysql
# 新建一个给MySQL存放数据的目录
mkdir -p /data/mysql
# 修改数据目录的属主为mysql用户
chown mysql:mysql /data/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
  • cmake 是一个编译器,就是将c语言编写的代码翻译成机器可以执行的二进制的程序。
  • -DCMAKE_INSTALL_PREFIX 是编译安装MySQL的时候的固定语法参数,是给cmake传参的,指定MySQL安装的路径/usr/local/mysql,同时生成一个Makefile文件。具体的路径可以自己定义。
  • -DMYSQL_DATADIR=/data/mysql 指定MySQL的存放数据的目录,具体的路径可以自己定义。
  • -DSYSCONFDIR=/etc 指定MySQL的配置文件存放的目录。
  • -DMYSQL_USER=mysql 指定启动mysql的用户,用户名可以自己定义。
  • -DDEFAULT_CHARSET=utf8 指定MySQL里的默认的字符集,推荐指定默认的字符集为utf8。
  • -DDEFAULT_COLLATION=utf8_general_ci COLLATION 排序规则。utf8_general_ci即utf8里的排序规则,不区分大小写。
  • -DWITH_BOOST=boost_1_59_0 指定boost源码的位置。因为我之前将boost那个包解压后放到mysql-5.7.29目录下,所以在这里使用相对路径。

编译安装的时候,非常消耗cpu资源:因为编译是将c语言代码翻译成二进制代码,非常消耗cpu,不是特别消耗内存。

第四步:安装编译好的二进制文件到指定的目录

make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

make install

第五步:清空配置文件

mysql的配置文件在/etc下的my.cnf,这个文件是mariadb的配置文件,不是MySQL的配置文件,将其清空,MySQL会更新配置文件到这个文件。

>/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

第七步:修改PATH变量

修改PATH变量的目的是在linux系统里可以找到我们编译安装的mysql相关的命令。

# 将新的PATH变量重定向到/etc/bashrc文件
echo ‘PATH=$PATH:/usr/local/sc_mysql/bin‘ >>/etc/bashrc

记得刷新一下环境变量。

source /etc/bashrc

第八步:拷贝mysqld的程序文件到指定的目录

这一步的目的是方便后面设置mysqld服务开机启动。

cp ../support-files/mysql.server /etc/init.d/mysqld

第九步:关闭防火墙和selinux

#关闭防火墙firewalld服务
service firewalld stop   
#设置firewalld服务开机不启动
systemctl  disable firewalld
#临时关闭selinux
setenforce 0
#永久修改selinux配置文件里的内容
sed -i ‘s/=enforcing/=disabled/g‘ /etc/selinux/config

第十步:启动MySQL并设置MySQL开机启动

# 启动MySQL
service mysqld start
# 设置开机启动MySQL
chkconfig mysqld

第十一步:登录MySQL并重设密码

#从保存的临时密码文件里,截取出临时密码,赋值给一个变量temp_pwd
temp_pwd=$(cat /root/temp_password.txt |tail -1|awk ‘{print $11}‘)
#给MySQL设置密码为Sanchuang123#
mysql -uroot -p$temp_pwd  --connect-expired-password -e "set password=‘MySqlroot123#‘"

确认一下是否安装成功。
linux通过源码编译安装mysql
再试试用修改后的密码登录MySQL。
linux通过源码编译安装mysql

linux通过源码编译安装mysql

上一篇:Apache 提供的3种不同方式访问web的方法


下一篇:MariaDB 存储引擎一览(官方文档翻译)