免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2272 | 回复: 0
打印 上一主题 下一主题

初试mysql [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-17 15:05 |只看该作者 |倒序浏览

需要一个对站别管控的程序。
所以,分析下来,这就需要:

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的文件区分开,以保证不会写同一个文件)。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104849/showart_2096814.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP