前言:mysql目前已经出到了8.0版本,但是5.7版本仍然是企业中使用最广泛的版本,本文章大量参考了官方文档,并做了较为详细的解读,读者如要安装其他版本仍可作为参考。
官方描述:
如果您以前使用操作系统本机软件包管理系统(例如Yum或APT)安装了MySQL,则在使用本机二进制文件安装时可能会遇到问题。确保以前的MySQL安装已完全删除(使用程序包管理系统),并且所有其他文件(例如数据文件的旧版本)也已删除。您还应该检查配置文件(例如/etc/my.cnf 或/etc/mysql目录)并删除它们。
在这里我们不细讲如何净化环境,因为无论是企业级配置还是学习时,我们大多是直接使用纯净的系统的,但是如果有需求的话,可以参考这篇文章:
https://www.cnblogs.com/javahr/p/9245443.html
从官方提供的地址下载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
rpm -ivh mysql-community-5.7.32-1.el7.src.rpm
???
警告:用户pb2user 不存在 - 使用root
警告:群组common 不存在 - 使用root
陈年老bug了,13年就出过,无视它,不影响。
yum install cmake ncurses-devel gcc gcc-c++ openssl-devel bzip2 vim lsof -y
cd /root/rpmbuild/SOURCES
tar xf mysql-5.7.32.tar.gz
tar xf boost_1_59_0.tar.bz2
mv boost_1_59_0 mysql-5.7.32
boost用于解决c++库支持问题,mysql依赖这个软件。
useradd -r -s /sbin/nologin mysql
mkdir -p /data/mysql
chown mysql:mysql /data/mysql
cd mysql-5.7.32/
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源码的位置,我们已经将其放入了当前目录
make && make install
注:如果希望加快编译,可以启用多个进程,但是需要更多的内核和内存的支持(选用!!!)
make -j 2 # 指定两个进程编译
cp /etc/my.cnf /root/mysql.cnf.bak
>/etc/my.cnf
这个/etc/my.cnf文件是Linux自带的mariadb的配置文件,为了不引起冲突,我们将它移走并清空。
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql &>/root/temp_password.txt
PATH=$PATH:/usr/local/mysql/bin
echo 'PATH=$PATH:/usr/local/mysql/bin' >>/etc/bashrc
cp ../support-files/mysql.server /etc/init.d/mysqld
service firewalld stop
systemctl disable firewalld
setenforce 0
sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
chkconfig mysqld on
service mysqld start
temp_pwd=$(cat /root/temp_password.txt |tail -1|awk '{print $11}')
mysql -uroot -p$temp_pwd --connect-expired-password -e "set password='990331'"
[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
[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基础知识,初学者可能不甚理解,也不必太过纠结。
大家如果遇到什么问题,可以在评论区一起探讨。