Loading...

引言

MySQL的源码安装,向来是各种运维的基础功底,趁着有空,拿台服务器安装一下最新版的MySQL8.2.0

踩坑传送门(ಥ _ ಥ)

下面这里是我总结的一些踩过的坑,和一些方便执行的命令,知道怎么搭建的,从这里复制一些方便的安装命令就行,对这些不大熟的可以跟着我往下看。

# 补充依赖 sudo yum -y install cmake gcc g++ ncurses-devel libtirpc-devel rpcgen libxml2-devel sqlite-devel libpng-devel oniguruma-devel wget pcre-devel vim # 下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.2/mysql-boost-8.2.0.tar.gz # 解压 tar -xzvf mysql-boost-8.2.0.tar.gz # 进入编译目录 cd mysql-8.2.0 mkdir myMakeDir cd myMakeDir # 预编译 cmake .. \ -DCMAKE_INSTALL_PREFIX=你的MySQL安装目录 \ -DMYSQL_DATADIR=你的MySQL数据目录 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_TCP_PORT=你的MySQL端口 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_BOOST=你的MySQL依赖boost的路径

另外,如果你像我一样,mysql编译速度特别慢,甚至到23%之类的时候就卡死,甚至完全占满内存的情况,就可以用下面这里提供的命令来处理。

(非必须)可临时增加服务器的交换内存大小,防止MySQL编译时报错

# 获取要增加的4G的SWAP文件块 sudo dd if=/dev/zero of=/server/data/swapfile bs=1k count=4096000 # 给这个文件赋权(root账号所有的情况下,600权限,比较安全) sudo chmod -R 600 /server/data/swapfile # 创建SWAP文件 sudo mkswap /server/data/swapfile # 激活SWAP文件 sudo swapon /server/data/swapfile # 查看交换内存情况 sudo swapon -s # 或可以用 sudo swapon --show 命令查看

修订记录

序号 修订日期 修订内容
1 2023.9.18 初始
2 2023.12.22 修正解压参数错误,补充依赖项安装

下载源码包

1. 找到甲骨文的MySQL官网

输入网址www.mysql.com进入MySQL的官网,然后找到DOWNLOADS菜单

就像我下面这张图一样

MySQL官网

MySQL官网

然后选择你需要的版本,我们这里选择的是Community版本,也就是社区版(俗称免费版)

找到下面的链接,点进去

下载菜单中,选择版本

下载菜单中,选择版本

2. 下载程序包/复制链接

在打开的页面里,选择社区服务器,这里主要是做一个初始的版本筛选

选择社区服务器

选择社区服务器

然后打开有几个复选框,注意选择General标准的,不要选旧的版本

选择最新

选择最新

有几个Select,选择最新版的Linunx版就行

最新的8.2.0

最新的8.2.0

然后选择下载包的形式,这里选源码包SourceCode

选择源码包

选择源码包

其他的基本是一键解压的程序包,不在本次教程的讲解范围内

这里有各个系统的版本选择,主要是红帽或者乌班图之类的,我们选择通用的源码包就行

系统版本选择

系统版本选择

然后在剩下的两个选项里,选择带boost的那一个。

点击右侧的Download按钮

下载包

下载包

记得把这里显示的MD5留下来,后面会用到

这里可以直接点击just start my download

直接选择下载

直接选择下载

也可以像我一样,右键复制链接

复制下载链接

复制下载链接

在服务器上找个位置,使用命令下载

当然,你也可以自己下载后上传到服务器上,毕竟这种方式可能会更快。

wget https://dev.mysql.com/get/Downloads/MySQL-8.2/mysql-boost-8.2.0.tar.gz

下载文件

下载文件

3. 校验MD5文件(可选)

下载下来文件之后,可以通过命令校验下载下来的文件包是否被人篡改过,可以使用命令

# 计算文件散列值 md5sum mysql-boost-8.2.0.tar.gz # 或者另一种方式:用计算出来的值进行查找,看下是否符合官网提供的MD5散列值 md5sum mysql-boost-8.2.0.tar.gz | grep 704ad9fb4779e76ce5e327285813c97c

这里命令执行后会稍微等一下,这个命令会计算这个文件的信息,最后显示出来这个文件的MD5散列值,你可以拿这个文件散列值跟上面提到的散列值进行对比,如果一致,就可以确定这个文件没有经过篡改,就是你官网上下载下来的文件。

计算文件散列

计算文件散列

检测是否与提供散列值一致

检测是否与提供散列值一致

编译、安装

1. 安装依赖(踩过的坑)

这里会描述很多我踩过的坑,如果你不想跟着我一块再踩一次的话,建议你在正式开始cmake之前,先去安装相关依赖先,免得浪费大量的时间。

安装命令如下

# 安装依赖(我自己一步一步踩坑摸索出来的) sudo yum -y install cmake gcc g++ ncurses-devel libtirpc-devel rpcgen

各位读者大大,如果觉得我写的对您还有点帮助的话,可以帮忙关注一下公众号吗?拜谢了~

微信公众号-拓行

微信公众号-拓行

2. 解压

刚刚我们说到用wget指令下载了一个名叫mysql-boost-8.2.0.tar.gz的压缩包,下面我们用tar命令来进行解压。

tar -xzvf mysql-boost-8.2.0.tar.gz

下载下来的压缩包

下载下来的压缩包

可以看到,命令执行完之后,就出现了一个mysql-8.2.0的源码包文件夹。

解压后的目录

解压后的目录

3. 创建相关目录

解压好之后,先不急着进行编译处理,正所谓,工欲善其事必先利其器,这里最好先确定目录结构

比如我:

服务文件存放位置:/server/mysql/8.2.0/

数据文件存放位置:/server/data/mysql8.2.0/

boost文件存放位置:/server/plugins/boost/boost_1_77_0/


boost源码包存放位置:/server/data/packages/boost_1_77_0.tar.bz2(解压前)

MySQL源码包存放位置:/server/data/packages/mysql-8.2.0(解压后)

MySQL源码包存放位置:/server/data/packages/mysql-boost-8.2.0.tar.gz(解压前)

创建MySQL的数据目录和服务目录

创建MySQL的数据目录和服务目录

这里最好在MySQL源码包内,额外新增一个myMakeDir的目录(当然,目录名称你自己随意改)

目的是为了在之后编译失败的时候,可以方便清除预编译的结果,再次重新开始的时候方便。

mkdir myMakeDir cd myMakeDir

创建编译目录

创建编译目录

创建完成后进入这个目录,我们要进入正题了。

4. 开始第一次预编译(cmake)

如果你跟我一样,出现这个错误,不用怀疑,乖乖回到上面引言部分,安装依赖吧。(后面还有几处类似的问题,如果你已经安装了依赖,基本不可能再出现了。。。想想就心酸)

未安装cmake程序

未安装cmake程序

我这一次安装的时候,还是比较天真,以为就安装一个就完了,结果后面……无穷无尽的报错等着我。

安装依赖的样子

安装依赖的样子

cmake版本

cmake版本

安装gcc和g++必备编译工具

安装gcc和g++必备编译工具

然后用这个命令进行预编译:

cmake .. \ -DCMAKE_INSTALL_PREFIX=/server/mysql/8.2.0 \ -DMYSQL_DATADIR=/server/data/mysql8.2.0 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_TCP_PORT=3306 \ -DMYSQL_USER=tx_mysql \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_BOOST=/server/plugins/boost/boost_1_77_0

然后重点来了,这里涉及到一个叫boost的东西,预编译的时候出现报错,导致整个命令断掉了。

缺少boost文件

缺少boost文件

这里我们按照他提示的链接,使用wget工具进行下载

wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2

下载提示的boost包

下载提示的boost包

下载下来的这个文件,我们给它用命令解压

tar -jxvf boost_1_77_0.tar.bz2

注意一下,这里的命令跟之前解压tar.gz文件不一样,tar命令带的参数是-jxvf因为这里后缀是tar.bz2

解压boost包

解压boost包

我这里没看清楚,还傻傻的去下载了unzip依赖,,闹笑话了。

然后创建好存放的目录(就是上面第3步的目录,如果已创建好,可以跳过)

mkdir -p /server/plugins/boost/boost_1_77_0

创建boost包存放目录

创建boost包存放目录

创建好之后将这个文件包内的内容移动过去,也可以复制后删除(个人习惯问题)

mv /server/data/packages/boost_1_77_0/* /server/plugins/boost/boost_1_77_0/

5. 清除预编译生成的文件

这时候我们可以进行第二次预编译了?答案是不行!

记得之前创建了个目录吗?进到这个目录里,把之前预编译生成的文件删掉,直接用命令就行:

注意:每次预编译失败后,打算进行下一次预编译,都需要删掉这个myMakeDir/目录下的所有文件

rm -rf /server/data/packages/mysql-8.2.0/myMakeDir/*

删除上次预编译生成的文件

删除上次预编译生成的文件

6. 开始第二次预编译

然后开始运行编译程序,发现又有报错。

缺少依赖appropriate

缺少依赖appropriate

没说的,,安装呗。按照下面提示的包名进行安装

安装依赖……

安装依赖……

结束之后,再进行清除编译生成的文件

清除编译文件

清除编译文件

7. 第NNNNN次预编译成功

等排除万难之后(基本就是上面的坑踩完,就能看到命令停了,没有报错)

大概是这个样子的:

cmake成功

cmake成功

然后……

万里长征,走了一小半了。

8. 开始编译前,配置交换内存

我现在是写教程,当时测的时候是一把梭下去的,如果你不想踩坑,最好听我一句劝,在这里,先配置一下交换内存(土豪配置拉满的话,当我没说)

命令很简单——

可临时增加服务器的交换内存大小,防止MySQL编译时报错

# 获取要增加的4G的SWAP文件块 sudo dd if=/dev/zero of=/server/data/swapfile bs=1k count=4096000 # 给这个文件赋权(root账号所有的情况下,600权限,比较安全) sudo chmod -R 600 /server/data/swapfile # 创建SWAP文件 sudo mkswap /server/data/swapfile # 激活SWAP文件 sudo swapon /server/data/swapfile # 查看交换内存情况 sudo swapon -s # 或可以用 sudo swapon --show 命令查看

一行行执行下去就好了,我这里当时忘了截图

应该是没啥问题的。

如果有问题,欢迎联系我,讨论讨论解决。

9. 开始实际编译

这时候,很简单的一行命令

make

就可以执行了。

可能是我的服务器比较拉跨,2核2G,网上说可以加参数,

make -j4

用4个编译器同时进行工作,速度会很快,但我用这种命令,进度到了23%就死活不走了,CPU倒是不高,但io拉满(查看服务器信息是读的操作居多,怀疑是多个编辑器同时工作导致CPU不断从磁盘抢着读导致问题),最后无奈重启。

四个编译器同时工作

四个编译器同时工作

我建议大家如果不赶时间的话,最好还是简单make就好了。

哦对了,如果中途中断或者报错后,记得使用下面命令进行编译数据清除(不是删除文件了,别弄错)

make clean

一路上,各种绿色的画面,是最赏心悦目的了!!!

编译中……

编译中……

如果,你看到你的编译进程突然停下来了,左侧的进度数,达到了100%,不用怀疑,你成了!

编译成功

编译成功

10. 开始安装

这时候输入命令:

make install

手不抖,,心不慌。

等着。

开始安装

开始安装

有很多网上教程都是教的要make && make install,我就不建议这样做,因为2个命令夹杂在一起,很容易出现问题,报错都不知道是哪个原因导致的。

然后看到下面的效果,就代表安装完成了!

安装完成

安装完成

这时候可以看一下你的服务目录下是否有文件:

查看服务文件是否存在

查看服务文件是否存在

至此安装完成。

配置MySQL信息

1. 初始化MySQL

首先来到mysql的安装目录下,比如我的是:

/server/mysql/

使用命令:

./mysqld --initialize-insecure --character-set-server=utf8mb4

解释:

  1. 首先,这里是执行mysqld的脚本,这个脚本是MySQL的服务程序
  2. 这个--initialize-insecure表示用空密码进行root账号的初始
  3. --character-set-server=utf8mb4代表指定字符集,这种字符集是MySQL推荐使用的
  4. 可以使用--defaults-file参数进行指定配置文件所在位置(有个小坑,要注意放在最前面)
  5. 另外还支持一个--user=mysql的方式指定启动账号(需要root权限)
  6. 如果你不使用上面的--initialize-insecure,也可以用--initialize参数,这将会产生一个临时密码,随机的

初始化数据库

初始化数据库

这里可以看到有提示,显示已经初始化root账号了。

2. 尝试启动服务

跟初始化一样,这里可以用命令启动

./mysqld --character-set-server=utf8mb4

注意!这里千万不能带--initialize-insecure这个参数,已经初始化的MySQL如果想要再次初始化,需要先删除数据目录,或者指定新的数据目录。

第一次启动mysqld进程时,我建议不要用&符号启动,便于观察问题

启动后如果没有任何报错,那么,就算是启动成功了。

此时你的命令行应该是被mysqld服务给占用了,我们重新打开一个新的终端。

使用ps命令来查看一下进程信息

ps -aux | grep mysqld

你会看到有一个进程是当前用户启动的,也能看到进程号。

那么就是启动成功了。

这时候还可以去检测一下端口号

netstat -anp | grep mysql

会发现这种新版MySQL,监测了2个端口,分别是330633060端口

那么我们现在杀掉刚刚的进程号,使用命令

kill 进程号

然后发现刚刚那个被占用的终端就停止了,原本Ctrl + C都停不下来的MySQL也没了,查看进程信息和端口占用也没有了。

3. 正式启动服务并挂起

还是我们刚刚那个命令,不同的是要加上&符号,表示常驻

./mysqld --character-set-server=utf8mb4 &

这时候发现会有打印,但控制台不会一直占用了。

再次检测端口和进程信息,也是正常的。

4. 使用mysql脚本尝试连接MySQL服务

我们可以看到,在./bin目录下,有一些脚本文件,这是MySQL官方提供给我们便捷使用的脚本,我们可以用其中的mysql脚本进行测试连接。

输入命令:

./bin/mysql -uroot -p

如果你上面初始化的时候用的是--initialize-insecure参数,那这里连接的时候,请不要加上-p参数,并且连接命令应该为:mysql -u root --skip-password

如果你用的是--initialize参数,可以在输入-p参数回车之后,输入你初始化时提示的默认密码然后回车。

当你看到你的控制台有MySQL版本信息输出的时候,就代表你连接成功了。

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 16 Server version: 8.2.0 Source distribution Copyright (c) 2000, 2023, Oracle and/or its affiliates. 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>

5. 修改密码

当你连接上服务之后,需要进行密码修改,否则你什么操作都无法完成!

修改的SQL语句:

# 修改新密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '你root账号的新密码'; # 刷新写入磁盘 flush privileges;

注意,这里的SQL语句,每一句后面都需要有分号结尾!

好了,到此为止,MySQL就已经完全安装到你的机器上了,至于更多的内容,可以参考MySQL官方文档。

附上这部分的官网文档链接:

https://dev.mysql.com/doc/refman/8.2/en/data-directory-initialization.html

参考链接和资料

https://blog.csdn.net/glovenone/article/details/132409821

这个大佬的博客确实能够创建出交换内存,但不知道为什么,依然会卡死,无法继续编译

https://blog.csdn.net/web_snail/article/details/112323634

这个大佬的博文确实能够正常创建,也能够继续编译成功,但会有提示权限问题


欢迎关注拓行公众号,分享各种技术博客文章

拓行——奋勇进取,开拓未来,砥砺前行

最后修改:2023 年 12 月 22 日
如果您对各种技术博客文章感兴趣,欢迎关注拓行公众号,分享各种专业技术知识~