数据分析系统DIY2/3:本地64位WIN7+DEV C++编译程序操作VMware CentOS7+MariaDB
数据分析系统DIY中要完毕的三个任务。
一、用VMware装64位CentOS。数据库服务端用CentOS自带的就好。
二、数据採集与预处理用Dev-C++编程解决。
三、用本地Win7 64上的MATLAB R2012b连接数据库进行挖掘分析。
本文是完毕第二个任务的过程。
1.Terminal中输入命令行“ifconfig”确认CentOS虚拟机ip:192.168.124.128
2.输入命令行“netstat -anp|grep mysqld”确认mariadb服务监听port:3306
3.Win7本地安装使用HeidiSQL測试是否能连接(HediSQL是windows版mariadb自带的图形界面管理软件,安装mariadb时能够选择安装)
打开HeidiSQL后会话设置如图
点击“打开”后报连接失败
4.猜測原因可能是mariadb远程訪问权限未开
Terminal登录mariadb”mysql -u root -p“,输入password登录
mariadb提示符后输入赋权语句”GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '登录password' WITH GRANT OPTION;“
随后刷新”flush privileges;“
回到win7中的HeidiSQL上继续測试。依旧失败。
5.猜測原因可能是centos7自带的防火墙
命令行”startx“进入GUI后设置Applications-Sundry-Firewall
在配置页面默认的zone-public选择Ports页,单击Addbutton。输入mariadbport3306后确认。效果如图。
6.回到win7中的HeidiSQL上測试。连接成功。
7.可是重新启动centos后却发现HeideSQL又连不上server了。
进入Applications-Sundry-Firewall-Ports检查设置,发现之前第5步中3306port的开放规则竟然消失了。
原来刚才设置的那个仅仅是暂时规则,重载firewall后该规则就失效了。
要想设置永久规则,Configuration处得先设为Permanent。例如以下图:
再次打开Ports页,单击Addbutton。输入port号3306后确认。
这回无论重新启动几次centos都能够顺利远程登录了。
/*接下来该DEV C++了,没想到这一步竟然这么难,用了将近8个小时才搞定。*/
8.首先须要下载mysql的devpak,devpaks.org 不知何故被墙。dev c++无法更新。
仅仅好使用goagent通过浏览器訪问。终于找到了下载地址。
9.下载后通过dev c++的“工具-Package Manager-Install”安装“MySQL-6.1.5-1aved.DevPak”
10.成功安装后,进入dev c++的“工具-编译选项”
a.编译器页中的连接器增加命令“-lmysql”
b.文件夹页-c包括文件页/c++包括文件页加入mysql包路径“dev-cpp安装文件夹\include\MySQL”
11.将“dev-cpp安装文件夹\lib“中的”libmysql.dll“拷入"C:\Windows\SysWOW64"。否则编译时系统会报错。
假设还报错,那就拷到"C:\Windows\system32"
12.编译例程
#include <mysql.h> #include <stdlib.h> #include <stdio.h> int main(int nArguments, char *pszArguments[]) { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; char *server = "192.168.124.128";//第一步中确认的centos服务器ip char *user = "root"; char *password = "123456"; /* 此处改成你的密码 */ char *database = "mysql"; conn = mysql_init(NULL); /* Connect to database */ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); } /* send SQL query */ if (mysql_query(conn, "show tables")) { fprintf(stderr, "%s\n", mysql_error(conn)); } res = mysql_use_result(conn); /* output table name */ printf("MySQL Tables in %s database:\n",database); while ((row = mysql_fetch_row(res)) != NULL) printf("%s \n", row[0]); /* close connection */ mysql_free_result(res); mysql_close(conn); //system("PAUSE"); return 0; }
执行结果如图:
任务二,mission accomplished!