新手Centos7安装mysql,并使用libzdb数据库链接池连接数据库



最近公司服务要从Windows迁移到linux

决定 用Centos,数据库mysql

但是从来没搞过,从零开始,百度!

下载的CentOS7.0,(后来朋友说7.1版本比7.0好太多)测试机是安装的虚拟机,设置的物理桥接模式的网络

网上说centos自带mariadb数据库,想要安装mysql,需要卸载mariadb(步骤自己百度)


然后最保险的安装mysql的方式是 通过yum自动安装,这样mysql需要关联的东西会自己安装

重点最好最好最好从官网下载yum源文件,读官方文档。连接:http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

我之前是从百度来的方式:

1. 下载mysql的repo源(当前路径会下载一个文件,后面需要使用这个)

$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
这个链接最好找官网的新版本。

2. 安装mysql-community-release-el7-5.noarch.rpm包

$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

安装这个包后,会获得两个mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo,/etc/yum.repos.d/mysql-community-source.repo。

3. 安装mysql

$ sudo yum install mysql-server

安装完后,就可以登录,第一次登录不需要密码,登录上后要重置密码

重置密码前,首先要登录

$ mysql -u root

登录时有可能报这样的错:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2),原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:

$ sudo chown -R openscanner:openscanner /var/lib/mysql

然后,重启服务:

$ service mysqld restart

接下来登录重置密码:

$ mysql -u root
mysql > use mysql;
mysql > update user set password=password(‘123456‘) where user=‘root‘;
mysql > exit;

5. 开放3306端口

$ sudo vim /etc/sysconfig/iptables

添加以下内容:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

保存后重启防火墙:

$ sudo service iptables restart

这样从其它客户机也可以连接上mysql服务了。


好像还要安装mysql-devel开发包,我也不知道是不是必须得安装,好像不安装,后面使用libzdb库的时候,会不支持mysql的连接

$ sudo yum install mysql-devel
下面 安装libzdb,

Libzdb 实现了一个小型、快速、易用、线程安全的连接池数据库API,可连接多种数据库,零配置,通过URL指定连接信息。
它具有以下特性:
1.线程安全的数据库连接池
2.连接到多个数据库系统
3.零配置,通过URL指定连接信息
4.支持MySQL, PostgreSQL, SQLite and Oracle 可以不断进行扩展。
 支持平台:ios、Linux、FreeBSD、Solaris、OpenBSD和其他 POSIX 系统。
支持开发语言:C、C++、Object C。
缺点:不支持window,所以若要在windows下进行开发,可能不是很方便,但是libzdb的邮件列表反馈很及时,在列表中提出的问题,
一般一两天就会得到官方工程师的回答。
 它的几个相关网站如下:
http://www.tildeslash.com/libzdb/#     libzdb的offiCal website; libzdb是由这家公司开发的,所以质量应该可以值得信任 
libzdb的代码使用googlecode上代管https://code.google.com/p/libzdb/(这段是copy来的)


Libzdb源码结构: 
  各模块简单分析
 1. Exception
异常模块,主要是为整个系统提供异常处理接口。处理异常包括数据库异常和内存异常等其他非法操作。
捕获异常的好处是,不使程序由于异常而非法退出。
 2.System
一些时间处理、内存操作、系统操作等接口。方便其他模块调用。
 3.Net
统一资源定位符(UniformResource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方法的
一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件
的位置以及浏览器应该怎么处理它。
整个数据库的初始化和代理对象的初始化,都是通过这个URL来进行处理。
示例:
mysql://localhost:3306/test?user=root&password=swordfish
    这个模块是针对这个URL地址进行处理的函数接口。
 4.Util
    这个模块主要负责一些工具的封装,封装了字符串的处理函数,还封装了面向对象中的向量(vector)、StringBuffer等工具,
方便整个模块的处理。
5.Db
    这个模块主要包括实现连接代理模式、结果集代理模式、SQL语句代理模式和数据库连接池、各类数据库连接的
真实实现等。这个模块是整个程序的核心。


代码地址:https://github.com/snaiper80/libzdb

官网:http://www.tildeslash.com/libzdb/

多看官方文档,虽然英文有限,强制自己看吧

下载版本,解压tar -zxvf libzdb-3.1.tar.gz

进入到解压的路径中

如果安装好mysql的话,直接执行下面的指令即可

./configure  

make  

make install

但是我的版本这样编译了,连接mysql的时候,报错,说不支持

后来通过浸淫linux开发多年的朋友帮忙,解决问题了,解决方法是

第一步./configure的时候,要指定mysql的配置,即后面加参数,--with-mysql=/usr/bin/mysql_config

/usr/bin/mysql_config这个路径根据自己的情况,找到自己的安装路径。重新编译了就可以了。


最后贴代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<zdb/zdb.h>
#include<zdb/Exception.h>
#include<zdb/Connection.h>
#include<zdb/URL.h>
/* * 作者:搁浅的贝 * 编译方式:gcc main.c -I /usr/local/include/zdb/ -o main -lzdb  * */

int main(int agc, char** argv)
{
	URL_T url = URL_new("mysql://localhost/mysql?user=root&password=root123");
	if (url == NULL)
	{
		printf("URL parse ERROR!/n");
		return 0;
	}
	ConnectionPool_T pool = ConnectionPool_new(url);
	//设置初始化连接数目    
	ConnectionPool_setInitialConnections(pool, 20);
	//      //开启线程池
	ConnectionPool_start(pool);
	//从线程池中取出连接(活动连接数+1)
	Connection_T con = ConnectionPool_getConnection(pool);
	//执行SQL语句,返回结果集
	ResultSet_T result = Connection_executeQuery(con, "select * from user");
	//输出全部连接数目      
	printf("ALL NUMBE:%d\n", ConnectionPool_size(pool));
	//输出活动连接数目
	printf("ACTIVE NUMBER:%d-----------------------\n", ConnectionPool_active(pool));
	while (ResultSet_next(result))
		//游标滑到下一行
	{
		//获取列名 ResultSet_getColumnName
		//获取列值 ResultSet_getString
		printf("column: %s\n", ResultSet_getColumnName(result, 2));
		//根据列名获取值ResultSet_getStringByName
		printf("stringByname: %s\n ", ResultSet_getStringByName(result, "Host"));
		//根据列索引获取列值 [注意索引是从1开始不是0]
		printf("getString:%s\n ", ResultSet_getString(result, 3));
		printf("next===========================\n ");
	}
	//关闭连接(活动连接-1)
	Connection_close(con);
	//将连接池与数据库分离
	ConnectionPool_stop(pool);
	ConnectionPool_free(&pool);
	URL_free(&url);
	return 0;

}


借鉴好多人的经验,东借西凑,整理的文章,请喷





  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值