date:20140101
auth:Jinhtml
1、物理組成
(一) 日誌文件
參考:http://dev.mysql.com/doc/refman/5.1/en/server-logs.html
一、錯誤日誌 error log
配置
log-error = /data/logs/mysql/3306_error.log
啓動參數
--log-error=/data/logs/mysql/3306_error.log
變量
# mysqladmin -S /data/mysql/mysql.sock --password=password Variables |grep log_error
| log_error | /data/logs/mysql/3306_error.logmysql
二、二進制日誌 Binary LOG & Binary Index
二進制日誌包含了全部更新了數據或者已經潛在更新了數據(例如,沒有匹配任何行的一個DELETE)的全部語句。
語句以「事件」的形式保存,它描述數據更改。
運行服務器時若啓用二進制日誌則性能大約慢1%sql
1)常規配置shell
log-bin=mysql-bin log-bin = binlogs/mysql-bin 文件存放目錄前綴 binlog_format = ROW #格式 #binlog_format=mixed expire_logs_day=1 #過時時間 超過自動清除 max_binlog_size=700M #每一個文件大小 log-bin-index[=file_name] #二進制日誌索引文件的文件名。當mysqld在運行時,不該手動編輯該文件 binlog_cache_size=3M
對非事務表的更新執行完畢後當即保存到二進制日誌中。對於事務表,例如BDB或InnoDB表,全部更改表的更新(UPDATE、DELETE或INSERT) 被緩存起來,直到服務器接收到COMMIT語句。數據庫
在該點,執行完COMMIT以前,mysqld將整個事務寫入二進制日誌。當處理事務的線程啓動時,它爲緩衝查詢分配binlog_cache_size大小的內存。若是語句大於該值,線程則打開臨時文件來保存事務。線程結束後臨時文件被刪除
max_binlog_cache_size(默認4GB)能夠用來限制用來緩存多語句事務的緩衝區總大小。若是某個事務大於該值,將會失敗並 回滾緩存
[root@master1 ~]# mysqladmin -S /data/mysql/mysql.sock --password=password Variables |grep binlog_cache
| binlog_cache_size | 32768 |
| max_binlog_cache_size | 4294963200性能優化
2)清除LOG
手動刪除二進制LOG
能夠用RESET MASTER語句刪除全部二進制日誌文件,或用PURGE MASTER LOGS只刪除部分二進制文件
EG:服務器
mysql -uroot -pE6Wm0grV -e "PURGE BINARY LOGS BEFORE '`date -v -2d +%Y-%m-%d`';"
3)影響記錄到二進制日誌知的內容網絡
binlog-do-db=db_name
若是當前的數據庫(即USE選定的數據庫)是db_name,應將更新記錄到二進制日誌中。其它全部沒有明顯指定的數據庫 被忽略。架構
binlog-ignore-db=db_name
當前的數據庫(即USE選定的數據庫)是db_name,不該將更新保存到二進制日誌中
通常狀況應該是全部數據都打開
多個庫的狀況
binlog-do-db = zabbix
binlog-do-db = cacti
4)使用binlog
能夠用mysqlbinlog實用工具檢查二進制日誌文件。若是你想要從新處理日誌止的語句,這頗有用。例如,能夠從二進制日誌更新MySQL服務器,方法以下:
shell> mysqlbinlog log-file | mysql -h server_name
三、慢日誌
long_query_time = 2
slow-query-log-file = /data/logs/mysql/3306_slow.log
查看
mysqldumpslow命令得到日誌中顯示的查詢摘要來處理慢查詢日誌。
mysqldumpslow /data/logs/mysql/3306_slow.log
四、通用查詢日誌
全部mysql操做,通常不打開,耗資源
log = /data/logs/mysql/3306.log
內容格式
131113 5:56:28 5 Query SELECT DATABASE()
5 Init DB zabbix
131113 5:56:31 5 Query create table tb_text ( id varchar(10),name varchar(25),age int,sex bit
五、innodb 在線REDO日誌
MySQL性能優化之分區:iblog、binlog、datafile
參考:http://hi.baidu.com/higkoo/item/e3140516a069c5701009b5fe
innodb_log_file_size = 512M #單個iblog文件大小 innodb_log_files_in_group = 4 #一共有幾個iblog innodb_log_group_home_dir = /ib_log #存放iblog的目錄 innodb_log_arch_dir = /usr/local/mysql/var/ 能夠忽略 innodb_flush_log_at_trx_commit = 2 #iblog刷入時機 innodb_flush_method = O_DIRECT #iblog的刷入方式
默認iblog和datafile是放在相同目錄的,這樣在寫入負載高時極易形成磁盤瓶頸。
InnoDB 啓動選項
http://man.chinaunix.net/database/mysql/inonodb_zh/2.htm
(二)數據文件
一、MyISAM
[root@master1 ~]# ll /data/mysql/mysql |grep user
-rw-rw---- 1 mysql mysql 10466 Oct 7 23:25 user.frm
-rw-rw---- 1 mysql mysql 512 Oct 7 23:34 user.MYD
-rw-rw---- 1 mysql mysql 2048 Oct 7 23:39 user.MYI
.frm 表結構定義信息
.MYD 表數據
.MYI 索引相關信息
每一個表都有這個三個文件
二、InnoDB
修改表默認的存儲引擎
default_table_type = INNODB
[root@master1 ~]# ll /data/mysql/dfs/
total 16
-rw-rw---- 1 mysql mysql 61 Nov 14 03:46 db.opt
-rw-rw---- 1 mysql mysql 8616 Nov 14 03:52 tb_dfs.frm
[root@master1 ~]# ll /data/mysql/ |grep ib
-rw-rw---- 1 mysql mysql 524288000 Nov 14 03:57 ibdata1
-rw-rw---- 1 mysql mysql 524288000 Nov 13 06:16 ibdata2
-rw-rw---- 1 mysql mysql 268435456 Nov 14 03:57 ib_logfile0
-rw-rw---- 1 mysql mysql 268435456 Oct 7 23:21 ib_logfile1
# cat /data/mysql/dfs/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
用來記錄該庫的默認字符集編碼和字符集排序規則用的。也就是說若是你建立數據庫指定默認字符集和排序規則,
那麼後續建立的表若是沒有指定字符集和排序規則,那麼該新建的表將採用db.opt文件中指定的屬性。
/data/mysql/dfs/tb_dfs.frm
表結構
數據文件ibdata或者.idb 存儲數據和索引的地方
1)共享表空間
默認未共享表空間 數據文件ibdata1
2)獨享表空間
Mysql分表
innodb_file_per_table=1
獨享表空間也有ibdata1 存放一些元數據
[root@master1 dev]# ll /mysql/dev/data12/ |grep ib
-rw-rw---- 1 mysql mysql 104857600 Nov 14 04:53 ibdata1
-rw-rw---- 1 mysql mysql 104857600 Nov 14 04:22 ibdata2
-rw-rw---- 1 mysql mysql 52428800 Nov 14 04:53 ib_logfile0
-rw-rw---- 1 mysql mysql 52428800 Nov 14 04:22 ib_logfile1
[root@master1 dev]# ll /mysql/dev/data12/zabbix/
total 112
-rw-rw---- 1 mysql mysql 65 Nov 14 04:58 db.opt
-rw-rw---- 1 mysql mysql 8614 Nov 14 05:08 tb_zabbix.frm
-rw-rw---- 1 mysql mysql 98304 Nov 14 05:09 tb_zabbix.ibd
tb_zabbix.ibd每一個表一個idb文件,存放數據和索引
(三)Replication相關文件
一、master.info
slave服務器中
[root@Server1 mysql]# cat dev/data11/master.info
18
mysql-bin.000111
197334657
192.168.204.253
dbslave
password
3311
60
0
0
1800.000
0
slave數據庫中,存放master信息
包括
master主機地址
鏈接端口
鏈接用戶
鏈接密碼
當前日誌位置
已經讀取到的日誌位置信息
二、relay-log.info
slave服務器中
# cat dev/data11/relay-log.info
./mysql-relay-bin.000043
143908
mysql-bin.000111
197334657
8
經過slave的IO線程寫入本地的relay-log.info ,以便slave端的IO線程以及某些管理操做隨時可以獲取當前複製的相關信息
三、mysql-relay-bin.index 和 mysql-relay-bin.000042
# cat dev/data11/mysql-relay-bin.index
./mysql-relay-bin.000042
./mysql-relay-線程
存放着slave端的IO線程從Master端所讀取的Binary LOG信息,而後由Slave的SQL線程從該relay log中讀取並解析相應的日誌信息,
轉換爲Master所執行的Query語句,接着在Slave端應用。
(四)其餘文件
my.cnf,pid,socket
2、系統架構SQL Layer 和Storage Engine Layer核心模塊初始化模塊核心API網絡交互模塊client & Server 交互協議模塊用戶模塊訪問控制模塊鏈接管理,鏈接線程和線程管理模塊Query解析和轉發模塊Query Cache模塊Query 優化模塊表變動管理模塊表維護模塊系統狀態管理模塊表管理器日誌記錄模塊複製模塊存儲引擎藉口模塊