1. 程式人生 > >新手Centos7安裝mysql,並使用libzdb資料庫連結池連線資料庫

新手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;

}

借鑑好多人的經驗,東借西湊,整理的文章,請噴