为什么要折腾?
首先说明的是ubuntu上安装mysql等软件是非常容易简单的,其简单的程度盖过windows上的安装,一句sudo apt-get install就可以搞定。如果想用最简便的方法安装mysql,那么本文不适合你;如果你喜欢“折腾”,有兴趣了解这一条sudo apt-get install帮你做了什么,有兴趣了解internal linux的细节并想尝试自己编译软件,那么你是本文的目标读者,希望你能从这篇文章中获得收获。

编译安装的几大步骤:

  1. 编译前的准备工作
  2. 初识CMAKE——配置MySQL编译选项
  3. 编译安装
  4. 安装后的MySQL配置
  5. 设置开机自动启动MySQL服务

一、编译前的准备工作

  • 官方网站下载Source Code(点此进入下载页)选择Source Code–>Generic Linux(mysql-VERSION.tar.gz)(PS:chrome访问此页,可能会遇到显示不正常的情况,建议换FF访问)
  • 建议有兴趣的童鞋读一读解压后的mysql目录下的相关文档,有许多重要的信息。比如此文以及大部分的类似文章都参考自INSTALL-SOURCE文档。
  • 创建mysql用户以及用户组,方便管理
    代码:
    sudo groupadd mysql
    代码:
    sudo useradd -r -g mysql mysql

二、初识CMAKE——配置MySQL编译选项
MySQL 5.5的编译工具由Autotool转变为了cmake(有关于更多关于cmake的信息,请大家自行google了解)。MySQL团队也撰写了一篇Autotools to CMake Transition Guide,本文将要列出的各个编译选项以及更多的编译选项的说明可以参考该文档。在troubleshooting时,此文档更是不得不看。编译时我习惯于一些选项(比如安装位置)不按默认的来,因为如果按默认选项出了问题,更不好解决(因为到时你不仅需要知道到底有选项有何含义还要知道默认的是什么,反而更麻烦)。进入解压的源代码目录mysql-VERSION

代码:
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/mysql \
-DMYSQL_DATADIR=/usr/mysql/data
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock \
-DWITH_DEBUG=0 \
-DWITH_INNOBASE_STORAGE_ENGINE=1

一些主要的参数说明:

引用:
选项名称 选项含义
DCMAKE_INSTALL_PREFIX 安装路径
DMYSQL_DATADIR 数据库路径
DDEFAULT_CHARSET 默认字符
DDEFAULT_COLLATION 默认字符集
DMYSQL_UNIX_ADDR 连接数据库socket路径
DWITH_DEBUG bool值,表示是否开启debug模式

在这里我开始的时候有一个疏忽:只设置DDEFAULT_CHARSET而没有设置DDEFAULT_COLLATION,因此总是出现

引用:
COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'

三、编译安装

代码:
sudo make
sudo make install

这个阶段出现的问题概率较小。但是记得一定要以root权限执行make和make install,因为填写的安装路径不是home,而是/usr,必须有root权限才能进行写操作

四、安装后的MySQL配置
出问题的地方主要是在这里。出现问题的根源在于配置文件以及默认配置。由于是源代码安装且安装的位置不是默认位置,因此有一些选项必须制定才能使MySQL正常运行

  1. 进入安装后的目录执行

    代码:
    sudo chown -R mysql .
    代码:
    chgrp -R mysql .
    代码:
    sudo bin/scripts/mysql_install_db \
    --user=mysql \
    --basedir=/usr/mysql \
    --datadir=/usr/mysql/data \
    --no-defaults
  2. 切记后面有个–no-defaults选项,如果没有该选项,则程序会自动载入默认的配置文件,而目前你还没有完成配置文件的编写,因此很可能载入的是错误的信息。如果该指令能够运行成功,那么恭喜你,你的MySQLy可以成功的启动了。如果这一步出现了错误,不要着急,相关的log以及mysqld的启动信息提供了足够的信息帮助你trouble shooting(我就是这么过来的…)完成之后再执行
    代码:
    chown -R root .
    chown -R mysql data

    这两条指令应该是安全性考虑。

  3. 配置my.cnf——mysql的配置文件,这是很重要的一步,配置得当以后就不需要在启动时写上大段的参数了。
    首先应该知道:MySQL寻找配置文件的路径以及顺序。最开始检索的位置是/etc/my.cnf之后是/etc/mysql/my.cnf因此我们要做的就是在这两个地方之一建立配置文件my.cnf。MySQL为我们准备了几种不同方案的默认配置文件(在/usr/mysql/support-files/中),因此我们可以复制一份到上述的位置
    代码:
    sudo cp /usr/mysql/support-files/my-medium.cnf /etc/mysql/my.cnf

    通常我们是通过脚本传入适当的参数启动mysqld。因此在/etc/mysql/my.cnf中加入如下的内容:

    引用:
    [mysqld]
    basedir=/usr/mysql
    datadir=/usr/mysql/data
    user=mysql

    更多关于my.cnf的配置限于篇幅就不再讲了,但为了日常的开发需要还应该继续配置的,这部分内容就参考google搜索以及MySQL Manual吧

五、设置开机自动启动MySQL服务
这一部分讲解如何添加MySQL在开机时自动启动。MySQL Manual关于此部分的内容不准确,没有涵盖debian类的linux发行版的做法。
MySQL已经提供了默认的脚本mysql.server(在[mysql安装目录]/support-files/),首先进入该目录,尝试运行该脚本

代码:
sudo ./mysql.server start

运行正常的话则执行

代码:
sudo cp mysql.server /etc/init.d/mysql

Debian/Ubuntu上开机启动服务的管理不是使用chkconfig,而使用的是sysv-rc-conf,尝试执行

代码:
sudo sysv-rc-conf

若提示没有安装,则

代码:
sudo apt-get install sysv-rc-conf

之后运行即可,该工具采用的是图形界面,很直观在此就不介绍如何使用了,我们需要做的是找到【mysql】一栏,选定【3】【4】【5】这三列,这样就完成了开机自动启动MySQL daemon了。

MySQL的安装就基本完成了,希望大家能和我一样在“折腾”的过程中有所收获,“痛并快乐着”!

原文链接:http://liuyix.com/install-mysql-on-ubuntu-10-04-from-source

ubuntu上安装mysql 编译安装的更多相关文章

  1. 20190418 CentOS7实用技能综合:系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/RocketMQ/RabbitMQ编译安装 + ...各类常用生产环境软件的编译安装

    系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/Roc ...

  2. rpm安装MySQL5.5后配置,在centos5上;mysql编译安装在centos6.5上;

    [1] 没有/etc/my.cnf: rpm包安装的MySQL是不会安装/etc/my.cnf文件的:处理:cp /usr/share/mysql/my-huge.cnf /etc/my.cnf [2 ...

  3. CentOS6.9安装MySQL(编译安装、二进制安装)

    目录 CentOS6.9安装MySQL Linux安装MySQL的4种方式: 1. 二进制方式 特点:不需要安装,解压即可使用,不能定制功能 2. 编译安装 特点:可定制,安装慢 5.5之前: ./c ...

  4. ubuntu上源码编译安装mysql5.7.27

    一.查看操作系统环境和目录结构,并创建mysql用户和组,以及规划安装mysql所需要的目录. #cat /etc/issue 查看发行版本信息: #cat  /proc/version 查看正在运行 ...

  5. 在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6564592 在前一篇文章提到,从源代码树下载下 ...

  6. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境 什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/ ...

  7. Ubuntu 16.04下编译安装Apache2.4和PHP7结合

    Ubuntu 16.04下编译安装Apache2.4和PHP7结合,并安装PDOmysql扩展. 1.编译安装apache2.4.20 1 第一步: ./configure --prefix=/usr ...

  8. MySQL第01课- CentOS + 单实例MySql编译安装总结

    2016年2月,从oracle转向MySql ,碰上几个坑,特此记录 总结 1.注意环境变量.配置文件,操作过程不能出错 2.相比rpm方式安装,编译安装方式可以指定安装路径,再说安装是简单活,将来安 ...

  9. 2、mysql编译安装

    2.1前言: 此文档介绍的是cmake编译安装的方式: 二进制的安装方式在linux运维_集群_01中有详细的安装说明(已经编译完成,进行初始操作即可) 初始化操作时需要对编译好的mysql进行一下备 ...

随机推荐

  1. SegmentFault创始人高阳:辍学后带着500元北漂,4年建成国内最大开发者

    i黑马注:i黑马曾经和高阳聊过几次天,在他身上我看到了90后CEO特别明显的成功特质“敢为天下先”.在别人犹豫的时候敢第一个出手,在互联网时代往往会取得最关键的“先机优势”. 7月19日,“腾讯产品家 ...

  2. python 基础理解...

    class obj(object): def __getattribute__(self, *args, **kwargs): # 访问属性就会被调用 print("__getattribu ...

  3. linux中的开机和关机命令

    与关机.重新启动相关的命令 * 将数据同步写入硬盘中的命令  sync * 惯用的关机命令  shutdown * 重新启动.关机  reboot halt poweroff sync 强制将内存中的 ...

  4. 磁盘配额quota应用

    1.文件系统支持 quota是针对整个文件系统来进行规划,所以我们得先查一下/home是否是个独立的文件系统. [root@Monitor home]# df -h /home Filesystem ...

  5. 在UITableViewStylePlain情况下sectionHeader可以与tableview一起滑动的解决方法

    -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = ; ) { scrollVi ...

  6. Android(Xamarin)之旅(一)

    Xamarin废话我就不多说了. 就是一款编写Android和IOS应用的IDE,从Visual Studio2010就开始有个这个插件.只要发展什么的,我觉得在这里说还不如自己去百度呢. 入正题: ...

  7. 怎样按xc或yc转正视图

    extern void create_view(void) { tag_t wcs_id,matrix_id; double mtx[9],wcs_pt[3]; double x_axis[3]={1 ...

  8. Memcache学习php完整一例

    header("Content-Type:text/html;charset=utf-8"); /* PHP设置分布式memcache存取 */ //创建memcache对象 $m ...

  9. three.js 相关概念

    1.什么是three.js? Three.js 是一个 3D JavaScript 库.Three.js 封装了底层的图形接口,使得程序员能够在无需掌握繁冗的图形学知识的情况下,也能用简单的代码实现三 ...

  10. NOIP2011 题解

    铺地毯 题解:比大小 #include <cstdio> +; int n, x, y, a[MAXN], b[MAXN], g[MAXN], k[MAXN]; inline int So ...