【mysql】Linux编译安装mysql5.7

Linux下编译安装mysql5.7

前言:mysql目前已经出到了8.0版本,但是5.7版本仍然是企业中使用最广泛的版本,本文章大量参考了官方文档,并做了较为详细的解读,读者如要安装其他版本仍可作为参考。

1、环境准备

官方描述:
如果您以前使用操作系统本机软件包管理系统(例如Yum或APT)安装了MySQL,则在使用本机二进制文件安装时可能会遇到问题。确保以前的MySQL安装已完全删除(使用程序包管理系统),并且所有其他文件(例如数据文件的旧版本)也已删除。您还应该检查配置文件(例如/etc/my.cnf 或/etc/mysql目录)并删除它们。

在这里我们不细讲如何净化环境,因为无论是企业级配置还是学习时,我们大多是直接使用纯净的系统的,但是如果有需求的话,可以参考这篇文章:
https://www.cnblogs.com/javahr/p/9245443.html

2、获取源码包

从官方提供的地址下载mysql的源码包:
https://dev.mysql.com/downloads/mysql/

本文以安装mysql5.7.32为例,如下载其他版本,请注意后续安装差别。

[root@localhost ~] ls
anaconda-ks.cfg  mysql-community-5.7.32-1.el7.src.rpm

3、解压

1、解rpm包

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

???

警告:用户pb2user 不存在 - 使用root
警告:群组common 不存在 - 使用root

陈年老bug了,13年就出过,无视它,不影响。

2、下载各种依赖包&编译工具

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

3、进入解压后的编译目录

cd /root/rpmbuild/SOURCES

4、解压真正的tar包

tar xf mysql-5.7.32.tar.gz

5、解压boost并放入mysql目录

tar xf boost_1_59_0.tar.bz2
mv boost_1_59_0 mysql-5.7.32

boost用于解决c++库支持问题,mysql依赖这个软件。

4、进行编译前的配置

1、建立一个程序用户

useradd -r -s  /sbin/nologin   mysql

2、自定义一个存放mysql数据的目录

mkdir   -p  /data/mysql

3、修改数据目录的拥有者

chown  mysql:mysql  /data/mysql

4、进入编译目录

cd mysql-5.7.32/

5、生成一个MakeFile文件用于编译

cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/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:是编译安装Mysql的时候的固定语法参数,是给cmake传参的,告诉cmake去指定路径生成一个叫做Makefile的文件

-DMYSQL_DATADIR:指定Mysql的存放数据的目录,具体的路径可以自己定义

-DSYSCONFDIR:指定MYSQL的配置文件存放的目录

-DMYSQL_USER:指定启动mysql的用户,用户名可以自己定义

-DDEFAULT_CHARSET:指定MySQL里的默认的字符集

-DDEFAULT_COLLATION:排序规则,utf8_general_ci 是utf8里的排序规则,不区分大小写

-DWITH_BOOST:指定boost源码的位置,我们已经将其放入了当前目录

6、编译安装

make && make install

注:如果希望加快编译,可以启用多个进程,但是需要更多的内核和内存的支持(选用!!!)

make -j 2 # 指定两个进程编译

5、编译完成后的配置

1、备份并清空my.cnf文件

cp /etc/my.cnf /root/mysql.cnf.bak
>/etc/my.cnf

这个/etc/my.cnf文件是Linux自带的mariadb的配置文件,为了不引起冲突,我们将它移走并清空。

2、进入安装目录

cd  /usr/local/mysql/bin

3、初始化mysql并提取临时密码

./mysqld --initialize  --user=mysql --basedir=/usr/local/mysql/  --datadir=/data/mysql  &>/root/temp_password.txt

4、修改PATH变量使Linux识别mysql命令

PATH=$PATH:/usr/local/mysql/bin
echo  'PATH=$PATH:/usr/local/mysql/bin' >>/etc/bashrc

5、拷贝mysqld程序文件至指定目录,为后续设置mysqld开机启动做准备

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

6、关闭防火墙和核心防护

1、临时关闭防火

service firewalld stop   

2、永久关闭防火墙

systemctl  disable firewalld

3、临时关闭selinux

setenforce 0

4、永久关闭selinux

sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

7、设置mysql开启自启动

chkconfig mysqld on

8、芜湖起飞

service  mysqld  start

9、将临时密码修改为990331(自定义)

temp_pwd=$(cat /root/temp_password.txt |tail -1|awk '{print $11}')
mysql -uroot -p$temp_pwd  --connect-expired-password -e "set password='990331'"

6、登录验证

1、使用ps命令查看mysql服务是否开启

[root@localhost ~] ps aux|grep mysql
root     14156  0.0  0.0  11820  1588 pts/0    S    13:33   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.localdomain.pid
mysql    14243  0.0  8.9 1601356 168728 pts/0  Sl   13:33   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=localhost.localdomain.err --pid-file=/data/mysql/localhost.localdomain.pid
root     15071  0.0  0.0 112824   976 pts/0    S+   13:58   0:00 grep --color=auto mysql

2、用户名密码登录!

[root@localhost ~] mysql -uroot -p990331
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.32 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

成功!

后记:
本文涉及到大量的Linux基础知识,初学者可能不甚理解,也不必太过纠结。
大家如果遇到什么问题,可以在评论区一起探讨。

你可能感兴趣的:(mysql,Linux,mysql,centos,linux)