在CentOS服务器上通过源码编译安装MySQL,虽然步骤比直接yum安装多几步,但能更灵活地控制版本、组件和性能参数。适合对数据库有定制化需求的生产环境或学习场景。下面按实际执行顺序梳理完整流程,跟着做即可顺利部署。
准备编译环境与依赖包
源码编译需要完整的开发工具链和相关库文件。先更新系统软件源,然后安装gcc、make、cmake、ncurses-devel、openssl-devel、bison等基础依赖。命令如下:
yum install -y gcc gcc-c++ make cmake ncurses-devel openssl-devel bison git libaio
等待所有依赖安装完成后,确保系统时间准确,避免后续初始化出现证书或日志报错。如果服务器在内网环境,需要提前下载好相关rpm包并手动安装。
下载并解压MySQL源码包
访问MySQL官网或开源镜像站,获取对应版本的源码压缩包。推荐使用稳定版如mysql-8.0.xx.tar.gz。将安装包上传至服务器的临时目录,例如/tmp/mysql_src,然后执行解压操作。
tar -zxvf mysql-8.0.xx.tar.gz
解压后进入mysql-8.0.xx目录,这里会包含全部C++源码和构建脚本。建议提前创建好MySQL的安装目录和数据目录,比如/usr/local/mysql和/data/mysql,避免权限混乱。
配置编译参数
使用cmake进行项目配置是核心步骤。根据实际需求调整路径、字符集和插件选项。典型命令如下:
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc/my.cnf.d -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DENABLED_LOCAL_INFILE=1
参数说明很直观:安装路径、数据目录、配置文件位置、开启InnoDB引擎、默认字符集设为utf8mb4支持完整emoji,以及允许本地导入数据。配置成功后终端会显示Build files have been written to提示,表示生成Makefile成功。
执行编译与安装
编译阶段比较耗时,主要消耗CPU和内存资源。建议分配至少4核8G的服务器配置,单核机器可能需要数小时。执行以下命令开始编译:
make -j$(nproc)
加上-j参数可以调用所有可用核心加速编译。没有报错就继续下一步:
make install
安装过程会自动把二进制文件、库文件和头文件复制到指定路径。完成后检查/usr/local/mysql/bin下是否有mysqld、mysql等可执行文件,确认安装到位。
初始化数据库与创建系统用户
MySQL不会自动创建运行账户,需要手动添加mysql用户和组,并授权目录权限。执行:
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown -R mysql:mysql /usr/local/mysql /data/mysql
接着使用mysqld命令完成首次初始化,生成系统库和随机密码。命令格式为:
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
注意观察终端最后输出的临时root密码,务必记录保存。初始化成功后,/data/mysql目录下会生成ibdata1、mysql等多个系统文件夹。
启动服务与安全设置
将MySQL加入系统服务管理,方便开机自启和状态查看。复制support-files下的mysql.server到/etc/init.d/,并赋予执行权限。然后启动服务:
systemctl start mysqld
若使用传统init脚本则用service mysqld start。服务起来后,用刚才记录的临时密码登录MySQL客户端:
/usr/local/mysql/bin/mysql -u root -p
登录后第一件事就是修改root密码并关闭远程空账号风险:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的强密码';
FLUSH PRIVILEGES;
之后可按需创建业务账号,限制访问IP范围。日常运维建议配合systemctl enable mysqld实现开机自启,并通过firewalld或iptables放行3306端口。
编写配置文件与常见排错
源码安装的MySQL默认不会自动生成my.cnf文件,需要手动创建。在/etc/my.cnf.d/目录下新建server.cnf,写入基础参数如innodb_buffer_pool_size、max_connections、log_error路径等。写入后重启服务生效。编译过程中最容易卡在依赖缺失或磁盘空间不足。遇到cmake报错时,仔细核对错误日志里缺少的lib文件,补充安装对应devel包即可。另外,编译期间务必保证/data分区有足够剩余空间,通常预留十GB以上比较稳妥。初始化阶段若提示找不到libaio,说明异步IO库未安装,执行yum install libaio-devel再重试。生产环境部署完成后,建议定期备份/data/mysql目录和systemd服务状态,防止误操作导致数据丢失。



