mysql sdf_初试mysql

需要一个对站别管控的程序。

所以,分析下来,这就需要:

1.一个服务器,带数据库。

2.三台机器,分别在三个没有网络的站别上。

3.一个程序可以上传资料,对资料进行判断。

在server机的一个目录下,需要用到两个监视脚本,以监视某些目录,管控从站别上传的文件。(或许可以改进,工作进行中)

事实上,在这个需求之前,我刚好写了上面的两个脚本,对client机上传的文件进行甄别,并根据结果对其做判断(是回复failed还是回复pass并记录站别到数据库)。在那时对mysql有一点点了解。由于需要远程处理。所以这次理所当然的选择mysql作为服务器的数据库。

一:server的搭建(ntp)(dhcp??)

在debian系的系统里,下载mysql比较简单。apt-get install mysql-server-5.0就行了(会附带安装mysql-client-5.0等)。

在mysql的配置上,花费了一些时间。

当我在mysql里使用

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

flush privileges;

后并没有如我期望的那样能够在别的机器上连接到服务器上。提示

ERROR 2003 (HY000): can not connect to MYSQL server on '72.16.1.209' (146)

查询了一些资料以后,发现:原来在server机上,还需要配置/etc/mysql/my.cnf

将bind-address=127.0.0.1改成bind-address=0.0.0.0;并/etc/init.d/mysql restart就可以了。

这样就可以使任何机器访问server机的数据库了,并且对所有database的所有table(*.*)都有所有的权限(all privileges)了,只需通过"123456"这个password。

注:这是特殊情况,实际应用中需要对不同client在不同的database中不同的table开通不同的权限。

数据库的搭建已经完成配置了,还需要建立以database。

mysql> create database the_base; /*创建shbase*/

mysql> use shbase;

mysql> create table the_table (mbsn char(20), station char(5), fault char(100), primary key (mbsn));

创建the_table,这里只建了三列,主板号,站别,错误项。为mbsn建立约束,杜绝数据库中出现多个统一mbsn的数据。关于数据类型见这里没有用到php。

这样,server端基本就配置好了。还有一个inotify脚本。放到后面说。

二:站别与server的通信

如上所说的。三个站别需要另摆一台机器做client。而另一个站别,将在此站运行的程序里完成对站别的判断。这就需要一个程序去做。

期间想在console界面下用脚本写,后来决定在图形界面下做。准备(gtk、libmysqlclient15-dev、mysql-client-5.0)。

在做这个之前我打算用pipe去调用脚本通信。但是mysql有专门的接口函数可以用,这就省事很多了。可以直接取数据了。

用到的函数有:

mysql_init();

mysql_real_connect();

mysql_real_query();

mysql_store_result();

mysql_fetch_row();

mysql_close();

这中间用到了g_strup_printf()合成字符串;需要g_free()释放内存。回调函数链接到动作。这里主要记一下遇到的问题和困惑,不时加上。以备忘。

1.entry

gtk_entry_set_max_length /*设置最大输入字符串长度,这里为18,18未宏定义*/

gtk_entry_get_text /*get_text*/

gtk_entry_set_text /*set_text,在每次动作完成后,清空entry*/

g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(enter), (gpointer)entry); /*activate事件*/

2.notebook

gtk_notebook_append_page(顺序插入) /*notebook建立起来以后是空白的,这个函数顺序插入标签页*/

gtk_notebook_get_current_page(从0开始计数) /*根据page号,来switch不同站别,做不同的操作*/

3.mysql_real_query();mysql_store_result();mysql_fetch_row()

mysql_real_query返回的数据,用mysql_store_result()和mysql_fetch_row()得到。row是一个类似数组的结构。其中的列为row[0];row[1]……

mysql_real_query的有一些操作不会有result,包括:DELETE、INSERT、UPDATE。

mysql_real_query成功返回0。

4.return

在这期间,有些地方没有return,导致程序莫名崩溃。需注意。

5.功能测试

功能测试站是有网络的。而且仅在console下,并不在图形界面下。刚好可以用到上面提到的两个监视脚本。

准备vsftpd服务。

主要是用到一个inotifywait命令去监控ftp家目录下(more /etc/passwd | grep ftp | awk -F':'

'{print($6)}')的Request目录。测试程序会在测试过程中上传一个带mbsn的文件,inotifywait监测到create文件

后,在stdout输出文件名。重定向到一个txt文件中。另一个脚本会在检测到txt文件不为空时,读取出文件名。并去相应路径取到文件,解析内容。若

站别符合,就从数据库mysql中导出对应mbsn的信息;根据规则生成respond文件,放在ftp家目录下的Respond目录下。等待测试程序来

取。若不符合,则生成对应respond文件。

三:需要解决的问题

ntp不稳定(服务器开启一段时间,并且服务器端的配置文件中,将ntpd自身同步外部服务器的行注释掉),vsftp抢资源(根据产品唯一的mbsn号,对上传ftp的文件区分开,以保证不会写同一个文件)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值