Ubuntu 上编译安装MySQL 5.5.11

Wesley13
• 阅读 631

Ubuntu 10.04.2上编译安装MySQL 5.5.11

Posted on 2011/05/06Category: Linux | Tag: mysql, ubuntu, 编译安装

由于我之前安装其他的软件时,已经安装了mysql的开发相关的lib,因此编译安装MySQL不是很顺利。具体的错误神马的,就不提了(也没记住多少……)应该都是个例。总结起来一句话就是——尽量在你安装Mysql前电脑尽量保持clean(一些mysql的开发包一类的最好先卸载)。

有一些童鞋可能会问在ubuntu里apt不是可以完全搞定吗,为什么要这么费事的编译安装?我的原因:对我来说用ubuntu,用linux就是了解细枝末节,更深入的理解OS,也就是“折腾”,apt-get install是很好很强大,但这种方法提供便利的同时也阻碍了你去了解linux上软件构建的过程,这种方法同WIndows上下载安装包装软件还简单(起码在WIN上你还知道什么东西放在哪儿了)。通过从源代码编译安装,你就有了一个了解Linux上软件构建部署的机会,可以收获更多。同时在这过程中你也可以将mysql部署到任何位置,同时又可以用到比repo里更新的版本。

正题:

步骤:

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

Contents [隐藏]

一、编译前的准备工作

  • 官方网站下载Source Code(点此进入下载页)选择Source Code–>Generic Linux(mysql-VERSION.tar.gz)(PS:chrome访问此页,可能会遇到显示不正常的情况,建议换FF访问)

  • 建议有兴趣的童鞋读一读解压后的mysql目录下的相关文档,有许多重要的信息。比如此文以及大部分的类似文章都参考自INSTALL-SOURCE文档。

  • 创建mysql用户以及用户组,方便管理

    ?

    1

    sudo groupadd mysql

    ?

    1

    sudo useradd -r -g mysql mysql

二、初识CMAKE——配置MySQL编译选项

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

?

1

2

3

4

5

6

7

8

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,因此总是出现

?

1

COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'

三、编译安装

?

1

sudo make

?

1

sudo make install

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

四、安装后的MySQL配置

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

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

    ?

    1

    sudo chown -R mysql .

    ?

    1

    chgrp -R mysql .

  2. ?

    1

    2

    3

    4

    5

    sudo bin /scripts/mysql_install_db \

    --user=mysql \

    --basedir= /usr/mysql \

    --datadir= /usr/mysql/data \

    --no-defaults

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

    ?

    1

    chown -R root .

    ?

    1

    chown -R mysql data

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

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

    ?

    1

    sudo cp /usr/mysql/support-files/my-medium .cnf /etc/mysql/my .cnf

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

    ?

    1

    2

    3

    4

    [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/),首先进入该目录,尝试运行该脚本

?

1

sudo . /mysql .server start

运行正常的话则执行

?

1

sudo cp mysql.server /etc/init .d /mysql

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

?

1

sudo sysv-rc-conf

若提示没有安装,则

?

1

sudo apt-get install sysv-rc-conf

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这