MySQL
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;