1.环境
虚拟机环境,个人玩耍,当然要使用虚拟机,不然哪有那么多钱,买那么多电脑,哪怕你去买阿里云,也只不过是虚拟机。
虚拟机运行系统:Virtual Box
操作系统:Rocky9.6
2.安装依赖
我的这台用于试验的虚拟机系统,目前啥都还没有安装,所以从依赖开始安装,安装MySQL需要安装最小的依赖如下:
如果以上依赖都还没有安装,那么命令如下:
sudo dnf install -y gcc gcc-c++ make cmake ncurses-devel openssl-devel openssl bison libaio-devel zlib-devel libtirpc-devel libcurl-devel wget tar
当然,我不想重复安装,所以我在安装之前,检查了一遍依赖是否已经安装了
rpm -q gcc
rpm -q gcc-c++
rpm -q make
rpm -q cmake
rpm -q ncurses-devel
rpm -q openssl-devel
rpm -q openssl
rpm -q bison
rpm -q libaio-devel
rpm -q zlib-devel
rpm -q libtirpc-devel
rpm -q libcurl-devel
rpm -q wget
rpm -q tar
其中,openssl、wget、tar 我已经安装了,所以省略,最终我的安装命令如下:
sudo dnf install -y gcc gcc-c++ make cmake ncurses-devel openssl-devel bison libaio-devel zlib-devel libtirpc-devel libcurl-devel
在运行命令时,先运行
sudo dnf config-manager --set-enabled crb
sudo dnf install -y epel-release # 安装 EPEL 仓库
sudo dnf clean all # 清除包管理器缓存
sudo dnf makecache # 强制重新下载并生成仓库元数据缓存
因为libtirpc-devel找不到安装包,这样就可以了。
3.下载解压
创建源码目录,保持系统简洁,有利于管理源码。
sudo mkdir -p /usr/local/src/mysql
cd /usr/local/src/mysql
下载
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.36.tar.gz
tar xzf mysql-8.0.36.tar.gz
4.安装准备
4.1.创建安装目录
sudo mkdir -p /u01/mysql
4.2.创建用户和组
sudo groupadd mysql # 创建组
sudo useradd -r -g mysql -s /bin/false mysql # 创建用户mysql并且组是mysql,设置
-s /bin/false 选项设置新用户的默认 Shell 为 /bin/false 。这意味着该用户无法使用 Shell 进行交互式登录系统。
4.3.编译配置
cd mysql-8.0.36
创建编译目录并进行配置
mkdir build
cd build
cmake .. \
-DWITH_BOOST=../boost \
-DCMAKE_INSTALL_PREFIX=/u01/mysql \ # 主程序安装路径改为/u01/mysql
-DMYSQL_DATADIR=/u01/mysql/data \ # 数据目录同步改为/u01/mysql/data
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ # 套接字路径保持默认,避免权限问题
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_SYSTEMD=1
运行后,出错
需要安装
yum install gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc
安装完后,再次运行
tar xfj
/usr/local/src/mysql/mysql-8.0.36/boost/boost_1_77_0.tar.bz2解压失败。那就重新下载呗
我试了很多个下载地址,包括官网下载,文件都是不对的。下面这个是正确的包
wget https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.bz2
验证,解压
file boost_1_77_0.tar.bz2
tar -xjf boost_1_77_0.tar.bz2
重新运行 cmake,出现下面错误
缺少 rpcgen 工具,重新安装
sudo dnf install -y libtirpc-devel rpcgen
验证
which rpcgen
清理,重新运行 CMake
rm CMakeCache.txt
# 用以下命令,有调整
cmake .. -DWITH_BOOST=../boost -DWITH_GROUP_REPLICATION=ON -DDOWNLOAD_BOOST=1 -DCMAKE_INSTALL_PREFIX=/u01/mysql -DMYSQL_DATADIR=/u01/mysql/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=bundled -DWITH_LIBWRAP=0 -DENABLED_LOCAL_INFILE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_SYSTEMD=1
5.编译并安装
编译
# 编译(根据CPU核心数调整-j参数,加速编译)
make -j$(nproc) # 这个编译很慢,建议 make 就行
安装
sudo make install
6.配置权限
sudo chown -R mysql:mysql /u01/mysql
7.初始化数据库
cd /u01/mysql
sudo bin/mysqld --initialize --user=mysql --basedir=/u01/mysql --datadir=/u01/mysql/data
8. 配置系统服务
touch /etc/systemd/system/mysqld.service
nano /etc/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/u01/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/u01/mysql --datadir=/u01/mysql/data --plugin-dir=/u01/mysql/lib/plugin
LimitNOFILE=5000
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
创建配置文件
touch /etc/my.cnf
编辑 nano/etc/my.cnf
[mysqld]
basedir=/u01/mysql
datadir=/u01/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/u01/mysql/data/error.log
pid-file=/u01/mysql/data/mysql.pid
配置开机启动
sudo systemctl daemon-reload # 修改配置需要执行
sudo systemctl enable mysqld
9.启动
启动
sudo systemctl start mysqld
查看状态
sudo systemctl status mysqld
权限,一般都是SELinux策略阻碍了运行:
# 修正数据目录权限
sudo chown -R mysql:mysql /u01/mysql/data
sudo chmod -R 750 /u01/mysql/data
# 修正插件目录权限
sudo chown -R mysql:mysql /u01/mysql/lib/plugin
sudo chmod -R 750 /u01/mysql/lib/plugin
# 修正MySQL安装目录权限
sudo chown -R mysql:mysql /u01/mysql
sudo chmod -R 755 /u01/mysql
sudo chcon -R -t mysqld_db_t /u01/mysql/data
# 确保 mysql 用户可读
sudo chmod 644 /etc/my.cnf # 保持当前权限(理论上够用,但需结合 SELinux)
# 更严格的权限(推荐)
sudo chmod 640 /etc/my.cnf
sudo chown root:mysql /etc/my.cnf # 确保 mysql 组可读
sudo chcon -t etc_t /etc/my.cnf
# 安装策略工具(若未安装)
sudo yum install policycoreutils-python-utils -y (已安装略)
# 生成并加载自定义策略
sudo grep mysqld /var/log/audit/audit.log | audit2allow -M mysqld_custom
sudo semodule -i mysqld_custom.pp
# 设置必要的布尔值
sudo setsebool -P mysqld_connect_any=1 mysqld_write_data=1
# 标准路径标签修复
sudo semanage fcontext -a -t mysqld_db_t "/u01/mysql/data(/.*)?"
sudo semanage fcontext -a -t bin_t "/u01/mysql/bin(/.*)?"
sudo restorecon -Rv /u01/mysql
# 验证服务文件路径
sudo cat /etc/systemd/system/mysqld.service | grep -E 'ExecStart|User'
# 重载服务配置
sudo systemctl daemon-reload
重启,停止
sudo systemctl restart mysqld
sudo systemctl sop mysqld
登录测试
查初始化密码,我查不到,然后用一下方式重置密码
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;" > /tmp/reset.sql
sudo chown mysql:mysql /tmp/reset.sql
sudo -u mysql /u01/mysql/bin/mysqld --init-file=/tmp/reset.sql --console &
/u01/mysql/bin/mysql -u root -p
重新修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
完成验证。