首页 > 技术文章 > MySQL

chaikefusibushiji 2015-06-02 18:02 原文

9. 查看配置文件来源

配置文件,首先由命令行参数中的--defaults-file指定。若该该参数不存在,则按mysqld --verbose --help指定的文件顺序进行读取。


查看进程


查看是否存在--defaults-file参数,若存在,则参数值即为MySQL使用的配置文件。


打印配置信息


如果命令行参数未指定配置文件,则MySQL按上述顺序查找配置文件。



8. 文件结构

每一个MySQL表主要由三部分组成:元数据、索引、数据。元数据即表定义等基本信息。


MyISAM

每一个MyISAM表,均对应三个同名的.frm,   .MYI,   .MYD文件。

存放内容如下

.frm:元数据

.MYI:索引

.MYD:数据


说明:可以通过在不同的数据库目录之间,自由移动上述三个文件,来实现MyISAM表的移动。InnoDB表不具有此特性,包括FILE_PER_TABLE表空间的InnoDB表。


InnoDB

每一个InnoDB表,均对应一个同名.frm文件,此文件无实际意义。

全部表的元数据,都存放在系统表空间。

每个表的索引和数据,要么同时存放在共享的系统表空间,要么同时存放在各自的FILE_PER_TABLE表空间。


系统表空间

文件结构:ibdata文件集合,如ibdata1,ibdata2等。

类型:全局共享,所有数据库的所有表共享ibdata文件。

作用:

1. 存放全部表的元数据;

2. 作为undo log, change buffer, doublewrite buffer等的存储区;

3. 存放部分表的索引和数据。


FILE_PER_TABLE表空间

文件结构:与该表同名的.ibd文件,如employee.ibd。

类型:每个表有自己的表空间,每个表空间有自己的.ibd数据文件。

作用:存放该表的索引和数据。


说明:

1. 系统表空间和FILE_PER_TABLE表空间只服务于InnoDB类型的表,即ibdata1和.ibd文件为InnoDB所有;

2. 当全局系统变量innodb_file_per_table = off时,新创建的表索引和数据,存放在系统表空间,即ibdata中;

3. 当全局系统变量innodb_file_per_table = on时,创建新表时,会同时创建同名的.idb文件,用于存放该表的索引和数据。



7. select选项

sql_no_cache:不使用query cache。既不从query cache中查找结果,也不将结果放入query cache。

select sql_no_cache * from test where id = 1045;



6. 超时问题

client不发起任何查询,一段时间后mysql自动关闭该连接。


6.1 系统变量wait_timeout

参考《MySQL系统变量》


6.2 C++ client连接库

从连接池中取出一条连接,需要验证连接是否有效,bool sql::Connection::isValid()函数可以完成


bool sql::Connection::isClosed()函数不具有此项功能。



5. 使用connector-c++


下载

官网下载.tar.gz安装包,最后使用FQ软件否则可能不能切换平台。


解压


include目录包含头文件,lib目录包含库文件(动态库和静态库都有)。


解决boost依赖

connector-C++使用了boost库,还是动态依赖,这是一个败笔。

下载boost库,解压


boost目录是整个库的头文件目录,里面是hpp头文件。把整个boost头文件目录拷出来放到工程目录下,话说boost中有很多header only库,直接引入头文件即可使用还是挺方便的。


编译


-I:指定头文件目录。我把mysql的include和boost的boost合并了。

./lib/libmysqlcppconn-static.a:静态编译

mysql中用到了线程和时间函数,所以加入-lpthread -lrt -ldl库,否则报链接错误。



4. 查看版本号

查看mysql版本号:select version();

查看innodb版本号:select @@innodb_version;



2. 禁止查询结果放入缓存

select SQL_NO_CACHE * from table;



1. 清空查询缓存

RESET QUERY CACHE;

推荐阅读