use mysql in centos machine by c++ , 实现定时建表,取数等功能

  • 确定centos 版本 ,用命令

结果是

也就是说  , 是 centos6


  •  看是32位还是 64位

结果为

所以是 32位的


  •  看 mysql 版本

显示

所以, 是 mysql  5.1.73


  • 先写一个最简单的显示mysql版本的程序

 

  • 如何编译

mysql 安装后, 会自带1个命令 ,有2个参数  一个是 :

它的输出结果是:

第二个是

输出:

 

所以, 刚才的程序就可以这样编译 :

 

来源: https://www.codingfriends.com/index.php/2010/02/17/mysql-connection-example/comment-page-1/

  • 然后再做一个显示数据库所有表的程序 , 来源同上

编译方法与之前的一样 , 如果把 这句

换为 :

即可实现建表

  • 以上只是 Mysql相关 ,如果与 ctp 合并, 参见:

http://www.notesoflyang.com/?p=2152

编译方法将改为

以下的程序实现了当把日期作为参数传进去之后 (20190805)

能自动建表并插数

  • centos 7 用 sleep 函数 加  #include <unistd.h>

此程序的问题是 cpu 占用过高 ,在centos 执行 :

发现占用率是 百分100 ,

因为原来的写法是 :

while(1) {}

改为  sleep(大整数)即可

看进程的方法来自 :

https://www.cyberciti.biz/faq/how-to-check-running-process-in-linux-using-command-line/


 

此外, 还存在的问题是内存泄漏, 随着程序的运行, 内存会很快耗尽 (经过观察, 不存在这个问题, 是程序一开始执行内存占用急增 , 过一阵就会恢复正常 )

检查内存泄漏的工具是   valgrind

安装方法 :

参拷:  https://stackoverflow.com/questions/22495744/how-to-install-valgrind-3-9-0-in-centos-5-5

安装后 :

执行


发现程序执行一段时间后会自己结束

是因为sleep过短的原因, 改为 sleep(26000) ,  约7个小时即可

 

 

  • 如何定时执行此程序并定时关闭

a) 因为程序运行在 美国虚拟机, 首先要知道当前的中国时间

来源 :  http://www.cplusplus.com/reference/ctime/gmtime/

编译方法 :

b) 要有一个 能实现cron trigger 的库 , 要能在 centos 运行的 非.net版本

一开始想用这个 :  https://stackoverflow.com/questions/3618499/c-c-api-to-decode-cron-style-timings

是c++程序可以调用的lib , 但是下载已不可用, 是 2013年的


或者可以用centos系统自带的crontab  , 定时执行  c++ 程序

https://blog.csdn.net/capecape/article/details/78515558

思路是 : 先写一个脚本判断时间,该执行还是该关闭程序

然后用 crontab 每小时执行脚本

 

如何在 bash 脚本判断时间 : https://unix.stackexchange.com/questions/395933/how-to-check-if-the-current-time-is-between-2300-and-0630

 

自动启动的脚本是这样的:

 

需要注意的是这句 :  dateStr=$(date -d ” + 24 hour” ‘+%Y%m%d’);

等号2测不能有空格 , 来源 :

https://stackoverflow.com/questions/9556517/variable-assignment-inside-a-case-statement-bash

此外, 用 nohup 来后台执行

让脚本可执行的方法是 :


如何自动停止

 

所以, 最终的脚本是这样的 :

 

 

 

 

  • centos crontab

如何查看现有定时任务, 新建任务, 见 :

https://tecadmin.net/crontab-in-linux-with-20-examples-of-cron-schedule/

我加了一个这样的任务:

每分钟执行此脚本, 但是 , 执行没有, 或者执行的结果在哪里看?

答案是 ;  https://stackoverflow.com/questions/28856326/crontab-simple-echo-not-running

如果要每小时, 就

  • 调试用到的命令行

 

  • 待解决的问题 :

a) 找一个读 config 文件的库

b) 自动建表时避开周末 及休市日, 这个要用到config

 

  • 参考文档

https://sandeepghai.wordpress.com/2011/08/07/linking-of-mysql-database-with-c-on-linux-machine/

Linking of MYSQL Database with C++ on Linux Machine


https://stackoverflow.com/questions/8896963/connecting-to-mysql-through-c

关于 how to link


http://zetcode.com/db/mysqlc/

代码编译不通过 , 原因未知