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

来源:互联网 发布:手机淘宝在哪领优惠券 编辑:程序博客网 时间:2024/05/21 03:20


最近公司服务要从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_getStringprintf("column: %s\n", ResultSet_getColumnName(result, 2));//根据列名获取值ResultSet_getStringByNameprintf("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;}


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





0 0
原创粉丝点击