引言
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
菜单
就像我下面这张图一样
然后选择你需要的版本,我们这里选择的是Community
版本,也就是社区版(俗称免费版)
找到下面的链接,点进去
2. 下载程序包/复制链接
在打开的页面里,选择社区服务器,这里主要是做一个初始的版本筛选
然后打开有几个复选框,注意选择General
标准的,不要选旧的版本
有几个Select
,选择最新版的Linunx
版就行
然后选择下载包的形式,这里选源码包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
源码包内,额外新增一个myMakeDir
的目录(当然,目录名称你自己随意改)
目的是为了在之后编译失败的时候,可以方便清除预编译的结果,再次重新开始的时候方便。
mkdir myMakeDir
cd myMakeDir
创建完成后进入这个目录,我们要进入正题了。
4. 开始第一次预编译(cmake)
如果你跟我一样,出现这个错误,不用怀疑,乖乖回到上面引言
部分,安装依赖吧。(后面还有几处类似的问题,如果你已经安装了依赖,基本不可能再出现了。。。想想就心酸)
我这一次安装的时候,还是比较天真,以为就安装一个就完了,结果后面……无穷无尽的报错等着我。
然后用这个命令进行预编译:
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
的东西,预编译的时候出现报错,导致整个命令断掉了。
这里我们按照他提示的链接,使用wget
工具进行下载
wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2
下载下来的这个文件,我们给它用命令解压
tar -jxvf boost_1_77_0.tar.bz2
注意一下,这里的命令跟之前解压tar.gz
文件不一样,tar
命令带的参数是-jxvf
因为这里后缀是tar.bz2
我这里没看清楚,还傻傻的去下载了unzip
依赖,,闹笑话了。
然后创建好存放的目录(就是上面第3步的目录,如果已创建好,可以跳过)
mkdir -p /server/plugins/boost/boost_1_77_0
创建好之后将这个文件包内的内容移动过去,也可以复制后删除(个人习惯问题)
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. 开始第二次预编译
然后开始运行编译程序,发现又有报错。
没说的,,安装呗。按照下面提示的包名进行安装
结束之后,再进行清除编译生成的文件
7. 第NNNNN次预编译成功
等排除万难之后(基本就是上面的坑踩完,就能看到命令停了,没有报错)
大概是这个样子的:
然后……
万里长征,走了一小半了。
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
解释:
- 首先,这里是执行
mysqld
的脚本,这个脚本是MySQL
的服务程序 - 这个
--initialize-insecure
表示用空密码进行root
账号的初始 --character-set-server=utf8mb4
代表指定字符集,这种字符集是MySQL
推荐使用的- 可以使用
--defaults-file
参数进行指定配置文件所在位置(有个小坑,要注意放在最前面) - 另外还支持一个
--user=mysql
的方式指定启动账号(需要root权限) - 如果你不使用上面的
--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个
端口,分别是3306
和33060
端口
那么我们现在杀掉刚刚的进程号,使用命令
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
这个大佬的博文确实能够正常创建,也能够继续编译成功,但会有提示权限问题