树莓派输出PWM(转载)

使用 RPi.GPIO 模块的脉宽调制(PWM)功能

更新日志:
2013 年 5 月 27 日更新:根据 2013 年 4 月 10 日更新的官方文档完成了初步翻译。
本文会在适当的时间里进行增删改等操作,如果您对该文感兴趣,可以仅收藏本页。
本文链接:使用 RPi.GPIO 模块的脉宽调制功能

创建一个 PWM 实例:

p = GPIO.PWM(channel, frequency)

启用 PWM:

p.start(dc)   # dc 代表占空比(范围:0.0 <= dc <= 100.0)

更改频率:

p.ChangeFrequency(freq)   # freq 为设置的新频率,单位为 Hz

更改占空比:

p.ChangeDutyCycle(dc)  # 范围:0.0 <= dc <= 100.0

停止 PWM:

p.stop()

注意,如果实例中的变量“p”超出范围,也会导致 PWM 停止。

以下为使 LED 每两秒钟闪烁一次的示例:

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
 
p = GPIO.PWM(12, 0.5)
p.start(1)
input('点击回车停止:')   # 在 Python 2 中需要使用 raw_input
p.stop()
GPIO.cleanup()

以下为使 LED 在亮/暗之间切换的示例:

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(12, GPIO.OUT)
 
p = GPIO.PWM(12, 50)  # 通道为 12 频率为 50Hz
p.start(0)
try:
    while 1:
        for dc in range(0, 101, 5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
        for dc in range(100, -1, -5):
            p.ChangeDutyCycle(dc)
            time.sleep(0.1)
except KeyboardInterrupt:
    pass
p.stop()
GPIO.cleanup()

 

相关网站
原文地址:RPi.GPIO module PWM
项目地址:RPi.GPIO

使用树莓派点亮一个发光二极管

简介

如何点亮一个发光二极管是最基础的一件事了,树莓派最大的特色就是拥有26个GPIO口,通过这些GPIO口可以做各种你能想到的东西

开始

首先使用如下命令搭建GPIO控制环境,官方推荐使用python来操作GPIO

apt-get install python-dev python-rpi.gpio

然后编写控制程序

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)


t=0
while t<10:
    GPIO.output(24, 1)
    time.sleep(0.1)
    GPIO.output(24, 0)
    time.sleep(0.1)
    t+=1
pass

GPIO.cleanup()

另存为lcd.py 运行$ python lcd.py  后就可以看到Led闪烁

RPi.GPIO模块函数说明:

RPi.GPIO.setmode(naming_system)

设置将GPIO针的命名方式。naming_system可用的取值有 RPi.GPIO.BCM 和 RPi.GPIO.BOARD,分别代表boardcom命名系统和树莓派板子上的命名系统。而因为使用BCM 的时候(据说)不同的版本BVM针脚定义不一样,所以同一套程序在多个树莓派系统上使用的时候建议用BOARD。

RPi.GPIO.setup(channel, state)

将标号为channel的针设置为state模式。channel取值为1~26,state取值为RPi.GPIO.IN 或者RPi.GPIO.OUT,分别表示输入和输出。例如 RPi.GPIO.setup(1, RPi.GPIO.IN)表示将1号针设置为输入模式;RPi.GPIO.setup(3, RPi.GPIO.OUT)表示将3号针设置为输出模式。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.output(channel, state)

将标号为channel的针设置为state指定的电平。channel取值为1~26,state取值为RPi.GPIO.HIGH 和RPi.GPIO.LOW,或者1和0,或者True和False,表示高电平和低电平。例如RPi.GPIO.output(1, 1) 表示把1号针设置为高电平,RPi.GPIO.output(3, Flase) 表示将3号针设置为低电平。具体哪个号是哪根取决于setmode()中设置成什么。

RPi.GPIO.input(channel)

获取将标号为channel的针的电平砖头。channel取值为1~26。例如RPi.GPIO.input(1) 表示获取1号针的状态。

RPi.GPIO.cleanup()

清除掉之前RPi.GPIO.setup()设置的状态。退出程序之前一定要调用,否则下次调用的时候会报错。

rpi-pins-40-0

13120344_KqtC

自己买的扩展板一般使用的是GPIO.BCM模式, 端口18对应的板子上的p1也就是gpio1

使用mkdocs实时发布项目文档

MkDocs


 

MkDocs 是一个用于创建项目文档的 快速, 简单 , 完美华丽 的静态站点生成器. 文档源码使用 Markdown 来撰写, 用一个 YAML 文件作为配置文档。

虽然mkdocs现在还处于开发阶段,但是他所展现出来的特色确实很有吸引力,特别是他的实时发布功能。

官方文档

MkDocs的安装

MkDocs需要python和 Python package manager pip 环境,并且版本2.6以上,但是在2.6.6版本下安装时会提示缺少扩展包,升级到2.10后解决,所以建议尽量使用更新版本的python

#安装依赖
yum install openssl openssl-devel zlib zlib-devel -y

$ wget http://python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2  
$ tar -jxvf Python-2.7.3.tar.bz2 
$ cd Python-2.7.3
$ make && make install

$ ./Python-2.7.3/python --version
Python 2.7.2
$ wget https://bootstrap.pypa.io/get-pip.py
$ ./Python-2.7.3/python get-pip.py
$ pip --version
pip 1.5.2
$ pip install mkdocs

安装完mkdocs后使用 mkdocs –help 以检查是否正确安装

开始使用

新建项目

$ mkdocs new my-project
$ cd my-project

有一个配置文件 mkdocs.yml, 和一个包含文档源码的 docs 文件夹. 在 docs 文件夹里包含了一个名为 index.md 的文档.

MkDocs 包含了一个内建的服务器以预览当前文档. 控制台切换当前目录到 mkdocs.yml 配置文件相同文件夹, 输入 mkdocs serve 命令以启动内建服务器:

$ mkdocs serve
Running at: http://127.0.0.1:8000/

在浏览器中打开 http://127.0.0.1:8000/ , 可以看到结果页面screenshot

 

如果需要用到时时发布只需把mkdocs serve运行于后台即可,通过–dev-addr来指定ip和端口

nohup mkdocs serve --dev-addr 10.0.18.19:8000

也可以通过mkdocs build 来生成静态html页面

自定义模板

参考官方文档

Mkdocs支持中文搜索

1.下载支持中文的lunr.js替换mkdocs自带的lunr.js

cp ./lunr.js /usr/local/lib/python2.7/site-packages/mkdocs/assets/search/mkdocs/js/lunr-0.5.7.min.js

2.修改search.py ,添加ensure_ascii=False 禁止将中文字符串转为ascii编码,修改完之后,使用python -m py_compile search.py 命令编译一下search文件,然后将新的search.pysearch.pyc(编译文件)替换掉旧的即可

vim /usr/local/lib/python2.7/site-packages/mkdocs/search.py

修改如下一行为:

 return json.dumps(page_dicts, sort_keys=True,ensure_ascii=False, indent=4)

 

 

P.s Linx下如果遇到忘记命令怎么使用或者不熟悉的情况,学会使用 man 或者   –help   常常会用意外收获

Google Chrome 插件开发

简述

Google Chrome插件依托后台执行和使用方便等优势,在使用的当的情况下可以极大提高工作效率,这里记录下一个简单的插件开发过程。

相关文档地址

Google官方提供的文档地址,需翻墙
https://developer.chrome.com/extensions
360翻译后的文档地址
http://open.chrome.360.cn/extension_dev/overview.html

开始

首先每个插件都必须包含下面的文件

  • 一个manifest文件
  • 一个或多个html文件(除非这个应用是一个皮肤)
  • 可选的一个或多个javascript文件
  • 可选的任何需要的其他文件,例如图片

在开发应用(扩展)时,需要把这些文件都放到同一个目录下。发布应用(扩展)时,这个目录全部打包到一个应用(扩展)名是.crx的压缩文件中。如果使用Chrome Developer Dashboard,上传应用(扩展),可以自动生成.crx文件。

以一个简单的翻译插件为例,需要的文件有

  • background.js
  • icon.png
  • jquery.min.js
  • mainfest.json
  • popup.html
  • popup.js

mainfest.json文件是整个插件的配置文件,可以看成是入口文件,大致需要配置的参数有插件名称,版本,需要的权限列表,由于安全问题,一些特殊操作需要先声明对应的权限才可使用,比如获得粘贴板内容,调用通知等,权限列表在开发过程一定要留意,如果一个操作始终无法生效,就需要检查下是否赋予了相应的权限。

mainfest.json文件内容如下:

{
  "manifest_version": 1,
  "name": "Google-translate",
  "description": "Google",
  "version": "1.0",
  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "icons": {
    "16": "icon.png",
    "48": "icon.png",
    "128": "icon.png"
  },
  "permissions": [
    "activeTab",
    "notifications",
    "tabs",
    "contextMenus",
    "clipboardRead",
    "clipboardWrite",
    "http://www.wwjie.cn/",
    "http://translate.google.cn/"
  ],
  "background": {
    "scripts": ["background.js"]
  }
}

browser_action”参数配置的是显示于浏览器右上角时的图标和需要加载的html页面,页面的宽度会自动设置,也可以在html页面内定义宽度,方式与传统的CSS+DIV通用。点击图标后将会加载并弹出popup.html页面,popup.html页面内也可以加载其他样式文件或js文件,popup.html文件内容如下:

<!doctype html>
<html>
<head>
    <title>Google翻译</title>
    <script src="popup.js"></script>
    <script src="jquery.min.js"></script>
    <style>
        body {
            min-width: 300px;
            max-width: 800px;
            min-height: 160px;
        }

        #data {
            width: 98%;
            height: 100px;
        }

        button {
            width: 100%;
            font-size: 14px;
            padding: 2px 0;
            cursor: pointer;
        }

        #res {
            font-weight: bold;
            margin-top: 10px;
            word-wrap: break-word;
            word-break: normal;
            word-break: break-all;
        }
    </style>
</head>
<body>
<textarea id="data"></textarea>
<button id="button">提交</button>
<div id="res">
</div>
</body>
</html>

这里导入了popup.js与jquery.min.js,popup.js负责获取翻译后的数据等操作,内容如下:

//加载时执行
document.addEventListener('DOMContentLoaded', function () {
    $(function () {
        //定位光标
        $("#data").focus();
        //粘贴
        document.execCommand('paste');

        //如果剪切板存在数据自动搜索
        if ($("#data").val()) {
            getGoogleRes($("#data").val())
        }
        //如果检测到回车自动搜索
        $("#data").keyup(function () {
            if (event.keyCode == 13) {
                getGoogleRes($("#data").val())
            }
        });

        //如果失去焦点自动搜索
        $("#data").blur(function () {
            getGoogleRes($("#data").val())
        });


        $('#button').click(function () {
            //获取原始数据
            var data = $("#data").val();
            getGoogleRes(data);
        })
    })
});


/**
 *返回翻译结果
 * @param data //需要翻译的数据
 */
function getGoogleRes(data) {


    if (escape(data).indexOf("%u") != -1)
        url = 'http://translate.google.cn/translate_a/single?client=gtx&sl=auto&tl=en&hl=zh-CN&dt=t&dt=bd&dj=1&source=icon&q=';  //中文->英文
    //alert("不能含有汉字");
    else if (data.match(/\D/) != null) {
        url = 'http://translate.google.cn/translate_a/single?client=gtx&sl=auto&tl=zh-CN&hl=zh-CN&dt=t&dt=bd&dj=1&source=icon&q=';  //英文->中文
        //alert("不能含有字母");
    } else {
        url = 'http://translate.google.cn/translate_a/single?client=gtx&sl=auto&tl=zh-CN&hl=zh-CN&dt=t&dt=bd&dj=1&source=icon&q=';  //英文->中文
    }
    
    $.ajax({
        type: "GET",
        url: url + encodeURIComponent(data),
        dataType: 'json',
        success: function (json_txt) {
            var res = '';
            $(json_txt['sentences']).each(function (k, v) {
                if (v) {
                    res += "<p>" + v['trans'] + "</p>";
                }
            });
            $("#res").html(res);
        },
        error: function (e) {
            // console.log(e);
        }
    });
}

 

permissions”参数配置的就是权限列表了,如果是一个http地址则代表需要获取数据的域名,所有需要获取数据的地址都需要在这里声明,测试发现域名的最后的一个”/”必须要保留,不然无法获取数据。
background”参数配置的是一个后台执行脚本,如果配置这个脚本将在加载脚本后一直运行于后台,这里添加了一个邮件上下文菜单,脚本内容如下:

//添加右键上下文菜单
chrome.contextMenus.create({"title": "翻译当前页面(Google)", "onclick": mclick})

function mclick(info, tab) {
    window.open('http://translate.google.com.hk/translate?act=url&hl=zh-CN&ie=UTF8&prev=_t&sl=en&tl=zh-CN&u=' + tab.url)
}

加载插件

完成插件开发后通过设置->扩展管理->加载正在开发的扩展程序… 选择项目文件夹即可载入插件查看效果:

4)6K}3}F2IF`AU8[QI5JZLS

 

右击后上下文菜单:

{00(CC`W36MS7B47$KZ986G

 

附件

translate-chrome.zip

安装redis-servier 与 phpredis,memcached安装与此类似

php使用redis服务需要安装redis服务端与phpredis扩展

一 . redis-server 的两种安装方式

  1. 使用yum install redis
  2. 从源码编译

1.1 直接使用yum 安装

yum install redis
service redis start

1.2 从源码编译安装

下载源码包  http://redis.io/download,解压缩后进入目录,redis-server的安装不需要执行./configure 和make install 命令只需要输入:

make

安装完成后输入 make test 测试,如果出现“Cleanup: may take some time… OK” 则安装成功,如果出错可能是未安装tcl依赖包,使用yum  或者从源码 ./configure make && make install。

二 . phpredis 扩展安装

phpredis 扩展安装也分为两种

  1. 使用php提供的pecl install redis 安装
  2. 从源码编译安装

2.1 使用php提供的pecl安装

/usr/local/php/bin/pecl install redis

安装完成后在php.ini 添加 extension = “redis.so”

2.2 从源码编译安装

首先下载phpredis源码包

wget https://github.com/nicolasff/phpredis/archive/master.zip
unzip master
cd phpredis-master/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vi /usr/local/php/etc/php.ini
增加:extension = "redis.so"

如果运行phpize出错查看openssl目录下有个config.w32和config0.m4,把config0.m4改名为config.m4。完成后使用phpinfo();查看phpredis是否安装成功

使用redis

        // $_rd = new Memcached(); //使用memcached
        // $_rd->addServer('127.0.0.1', 11211);
        $_rd = new Redis();
        $_rd->connect('127.0.0.1', 6379);
        $_rd->set('key', 'hello', 60);
        echo $_rd->get('key');

编译安装php5.6或php7

下载源码

php官网下载地址

安装php依赖包

#Centos
yum install libjpeg libjpeg-devel libpng libpng-devel curl autoconf automake libtool re2c flex bison libxml2-devel openssl openssl-devel bzip2 bzip2-devel curl curl-devel freetype freetype-devel libmcrypt libmcrypt-devel libXpm* freetype* libjpeg* libpng*
#ubuntu
apt-get install gcc libxml2-dev make automake autoconf libtool bison flex libbz2-dev  curl libcurl4-gnutls-dev libjpeg-dev libpng-dev libtool-bin libcurl3-dev libmcrypt-dev libmysql++-dev libxslt1-dev

开始编译

./configure --prefix=/work/app/php5.6  --with-config-file-path=/work/app/php5.6  --with-mysql  --with-pdo-mysql --enable-mysqlnd --with-mysqli --enable-dba --with-fpm-user=www-data --with-fpm-group=www-data --enable-fpm --enable-zip --with-zlib --with-bz2 --with-mcrypt --enable-pcntl --enable-mbstring --enable-bcmath --enable-xml --with-mhash --with-xsl --with-gettext --with-gd --with-png-dir  --with-freetype-dir  --with-jpeg-dir --with-xpm-dir --with-pear --enable-opcache --enable-sockets  --with-xmlrpc --enable-soap --with-curl  --with-openssl
 
#mysql与数据库
--with-mysql  --with-pdo-mysql --enable-mysqlnd --with-mysqli --enable-dba

#fpm
--with-fpm-user=www-data --with-fpm-group=www-data --enable-fpm

#文件与字符串数字数组处理
--enable-zip
--with-zlib
--with-bz2 
--with-mcrypt
--enable-pcntl
--enable-mbstring
--enable-bcmath
--enable-xml
--with-mhash
--with-xsl
--with-gettext

#图片处理
--with-gd
--with-png-dir 
--with-freetype-dir 
--with-jpeg-dir 
--with-xpm-dir

#其他
--with-pear
--enable-opcache
--enable-sockets  
--with-xmlrpc

#加密与请求
--enable-soap   #xml通信协议
--with-curl 
--with-openssl

ubuntu上curl依赖安装后还是提示安装,此时可能需要手动创建一个软连接

#ubuntu
cd /usr/include
sudo ln -s x86_64-linux-gnu/curl

php7或者低版本php编译可能会遇到openssl相关错误,处理方式为编译openssl并手动指定目录,注意在编译的时候其实无需替换系统openssl,流程如下

#主要命令
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
tar zxvf openssl-1.1.0g.tar.gz
cd openssl-1.1.0g
./config --prefix=/work/app/openssl shared
make && make install
#只为编译php不用替换系统的openssl,只需要--with-openssl=/work/app/openssl

其中实测php5.6.0和以下版本需要使用低版本的openssl(openssl-1.0.2.tar.gz)

执行make

# make && make install  //开始编译,如果编译失败使用 make clean,然后再重新编译
# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
# chmod u+x /etc/init.d/php-fpm

配置

#修改php-fpm的配置文件,位于/work/app/php5.6/etc
mv php-fpm.conf.default  php-fpm.conf
#修改php.ini ,取消date.timezone 注释,并修改为
date.timezone = PRC

启动

systemctl enable php-fpm.service
systemctl start php-fpm.service

安装或编译php扩展

有两种方式可以安装php扩展,第一种是使用pecl install xxx 的方式, 第二种是下载扩展源码然后通知执行phpize后比编译获得.so文件

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

vim php.ini
extension = "gettext.so"

 

PHP安装xdebug扩展远程调试代码

准备工作

在IDEA所在机器关闭windows防火墙(或添加端口白名单)

一,安装xdebug扩展

使用pecl或编译xdebug源码安装, 这里直接使用pecl快速安装:

pecl install xdebug

 二,配置xdebug

在php.ini中添加如下配置

xdebug.auto_trace = on
xdebug.trace_output_dir = "/tmp"
xdebug.profiler_output_dir ="/tmp"
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode = "req"
xdebug.remote_port=9000
xdebug.remote_autostart=1
xdebug.remote_connect_back=1 #推荐,将尝试连接到发出HTTP请求的客户端,和下面配置选其一
;xdebug.remote_host=10.0.14.251 #远程调试时此处填写IDE所在客户机ip地址
;xdebug.remote_log="/work/log/debug.log"

xdebug的工作流程为当客户端开始debug时,浏览器会携带一个XDEBUG_SESSION_START 参数传递debug会话key,当php捕获到这个key时会根据配置的remote_port端口与目标机器建立一个会话链接(也就是在IDEA所在机器,所以这个端口是IDEA所在机器自身的端口,而不是在服务器上开启的端口),此端口由IDEA编辑器开启和监听

IDEA上的电话监听按钮并不是必须的, 只是代表是否主动监听调试,所以在点击监听后即使访问没有携带debug key断点也会生效,所有请求都将被调试

最后两项配置分别为允许任何机器链接调试remote_connect_back和只允许指定ip的机器调试remote_host

三,配置IDEA开发工具

配置编辑器,设置端口为对应的端口

QQ截图20160408153511

点击菜单栏Run->Edit Configurations

然后添加一个PHP Web Page配置,在老版本中为PHP Web Application,此处注意,默认有一个Templates或Defaults配置,这个只是作为添加模板使用, 所以修改是无效的,点击左上角的”+”就行了

然后在Server那里点击”…” 添加一个Server,此处注意要勾选(本地调试也需要设置同步目录)”Use path mappings(select if the servers is remote or symlinks are used)”并填写服务端对应的远程目录

QQ截图20160408153805

点击Run->Debug”xxx”即可使用携带debug key的方式进行调试

注意

如果IDEA所在机器是内网ip将无法调试,因为远程服务器无法主动和内网机器建立连接,  解决办法有两个

  1. 在内网机器的出口路由上做一个端口映射
  2. 或采用建立隧道的方式,具体参考连接,使用隧道的方式注意需要配置xdebug.remote_host=127.0.0.1 

问题与解决流程

xdebug经常会遇到明明按流程来配置了但是却始终无法生效的情况,此时就需要通过配置xdebug日志来排查,推荐排查流程为

  1. 检查两边配置的端口是否一致,并确定端口是否被占用(此端口是IDEA所在客户端的端口)
  2. 开启xdebug日志xdebug.remote_log="/work/log/debug.log"创建此文件并给读写权限
  3. 再通过携带debug key的方式请求调试地址,此时会产生对应的日志内容,分析日志内容并查找解决办法,解决问题后注释此文件避免产生大量日志内容,比如我自己遇到的一个错误:
Log opened at 2018-10-11 06:11:43
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 192.168.10.138:9000.
W: Creating socket for '192.168.10.138:9000', poll success, but error: Operation now in progress (29).
E: Could not connect to client. 🙁
Log closed at 2018-10-11 06:11:43

是由于windows默认开启了防火墙导致

常用快捷键使用说明

  1. (F5)step into就是单步执行,遇到子函数就进入并且继续单步执行;
  2. (F6)step over是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。
  3. (F7)step return就是单步执行到子函数内时,用step return就可以执行完子函数余下部分,并返回到上一层函 数。

fedora19 yum 安装php5.5.1 nginx1.4.2 mysql

安装mysql

首先输入如下命令:
yum install mysql mysql-server
系统将自动完成mysql安装

如果不仅仅在本机访问数据库需要注释#skip-networking
vi /etc/my.cnf

将mysql加入开机启动,并启动mysql

systemctl enable mysqld.service
systemctl start mysqld.service

mysql安装完成!

安装nginx 与 php

yum install nginx php php-fpm
如果 没有nginx可以从http://nginx.org/en/linux_packages.html添加nginx源到yum

配置nginx.conf使nginx支持php,去掉如下代码的注释
nano /etc/nginx/nginx.conf

location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}

将nginx设为开机启动,启动nginx

systemctl enable nginx.service
systemctl start nginx.service

将php设为开机启动,启动php

systemctl enable php-fpm.service
systemctl start php-fpm.service

创建测试文件

info.php
<php
phpinfo();

编译安装mysql5.6.34

首先安装对应依赖包

yum  install  gcc-c++ cmake bison-devel  ncurses-devel

下载源码

wget  http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz

需要注意的地方 1.默认编码 2.默认字符集 3.注意用户权限

cmake \
-DCMAKE_INSTALL_PREFIX=/work/thirdparty/mysql \
-DMYSQL_DATADIR=/work/thirdparty/mysql/data \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci
make && make install

注:重新运行配置,需要删除CMakeCache.txt文件

初始化目录,如果修改了DMYSQL_DATADIR需要重新执行,并且一定要用如下路径执行

./scripts/mysql_install_db

设置启动脚本

cp support-files/mysql.server /etc/init.d/mysql

启动mysql

service mysql start

启动守护进程,可选

./bin/mysqld_safe &

设置密码

./bin/mysqladmin -u root -h 127.0.0.1 password 'xxxxxx'

登录测试

./bin/mysql -uroot -p -h 127.0.0.1

其他问题

防火墙的3306端口默认没有开启,若要远程访问,需要开启这个端口
打开/etc/sysconfig/iptables
在“-A INPUT –m state –state NEW –m tcp –p –dport 22 –j ACCEPT”,下添加:
-A INPUT -m state –state NEW -m tcp -p -dport 3306 -j ACCEPT
然后保存,并关闭该文件,在终端内运行下面的命令,刷新防火墙配置:
service iptables restart
OK,一切配置完毕,你可以访问你的MySQL了~
CentOS 7中默认使用Firewalld做防火墙,所以修改iptables后,在重启系统后,根本不管用。
Firewalld中添加端口方法如下:
firewall-cmd –zone=public –add-port=3306/tcp –permanent
firewall-cmd –reload
//查看编译参数
cat /usr/local/mysql/bin/mysqlbug | grep CONFIGURE_LINE

编译参数参考
http://blog.sina.com.cn/s/blog_68c25adf0101402v.html