Linux下c语言与mysql链接

最近在做一个项目,底层是C,需要使用到数据库,所以查了点资料,要进行C语言与Mysql的链接,并且还有处理编译个问题。

首先,要安装开发包.

在ubuntu下通过源安装的mysql,则需要执行一下的操作:

因为通过源安装的时候默认是不安装mysql.h等.h开发文件的,所以要自己安装一下的.

下载mysql的源码包:

下载源码包后在/usr/src/mysql的目录下会生成一个mysql-source-5.5.tar.gz的源码包文件。

进入该目录后解压这个文件:

此时解压后会出现一个mysql-5.5的目录,进入该目录,会有一个include的文件夹,拷贝该文件夹:

安装链接库:

如果是源码编译安装的那就要简单很多了。

include文件就已经在安装的目录了…那个链接库文件也在安装目录的lib下了所以编译时注意一下,就ok了.

其次编写mysql链接的C文件.

下面就是编译了,我以在ubuntu下为例,其它类似,注意更改相印的目录就行。

ok,编译就完成了,现在就可以测试了…

 

ubuntu12.04下安装nodejs

今天导师让我们熟悉一下nodejs为后面的项目做准备,当然要熟悉nodejs当然是第一步打环境,然后去熟悉,下面就分享一下,我大家nodejs的经验。

首先声明一下,这个nodejs不建议从源里安装,因为会遇到许多的问题,所以就源码安装喽。

第一步,安装依赖包

1)安装编译器和运行环境.一般只用这个就好了.后面的可以自己看着办.

#这个下面的可以执行下看看。反正要保证所有需要的都已经安装好了。

2).确保系统安装来python,gcc,g++,如果没有则安装:

第二步. 下载编译安装nodejs

1).下载nodejs源码包,

这个建议从官网下,当然github上也可以的啊。官网的地址是:http://nodejs.org

解压nodejs

2).编译安装nodejs

注:指定的安装目录要在安装完毕后.设置权限.很重要!如果本身账户就是root那这里都是废话.如果不是就请注意了.如何设置文件权限,后面有讲.现在可以继续。

3).增加软链接:node和npm到/usr/bin

因为系统的环境变量里面没有node和npm等等,

4)添加全局环境变量

修改/etc/profile文件,添加在文件最后添加PATH=“/usr/local/node/bin:$PATH”

刷新全局变量

5)查看node和npm版本

第三步.安装express

第四步.测试

首先创建一个工作目录

启动第一个项目

测试是否启动成功curl

重新开启一个终端执行以下命令;

如果出现一下的信息就ok了。

当然node app.js的那个终端里会有产生的日志:

附:上面的教程忘了介绍安装spm直接运行以下命令即可,其实这个包不影响什么的。

如果安装过程有权限的问题,可以执行一下命令试试,当然不存在问题,这步可以忽略。

其实我个人不建议把文件的权限更改为777的。

到此,整个环境的搭建都就完成了,祝大家好运…

VirtualBox后台运行命令

每次运行Virtualbox都会有一个窗口,用起来特别的不方便,为什么不能向Kvm一样在后台运行呢,在网上找了一些资料,还真可以载后台运行(不是使用&)。

做个笔记以后会经常用到的.

Mysql慢查询

关于数据库的监控,其中有个名词叫慢查询,不是很理解,今天做个笔记。

慢查询的定义

分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。

记录慢查询的方法

查看/设置“慢查询”的时间定义

如上述语句输出,“慢查询”的时间定义为0.0001秒(方便测试,一般设置为1-10秒)。使用下面语句定义“慢查询”时间

开启“慢查询”记录功能

上述语句查看“慢查询”的配置信息,你可以自定义日志文件的存放,但必须将 slow_query_log 全局变量设置为“ON”状态,执行以下语句:

结果:

下载就可以查看其日志文件了,如下:

ubuntu12.04搭建Gitlab代码管理平台

来公司实习学习了不少的东西,我们负责维护的平台托管在自己git上,为了以后的需求自己今天尝试搭建Gitlab平台。

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。

它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。团队成员可以利用内置的简单聊天程序(Wall)进行交流。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

下面开始咱们的搭建过程吧。

Gitlab英文原版 Debian 下安装教程: https://github.com/gitlabhq/gitlabhq/blob/5-3-stable/doc/install/installation.md

ubuntu 与 Debian 还是有点区别的,因为 ubuntu 默认安装了 sudo,python等软件。

一. 软件源安装所需的软件包

更新ubuntu软件源

安装所需的软件包

另外要安装这个关于python的一个扩展包python-pygments,这个扩展包是控制代码在gitlab里显示和扩展的一个包。

二. 安装 ruby 1.9.3

因为ubuntu的官方源里有ruby 1.9.3,所以就不用编译安装了。

*这一步很可能会遇到问题,链接失败什么的,这是因为ruby的软件源被墙了,解决方法请移步:http://ruby.taobao.org/

*如果遇到链接的错误一定要按照上面的链接修改源,否则无法继续的。
三. 创建gitlab用户

修改git用户的密码,执行以下命令后为git用户创建密码。

给git用户添加sudo权限,执行visudo命令

执行上面命令后按照下图添加以下代码

之后按ctrl+x保存后退出。

四. 安装 gitlab-shell

# 登录第三步创建的 git 用户

# 切换到 git 用户的 home 目录

# 克隆 gitlab-shell

# 编辑配置文件 config.ym 并且替换 gitlab_url

# 为主机域名.例如 ‘http://db89.com/’,本地局域网安装的话默认localhost就行.

# 开始安装.

五. 安装数据库

# 软件源安装 mysql 数据库,过程中会让你输入两次 mysql root 用户的密码,牢记!

# 用 root 用户登录 mysql

# 尝试用 gitlab 用户连接 gitlabhq_production 数据库,登录成功(注:出现 mysql>)说明数据库配置完成.

六. 安装 gitlab

# gitlab 要安装到 git 用户的 home 目录下.

# 克隆 gitlab 项目

# 进入 gitlab 目录

# 切换到 gitlab 的 5.3 分支.

# 复制 gitlab 的示例配置文件到指定目录

# 如果用的不是本地服务器,更改 localhost 为 gitlab 的服务器域名

# 确保当前用户对 gitlab 的 log 和 tmp 文件有读写权限.

# 创建目录

# 再创建两个的目录…并且确保 当前用户对他有读写权限.

# 创建公共的上传备份目录,并确保当前用户对其有读写权限.否则备份会失败.

# 复制示例配置文件到制定目录

# 找到其中有一行 # workers 2,去掉前面的 # 并将 2 改为 3.

# 配置 gitlab 的全局设置.

# 复制示例Mysql配置文件到指定目录

# 修改里面的 root 为 gitlab, 密码为创建的 gitlab mysql 用户密码

# 安装gem库里的一个软件

# 下载 gitlab 的 开始/停止 脚本,并且加入当前用户的可执行权限.

# 添加 gitlab 的开机启动

# 检查 gitlab 的状态和环境配置是否正确.

# 再次检查 gitlab 的状态,如果全部绿色,说明 gitlab 配置成功.如果执行一次不行就多执行几次。

*可能会提示git版本有点低,可以忽略的,当然你可以重新编译安装git.
七. 配置 Nginx
# 软件源安装Nginx

# 复制 gitlab 的示例配置到指定目录

# 修改配置文件.更改其中的 YOUR_SERVER_FQDN 为你的 gitlab 服务器全称域名或者本机IP地址,修改 listen 为 *:8080.

*因为默认的站点使用的80端口,你可以删了default文件,然后改为80端口即可

# 重启 nginx 服务器

# 打开浏览器输入本机 IP,用下面的用户密码登录既可.

八.效果展示
进到系统中首先会提示你修改密码之类的。

下面的截图就是我搭建好的环境,当然后续还有许多的东西要做,比如添加ssh-key等等,大家慢慢去熟悉吧。

 


到这,我们的整个搭建过程就结束了.有问题的同学可以留言哈.

Ubuntu 12.04 安装配置Cacti

最近一直在跟导师做项目,昨天导师给我们提到了Cacti,关于服务器监控的一个软件把,自己觉得很感兴趣,今天研究一下。

安装

直接采用Ubuntu源安装,Cacti的版本是0.8.7i,这个版本的Cacti,还需要专门安装一个插件的包,才能使用插件。如果你采用源码安装,最新的版本是0.8.8a,你直接把插件放到plugin目录下就可以。

当你采用包的安装,尤其是在Ubuntu和Debian下配置文件的路径,有时候让你比较头疼。下面是一个路径说明:

因为原来看官方的教程,用源码编译出现了许多的问题,

所以我采用的安装方式是,采用官方源安装,这样我觉得比较方便。

安装rddtool

安装snmp和snmpd

安装cacti

安装过程会提示设置mysql的root的密码, Cacti的密码,还有选择apache作为web服务器,按照提示,采用默认就可以.

Spine

spine是一个基于C语言的,非常快速的轮询引擎。它是默认的cmd.php的可选替代。目的是提高Cacti的获取数据的性能。

安装spine

查看Cacti的版本

这个时候,你就可以web访问 http://localhost/cacti, 安装提示做就可以。安装完成后的登录界面,首次登录,默认账户和密码都是admin,会强制用户修改密码。

*但是我登陆时用户名为:admin 密码为:guest

MIBs

这个应该是和snmp监控有密切关系,对于ubuntu 12.04来说,默认snmp是没有启用,你需要安装mibs,对于Centos来说,基本不需要操心这个。

启用mibs,编辑 /etc/snmp/snmp.conf ,注释掉一行就可以

重启snmp服务就可以。

可以通过下面命令验证。下面的第一条是没有安装mibs,第二条是安装了mibs。

相关设置

Spine设置

设置spine路径,如果你是编译安装,路径需要自己填写上,保存的时候系统会检测,检测到会提示ok。(Settings—Paths )

如下图红色部分

设置Cacti使用spine 

(Settings—puller )

SNMP2

当你添加设备的时候,让Cacti默认使用SNMP2协议去监控设备 (Settings—General 底下的SNMP Defaults)

添加设备,默认采用ping和snmp去检测。修改完后,你添加新的device,就会默认是采用这个设置。(Settings—puller )

本机监控

你装完Cacti,本机就是第一个监控的设备。不过默认不是采用snmp去监控,所以你需要修改一下。

Console—devices,选择localhost

修改下面参数,保存,别的就不要动。

这个时候,你在Graphs的菜单里,就可以看到监控的画面了.

刚刚打开页面,可能还没有采集到足够的数据,不要担心,过上5-10分钟后再查看,就有数据了。

附监控图:

祝你好运,在搭建的过程中如果有问题请您留言.

 

正向代理、反向代理、透明代理

常用的代理技术分为正向代理、反向代理和透明代理。下面就是针对这三种代理来讲解一些基本原理和具体的适用范围,便于大家更深入理解代理服务技术。

一.正向代理(Forward Proxy)

一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术。关于正向代理的概念如下:

正向代理(forward)是一个位于客户端【用户A】和原始服务器(origin server)【服务器B】之间的服务器【代理服务器Z】,为了从原始服务器取得内容,用户A向代理服务器Z发送一个请求并指定目标(服务器B),然后代理服务器Z向服务器B转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。如下图:

从上面的概念中,我们看出,文中所谓的正向代理就是代理服务器替代访问方【用户A】去访问目标服务器【服务器B】
这就是正向代理的意义所在。而为什么要用代理服务器去代替访问方【用户A】去访问服务器B呢?这就要从代理服务器使用的意义说起。
使用正向代理服务器作用主要有以下几点:

1.访问本来无法访问的服务器B,如下图:

我们抛除复杂的网络路由情节来看上图,假设图中路由器从左到右命名为R1,R2
假设最初用户A要访问服务器B需要经过R1和R2路由器这样一个路由节点,如果路由器R1或者路由器R2发生故障,那么就无法访问服务器B了。但是如果用户A让代理服务器Z去代替自己访问服务器B,由于代理服务器Z没有在路由器R1或R2节点中,而是通过其它的路由节点访问服务器B,那么用户A就可以得到服务器B的数据了。
现实中的例子就是“翻墙”。不过自从VPN技术被广泛应用外,“翻墙”不但使用了传统的正向代理技术,有的还使用了VPN技术。

2.加速访问服务器B

假设用户A到服务器B,经过R1路由器和R2路由器,而R1到R2路由器的链路是一个低带宽链路。而用户A到代理服务器Z,从代理服务器Z到服务器B都是高带宽链路。那么很显然就可以加速访问服务器B了。

3.Cache作用

充当缓存的作用。

4.客户端访问授权

这方面的内容现今使用的还是比较多的,例如一些公司采用ISA SERVER做为正向代理服务器来授权用户是否有权限访问互联网,接下图:

上图防火墙作为网关,用来过滤外网对其的访问。假设用户A和用户B都设置了代理服务器,用户A允许访问互联网,而用户B不允许访问互联网(这个在代理服务器Z上做限制)这样用户A因为授权,可以通过代理服务器访问到服务器B,而用户B因为没有被代理服务器Z授权,所以访问服务器B时,数据包会被直接丢弃。

5.隐藏访问者的行踪

如下图1.4 我们可以看出服务器B并不知道访问自己的实际是用户A,因为代理服务器Z代替用户A去直接与服务器B进行交互。如果代理服务器Z被用户A完全控制(或不完全控制),会惯以“肉鸡”术语称呼。

二.使用反向代理服务器的作用如下:

1.保护和隐藏原始资源服务器

如下图:

如上图,用户 A 始终认为它访问的是原始服务器 B 而不是代理服务器 Z ,但实用际上反向代理服务器接受用户 A 的应答,从原始资源服务器 B 中取得用户 A 的需求资源,然后发送给用户 A 。由于防火墙的作用,只允许代理服务器 Z 访问原始资源服务器 B 。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了原始资源服务器 B ,但用户 A 并不知情。

2.负载均衡

如下图:

当反向代理服务器不止一个的时候,我们甚至可以把它们做成集群,当更多的用户访问资源服务器B的时候,让不同的代理服务器Z(x)去应答不同的用户,然后发送不同用户需要的资源。
当然反向代理服务器像正向代理服务器一样拥有CACHE的作用,它可以缓存原始资源服务器B的资源,而不是每次都要向原始资源服务器B请求数据,特别是一些静态的数据,比如图片和文件,如果这些反向代理服务器能够做到和用户X来自同一个网络,那么用户X访问反向代理服务器X,就会得到很高质量的速度。这正是CDN技术的核心。如下图:

我们并不是讲解CDN,所以去掉了CDN最关键的核心技术智能DNS。只是展示CDN技术实际上利用的正是反向代理原理这块。
反向代理结论与正向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
基本上,网上做正反向代理的程序很多,能做正向代理的软件大部分也可以做反向代理。开源软件中最流行的就是squid,既可以做正向代理,也有很多人用来做反向代理的前端服务器。另外MS ISA也可以用来在WINDOWS平台下做正向代理。反向代理中最主要的实践就是WEB服务,近些年来最火的就是Nginx了。网上有人说NGINX不能做正向代理,其实是不对的。NGINX也可以做正向代理,不过用的人比较少了。

三.透明代理

如果把正向代理、反向代理和透明代理按照人类血缘关系来划分的话。那么正向代理和透明代理是很明显堂亲关系,而正向代理和反向代理就是表亲关系了 。
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。
透明代理实践的例子就是时下很多公司使用的行为管理软件。如下图:


用户A和用户B并不知道行为管理设备充当透明代理行为,当用户A或用户B向服务器A或服务器B提交请求的时候,透明代理设备根据自身策略拦截并修改用户A或B的报文,并作为实际的请求方,向服务器A或B发送请求,当接收信息回传,透明代理再根据自身的设置把允许的报文发回至用户A或B,如上图,如果透明代理设置不允许访问服务器B,那么用户A或者用户B就不会得到服务器B的数据。

本文参考了:http://z00w00.blog.51cto.com/515114/1031287