从源编译MySQL

注:本次编译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/

下载选项:

  1. Source Code -> 源代码
  2. Generic Linux (Architecture Independent) -> 通用的Linux(独立结构)
  3. 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上搜索,先静下心来看日志;相信我,你会有收获。

你可能感兴趣的:(linuxmysql)