注:本次编译MySQL-5.7.19使用Linux(CentOS7)系统
在编译前 yum -y install make gcc-c++ bison-devel (Ubuntu和Debian 使用apt-get 安装)
make,Linux下非常重要的编译工具,最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作。
gcc-c++,C++ 编译器(gcc,C编译器)
bison-devel 一个语法分析器生成器
下载MySQL源代码
https://dev.mysql.com/downloads/mysql/
下载选项:
- Source Code -> 源代码
- Generic Linux (Architecture Independent) -> 通用的Linux(独立结构)
- Compressed TAR Archive,Includes Boost Headers -> 选择带有Boost头的压缩包(MySQL需要Boost C++库构建)
wget https://dev.mysql.com/get/Dow...
tar xzf mysql-boost-5.7.19.tar.gz
mv mysql-5.7.19 /usr/local/mysql #移动MySQL源码到 /usr/local 目录下
从源安装MySQL,需要安装CMake
cmake,一个跨平台的编译自动配置工具(作用生成makefile 文件)
wget https://cmake.org/files/v3.9/cmake-3.9.0.tar.gz
tar xzf cmake-3.9.0.tar.gz
cd cmake-3.9.0
./configure --prefix=/usr/local/cmack #根据需要填写安装路径
make && make install
不想编译安装可以直接:yum -y install cmake
开始安装MySQL
cd /usr/local/mysql
#使用 cmake 来编译MySQL(yum安装的直接 cmake 不用加路径)
/usr/local/cmake/bin/cmake . -DWITH_BOOST=/usr/local/mysql/boost #根据需要调整路径以匹配您的安装
缺少 ncurses-devel 直接 yum -y install ncurses-devel (debian/ubuntu 是 apt-get install libncurses5-dev)
要防止使用旧的对象文件或配置信息,请在重新运行CMake之前在Unix上的构建方案中运行以下命令
make clean
rm -f CMakeCache.txt
在次使用 cmake 编译MySQL
/usr/local/cmake/bin/cmake . -DWITH_BOOST=/usr/local/mysql/boost
make
内存不足,在Linux下增加临时 swap 空间 (ps:因为博主穷,服务器配置不高;不出现此问题就跳过)
解决方法:http://blog.csdn.net/razertang/article/details/45694567
make
make install
#创建 MySQL组和MySQL用户
groupadd mysql
useradd -r -g mysql -s /bin/false mysql # -s /bin/false 禁止使用shell
#更改MySQL文件夹权限
chown -R mysql:mysql /usr/local/mysql
#初始化数据库并生成初始密码
/usr/local/mysql/bin/mysqld --initialize --user=mysql # MySQL 5.7.6 and up
记录生成的初始密码::a0esd.M=wQF
#为防止通过MySQL用户修改MySQL文件,修改用户为root
chown -R root /usr/local/mysql/
#把初始化时生成的 data 目录用户 修改成MySQL权限
chown -R mysql data
#如果提示没有data目录
mkdir data && chown -R mysql:mysql data
#启动
/usr/local/mysql/bin/mysqld_safe --user=mysql &
/var/log/mariadb/mariadb.log' 不存在
mkdir /var/log/mariadb && touch /var/log/mariadb/mariadb.log
chown -R mysql:mysql /var/log/mariadb/
启动失败,查看日志:cat /var/log/mariadb/mariadb.log
'/var/run/mariadb/mariadb.pid' 不存在 (ps:错误不一定一样,按照日志来解决问题)
mkdir /var/run/mariadb && touch /var/run/mariadb/mariadb.pid
chown -R mysql:mysql /var/run/mariadb/
# Next command is optional
cp support-files/mysql.server /etc/init.d/mysql.server
#登陆到MySQL
/usr/local/mysql/bin/mysql -uroot -p:a0esd.M=wQF
tmp 文件夹 缺少 mysql.sock
#软连接 mysql.sock 到 tmp
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
#登陆到MySQL
/usr/local/mysql/bin/mysql -uroot -p:a0esd.M=wQF
#修改MySQL初始密码
set password = password('XXXX');
本文根据MySQL文档编写
https://dev.mysql.com/doc/refman/5.7/en/source-installation.html
https://dev.mysql.com/doc/refman/5.7/en/installing-source-distribution.html
题外话:
在编译的过程中,你可能会遇到各种各样的问题;但是请你不要马上的去Google上搜索,先静下心来看日志;相信我,你会有收获。