怎么使用mysqlc 怎么使用mysql

怎样使用Mysqlcheck来检查和修复,优化表的详解mysqlcheck 是 MySQL 自带的一个工具,作用就是保养 表,其实就是检查,分析,修复和优化了 。下面来介绍 mysqlcheck 工具的简单使用,官方文档在这里
以下的例子都是基于 MySQL 5.6 版本运行状态下(mysqlcheck是个在线工具), 不同的存储引擎对于这个命令的支持程度不同(指的是 check, repair, analyze, optimize),下面内容偏于操作,主要基于 innodb 引擎 。
提示:OPTIMIZE 在大表时候可能会消耗很多时间,不清楚原理情况下请谨慎使用!!! innodb 一般不用 OPTIMIZE,请参见 Using MySQL OPTIMIZE tables? For InnoDB? Stop
检查特定的表
注意在shell中执行,不是在mysql的交互环境下
如果应用中提示某个表坏了 , 使用下面的命令来检查 。
$ mysqlcheck -c newmandela order -uroot -pEnter password:
newmandela.order
OK
newmandela 是库名 , order是表名,还需要输入用户名和密码
检查一个库中的所有表
$ mysqlcheck -c newmandela -uroot -p
Enter password:
newmandela.account OK
newmandela.alarm OK
newmandela.alarm_settings OK
newmandela.auth_group OK
newmandela.auth_group_permissions OK
newmandela.auth_permission OK...
用C语言如何对MySQL数据库进行操作有时为了性能怎么使用mysqlc,怎么使用mysqlc我们会直接用C语言来开发相关怎么使用mysqlc的模块怎么使用mysqlc,尤其在我们的web应用中 , 虽然PHP、JSP等脚本均提供了MySQL的接口,但是显然直接使用C语言具有更好的安全性和性能,Michael以前用PHP开发的多个项目中就使用了C语言编写的这类接口 , 然后再编译到php里面,供php脚本直接使用,这方面的话题就不多说了,下面主要说一下在Linux下如何用C语言连接MySQL数据库,并且读取里面的数据返回,同时如何进行编译 。if defined(_WIN32) || defined(_WIN64)为了支持windows平台上的编译#includewindows.h#endif#includestdio.h#includestdlib.h#includemysql.h我的机器上该文件在/usr/local/include/mysql下定义MySQL数据库操作的宏 , 也可以不定义留着后面直接写进代码defineSELECT_QUERYselectusernamefromtbb_userwhereuserid=%dintmain(intargc,char**argv)char**argv相当于char*argv[]{MYSQL mysql,*sock;定义数据库连接的句柄,它被用于几乎所有的MySQL函数MYSQL_RES *res;查询结果集 , 结构类型MYSQL_FIELD *fd ;包含字段信息的结构MYSQL_ROW row ;存放一行查询结果的字符串数组char qbuf[160];存放查询sql语句字符串if(argc!=2){//检查输入参数fprintf(stderr,usage:mysql_selectuserid\n\n);exit(1);}mysql_init(mysql);if(!(sock=mysql_real_connect(mysql,localhost,dbuser,dbpwd,9tmd_bbs_utf8,0,NULL,0))){fprintf(stderr,Couldn'tconnecttoengine!\n%s\n\n,mysql_error(mysql));perror();exit(1);}sprintf(qbuf,SELECT_QUERY,atoi(argv[1]));if(mysql_query(sock,qbuf)){fprintf(stderr,Queryfailed(%s)\n,mysql_error(sock));exit(1);}if(!(res=mysql_store_result(sock))){fprintf(stderr,Couldn'tgetresultfrom%s\n,mysql_error(sock));exit(1);}printf(numberoffieldsreturned:%d\n,mysql_num_fields(res));while(row=mysql_fetch_row(res)){printf(Theruserid#%d'susernameis:%s\n,atoi(argv[1]),(((row[0]==NULL)(!strlen(row[0])))?NULL:row[0]));puts(queryok!\n);}mysql_free_result(res);mysql_close(sock);exit(0);return0;为了兼容大部分的编译器加入此行}编译的时候,使用下面的命令gcc -o mysql_select ./mysql_select.c -I/usr/local/include/mysql -L/usr/local/lib/mysql -lmysqlclient (-lz) (-lm) 后面两个选项可?。?根据您的环境情况运行的时候,执行下面的命令./mysql_select 1将返回如下结果怎么使用mysqlc:numberoffieldsreturned:1Theruserid#1'susernameis:Michaelqueryok!上面的代码我想大部分都能看明白,不明白的可以参考一下MySQL提供的有关C语言API部分文档源码天空,各个函数都有详细说明 , 有时间我整理一份常用的API说明出来 。
如何使用mysql的 c API 函数mysqlMYSQL_OPT_READ_TIMEOUT 是 MySQL c api 客户端中用来设置读取超时时间的参数 。在 MySQL 的官方文档中,该参数的描述是这样的:
MYSQL_OPT_READ_TIMEOUT (argument type: unsigned int *)The timeout in seconds for each attempt to read from the server. There are retries if necessary, so the total effective timeout value is three times the option value. You can set the value so that a lost connection can be detected earlier than the TCP/IPClose_Wait_Timeout value of 10 minutes.
也就是说在需要的时候,实际的超时时间会是设定值的 3 倍 。但是实际测试后发现实际的超时时间和设置的超时时间一致 。
而具体什么时候发生三倍超时 , 在文档中没有找到 。所以对 MySQL 5.7.20 的源码进行了一些分析 。
使用 GDB 调试代码找了实际与 mysql server 通信的代码,如下:
其中 vio_read() 函数中 , 使用 recv 和 poll 来读取报文和做读取超时 。net_should_retry() 函数只有在发生 EINTR 时才会返回 true 。从这段代码来看是符合测试结果的,并没有对读取进行三次重试 。只有在读取操作被系统中断打断时才会重试,但是这个重试并没有次数限制 。
从上面代码的分析可以看出 , 代码的逻辑和文档的描述不符 。于是在一顿搜索后,找到了一个 MySQL 的 BUG(Bug #31163) 。该 BUG 报告了在 MySQL 5.0 中 , MySQL c api 读取的实际超时时间是设置的三倍,与现有文档描述相符 。于是对 MySQL 5.0.96 的代码又进行分析 。
同样使用 GDB 找到了通信部分的代码 。这次找到了重试三次的代码,如下:
这个版本的 MySQL api 的读写超时是直接使用的 setsockopt 设置的 。第一次循环 , 在 A 点发生了第一次超时(虽然注释写的非阻塞,但是客户端的连接始终是阻塞模式的) 。然后在 B 点将该 socket 设置为阻塞模式 , C 点这里重置 retry 次数 。由于设置了 alarm 第二次以后的循环会直接进入 D 点的这个分支,并且判断循环次数 。作为客户端时net-retry_count 始终是 1 , 所以重试了两次,共计进行了 3 次 vioread 后从 E 点退出函数 。
由上面的分析可知,MySQL 文档对于该参数的描述已经过时,现在的 MYSQL_OPT_READ_TIMEOUT 并不会出现三倍超时的问题 。而 Bug #31163 中的处理结果也是将文档中该参数的描述更新为实际读取超时时间是设定时间的三倍 。也许是 MySQL 的维护者们在后续版本更新时忘记更新文档吧 。
【怎么使用mysqlc 怎么使用mysql】怎么使用mysqlc的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于怎么使用mysql、怎么使用mysqlc的信息别忘了在本站进行查找喔 。

    推荐阅读