[TOC]
## 參數文件
MySQL數據庫參數文件的作用和Oracle數據庫的參數文件極其類似忙,不同的是,Oreacle啟動沒有知道參數文件就不能裝載(mount)操作的。MySQL稍微不同,MySQL可以不需要參數文件。這時參數值取決于編譯MySQL是的指定默認值喝源代碼中指定參數的默認值。但是如果找不到mysql架構同樣保存。
數據庫參數可以看成一個鍵/值(key/value)對。
數據庫參數類型分為兩類:
(1)動態參數:意味執行中可以進行修改
(2)靜態參數:靜態不能夠進行修改
可以通過set進行動態參數的設置語法:

這里可以看到global 和session關鍵字 它們表明是當前會話還是整個實例的生命周期。
如圖: 設置全局值 對本次生命周期有效但參數文件本身沒有修改。

*****
## 日志文件
mysql日志文件有:(1)錯誤日志(error log)、(2)二進制日志(binlog)、(3)慢查詢日志(slow query log) (4) 查詢日志(log)
****
### 錯誤日志
錯誤日志文件對MySQL的啟動、運行、關閉過程進行了記錄。 用戶可以通過命令:` SHOW VARIABKES LIKE 'log_error'\G`


查找錯誤日志文件名
通過命令[root@centos7-w data]# `tail -n 50 centos7-w.err`執行(我沒有成功,顯示沒有找到這個文件)
### 慢查詢日志
慢查詢日志(slow log)可幫助DBA定位可能存在問題的SQL語句.從而進行SQL語句層面的優化。
參數long_query_time參數來設置sql語句的運行時間, 默認為10,代表十秒。
`show variables like 'long_query_time'\G`

MySQL默認情況下并不啟動慢查詢日志,用戶要啟動則設置為:ON
查詢慢查詢是否開啟:`show variables like 'log_slow_queries'\G` (我測試沒有找到該差數)
參數:log_queries_not_using_indexes :表示如果運行的SQL語句沒有使用索引,則MySQL數據庫同意會將這條SQL語句記錄到慢查詢日志文件。
`show variables like 'log_queries_not_using_indexes'\G`

MySQL5.6.5版本開始新增log_throttle_querrottlequeries_not_using_indexes 表示每分鐘允許記錄到slow log且并未使用索引的sql語句次數。默認為0 表示沒有限制。
`show variables like 'log_throttle_querrottlequeries_not_using_indexes'\G`

mysqldumpslow命令可以簡單直觀的查看:
`mysqldumpslow nh122-190-slow.log`
用戶需要查詢執行時間最長的10條sql語句:
`mysqldumpslow -s al -n 10 nh122-190-slow.log`
mysql5.1 可以將慢查詢插入到數據表中 慢查詢在mysql架構下,名為slow_log 表結構定義如下:
`show create table mysql.slow_log\G`

參數log_output指定了慢查詢輸出的格式:
`show variables like 'log_output'\G`

設置慢查詢日志表的輸出格式:
`set global log_output='table'`;
之后就可以查詢表的數據:

查看定義可以發現該表使用的是CSV引擎,所以查詢效率并不高,用戶可以把slow_log引擎轉換成MyISAM。提高查詢速度,如果已經啟動慢查詢,會提示錯誤。
`ALTER mysql.slow——log ENGINE=MyISAM;`
所以需要先關閉慢查詢:
`SET GLOBAL slow_query_log=off`
再執行一遍:
`ALTER mysql.slow——log ENGINE=MyISAM;`
但是如果改成MyISAM會造成額外的開銷。不過好在慢查詢的參數是動態的 所以用戶方便的盡心設置或修改。
### 查詢日志
通過命令 tail 進行查詢
tail 【文件名】; 默認名稱是主機名.log
### 二進制日志
二進制日志記錄的是數據庫執行更改的所有操作,但是不包括select 和 show 這類操作。
查詢命令
首頁獲取文件名 `show MASTER STATUS\G`

查詢:`SHOW BINLOG EVENTS IN 'mysql-bin.000005'\G`

通過配置參數log-bin[=name]可以啟動二進制日志。
影響二進制日志記錄的信息和行為的參數:
(1) max_binlog_size:指定單個二進制日志的最大值,如果超過,產生新的二進制日志文件。mysql5.0默認1G(之前的版本默認1.1G)
(2)binlog_cache_size:該事務提交(committed)時直接將緩沖中的二進制日志寫入二進制日志文件,改緩沖大寫有該參數決定。默認為32K,不能設置過大。通過show global status 可以查看 binlog_cache_use、binlog_cache_disk_use的狀態。
(3)sync_binlog:該參數表示每寫緩沖多少次就同步到磁盤。 如果將N設為1 即 sync_binlog=1表示同步寫磁盤的方式來寫二進制日志,這時寫操作不使用操作系統緩沖來寫二進制日志。值為0 如果InnoDB引擎進行復制,可以得到最大的高可用性。不過IO系統會帶來一定的影響。但是該參數值為1,在事務發出COMMIT動作之前,由于該參數值為1,因此會將二進制日志立即寫入磁盤。如果已經寫入二進制日志但是提交沒有發生,此時就會發生宕機,那么下次啟動時,COMMIT操作并沒有發生這個事務就會被回滾掉。但是二進制日志已經記錄了該事務信息,不能被回滾。 這個問題通過參數innodb_support_xa設為1來解決,雖然innodb_support_xa與XA事務有關,但他同事也確保了二進制日志和數據文件的同步
(4)binlog-do-db:
(5)binlog-ignore-db:
參數binlog-do-db和binlog-ignore-db表示需要寫入或者忽略寫入哪些庫的日志。默認為空,表示需要同步所有庫的日志到二進制日志,
(6)log-slave-update:如果當前戶數看是復制slave角色,它將不會從master取得并執行二進制日志到自己的二進制日志中去,這時候需要寫入的話 需要設置該參數。 如果搭建master=>slave=>slave架構的復制,則必須設置該參數。
(7)binlog-format:該參數是設置二進制日志的格式。mysql5.1版本之后才有的。該參數可設:
1.STATEMENT格式:記錄的是邏輯SQL語句
2.ROW格式:記錄表的行更改情況。如果該參數設置該格式,可以將InnoDB的事務隔離基本設為READ COMMITTED ,以獲得更好的并發性。但是會對磁盤空間要求有一定的增加。
3.MIXED格式:該格式下默認采用STATEMENT格式進行二進制記錄,但是在存儲引擎為NDB做DML操作或者使用了UUID()、USER()、CURRENT_USER()、FOUND_ROWS()、ROW_COUNT()等不確定函數或者使用了INSERT DELAY語句或者用戶定義函數(UDF)或使用臨時表。
此外還有存儲以前的限制如表:

binlog-format是動態參數可以在數據庫運行環境下更改。 `SET @@session.binlog_format='ROW';`
也可以全局設置 `SET GLOBAL binlog_format='ROW';`
使用mysqlbinlog查看日志。
提示錯誤可以根據以下方法解決問題:
一是在MySQL的配置/etc/my.cnf中將default-character-set=utf8 修改為 character-set-server = utf8,但是這需要重啟MySQL服務,如果你的MySQL服務正在忙,那這樣的代價會比較大。
二是用mysqlbinlog --no-defaults mysql-bin.000004 命令打開
*****
## 套接字文件
用UNIX域套接字方式鏈接就需要一個套接字文件.該文件可由socket控制。一般在/tmp目錄下 名為 mysql.sock
*****
## pid文件
MySQL啟動時,會將自己的進程ID吸入pid文件。 參數pid——file哦控制 默認位于數據庫目錄下。文件名為主機名.pid
` show variables like 'pid_file'\G`

*****
## 表結構定義文件
frm 為后綴名的文件,這個文件記錄了該表的表結構定義。 frm還用來存放視圖定義。 可以直接用cat命令進行查看`cat 文件名.frm`
*****
## InnoDB存儲引擎文件
### 表空間文件
InnoDB采用存儲數據按表空間進行存放的設計。默認初始大小為10MB,名為ibdata1的文件。該文件就是表空間文件(tablepace file),參數innodb_data_file_path對其進行設置。
格式如下: `innodb_data_file_path=datafile_spec1[;datafile_spec2].....`

如果用多文件來組成表空間。 如果表位于不同的磁盤,磁盤負載被平均,因此可以聽數據庫整體性能。同時文件名后面跟了屬性,表示文件代表為2000M 文件2用完可以制動增長(autoextend)。
設置innodb_data_file_path數之后所有InnoDB存儲引擎表的數據會記錄!共享表空間中。 若設置了參數 innodb_file_per_tabel。則用戶基于InnoDB存儲引擎產生獨立表空間。命名規則為:表名.ibd。
`SHOW VARIABLES LIKE 'innodb_file_per_tabel'\G`
如果innodb_file_per_tabel=NO 則會產生單獨的.ibd獨立表空間文件。 改文件僅存表數據、索引和插入緩沖BITMAP等信息。
文件存儲方式:

## 重做日志文件
在I你弄DB目錄下有ib_logfile0和ib_logfile1的文件。官方稱為日志文件,這個日志文件記錄對于InnoDB存儲引擎單獨事務日志。運行方式是 日志文件1達到最后是會回到日志文件2,如果寫滿在切換日志文件1。

參數影響重做日志文件的屬性
(1)innodb_log_file_size 指定日志文件大小 InnoDB 1.2.x總文件大小不得大于4GB,而1.2.x版本擴大512GB。
(2)innodb_log_files_in_group 指定了日志文件組中重做日志文件的數量 默認為2
(3)innodb_mirrored_log_groups指定日志鏡像文件組的數量 默認為1 只表示一個日志文件組沒有鏡像。
(4)innodb_log_group_home_dir 指定了日志文件組所在的路徑 默認./
顯示配置`SHOW VARIABLES LIKE 'innodb%log%'\G`

重做日志有一個capacity變量該值代表最后檢查點不能超過這個值,如果超過則必須將緩沖池的臟頁列表的部分藏獨數據頁寫回磁盤,這時會導致用戶線程的阻塞。


