程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 【夯實Mysql基礎】MySQL在Linux系統下配置文件及日志詳解,mysqllinux

【夯實Mysql基礎】MySQL在Linux系統下配置文件及日志詳解,mysqllinux

編輯:MySQL綜合教程

【夯實Mysql基礎】MySQL在Linux系統下配置文件及日志詳解,mysqllinux


本文地址

 

分享提綱:

  1. 概述

  2. 詳解配置文件

  3. 詳解日志

 

 

1.概述


 

  MySQL配置文件在Windows下叫my.ini,在MySQL的安裝根目錄下;在Linux下叫my.cnf,該文件位於/etc/my.cnf。

 

2. 詳解配置文件


 

 

basedir = path 使用給定目錄作為根目錄(安裝目錄)。 character-sets-dir = path 給出存放著字符集的目錄。 datadir = path 從給定目錄讀取數據庫文件。 pid-file = filename 為mysqld程序指定一個存放進程ID的文件(僅適用於UNIX/Linux系統); Init-V腳本需要使用這個文件裡的進程ID結束mysqld進程。 socket = filename 為MySQL客戶程序與服務器之間的本地通信指定一個套接字文件(僅適用於UNIX/Linux系統; 默認設置一般是/var/lib/mysql/mysql.sock文件)。在Windows環境下,如果MySQL客戶與服務器是通過命名管道進行通信 的,–sock選項給出的將是該命名管道的名字(默認設置是MySQL)。 lower_case_table_name = 1/0 新目錄和數據表的名字是否只允許使用小寫字母; 這個選項在Windows環境下的默認設置是1(只允許使用小寫字母)。

 

mysqld程序:語言設置

character-sets-server = name 新數據庫或數據表的默認字符集。為了與MySQL的早期版本保持兼容,這個字符集也可以用–default-character-set選項給出; 但這個選項已經顯得有點過時了。 collation-server = name 新數據庫或數據表的默認排序方式。 lanuage = name 用指定的語言顯示出錯信息。

 

mysqld程序:通信、網絡、信息安全

enable-named-pipes 允許Windows 2000/XP環境下的客戶和服務器使用命名管道(named pipe)進行通信。這個命名管道的默認名字是MySQL,但可以用–socket選項來改變。 local-infile [=0] 允許/禁止使用LOAD DATA LOCAL語句來處理本地文件。 myisam-recover [=opt1, opt2, ...] 在啟動時自動修復所有受損的MyISAM數據表。這個選項的可取值有4種:DEFAULT、BACKUP、QUICK和FORCE; 它們與myisamchk程序的同名選項作用相同。 old-passwords 使用MySQL 3.23和4.0版本中的老算法來加密mysql數據庫裡的密碼(默認使用MySQL 4.1版本開始引入的新加密算法)。 port = n 為MySQL程序指定一個TCP/IP通信端口(通常是3306端口)。 safe-user-create 只有在mysql.user數據庫表上擁有INSERT權限的用戶才能使用GRANT命令; 這是一種雙保險機制(此用戶還必須具備GRANT權限才能執行GRANT命令)。 shared-memory 允許使用內存(shared memory)進行通信(僅適用於Windows)。 shared-memory-base-name = name 給共享內存塊起一個名字(默認的名字是MySQL)。 skip-grant-tables 不使用mysql數據庫裡的信息來進行訪問控制(警告:這將允許用戶任何用戶去修改任何數據庫)。 skip-host-cache 不使用高速緩存區來存放主機名和IP地址的對應關系。 skip-name-resovle 不把IP地址解析為主機名; 與訪問控制(mysql.user數據表)有關的檢查全部通過IP地址行進。 skip-networking 只允許通過一個套接字文件(Unix/Linux系統)或通過命名管道(Windows系統)進行本地連接,不允許ICP/IP連接; 這提高了安全性,但阻斷了來自網絡的外部連接和所有的Java客戶程序(Java客戶即使在本地連接裡也使用TCP/IP)。 user = name mysqld程序在啟動後將在給定UNIX/Linux賬戶下執行; mysqld必須從root賬戶啟動才能在啟動後切換到另一個賬戶下執行; mysqld_safe腳本將默認使用–user=mysql選項來啟動mysqld程序。

 

mysqld程序:內存管理、優化、查詢緩存區

bulk_insert_buffer_size = n 為一次插入多條新記錄的INSERT命令分配的緩存區長度(默認設置是8M)。 key_buffer_size = n 用來存放索引區塊的RMA值(默認設置是8M)。 join_buffer_size = n 在參加JOIN操作的數據列沒有索引時為JOIN操作分配的緩存區長度(默認設置是128K)。 max_heap_table_size = n HEAP數據表的最大長度(默認設置是16M); 超過這個長度的HEAP數據表將被存入一個臨時文件而不是駐留在內存裡。 max_connections = n MySQL服務器同時處理的數據庫連接的最大數量(默認設置是100)。 query_cache_limit = n 允許臨時存放在查詢緩存區裡的查詢結果的最大長度(默認設置是1M)。 query_cache_size = n 查詢緩存區的最大長度(默認設置是0,不開辟查詢緩存區)。 query_cache_type = 0/1/2 查詢緩存區的工作模式:0, 禁用查詢緩存區; 1,啟用查詢緩存區(默認設置); 2,”按需分配”模式,只響應SELECT SQL_CACHE命令。 read_buffer_size = n 為從數據表順序讀取數據的讀操作保留的緩存區的長度(默認設置是128KB); 這個選項的設置值在必要時可以用SQL命令SET SESSION read_buffer_size = n命令加以改變。 read_rnd_buffer_size = n 類似於read_buffer_size選項,但針對的是按某種特定順序(比如使用了ORDER BY子句的查詢)輸出的查詢結果(默認設置是256K)。 sore_buffer = n 為排序操作分配的緩存區的長度(默認設置是2M); 如果這個緩存區太小,則必須創建一個臨時文件來進行排序。 table_cache = n 同時打開的數據表的數量(默認設置是64)。 tmp_table_size = n 臨時HEAP數據表的最大長度(默認設置是32M); 超過這個長度的臨時數據表將被轉換為MyISAM數據表並存入一個臨時文件。

 

mysqld程序:日志

log [= file] 把所有的連接以及所有的SQL命令記入日志(通用查詢日志); 如果沒有給出file參數,MySQL將在數據庫目錄裡創建一個hostname.log文件作為這種日志文件(hostname是服務器的主機名)。 log-slow-queries [= file] 把執行用時超過long_query_time變量值的查詢命令記入日志(慢查詢日志); 如果沒有給出file參數,MySQL將在數據庫目錄裡創建一個hostname-slow.log文件作為這種日志文件(hostname是服務器主機 名)。 long_query_time = n 慢查詢的執行用時上限(默認設置是10s)。 long_queries_not_using_indexs 把慢查詢以及執行時沒有使用索引的查詢命令全都記入日志(其余同–log-slow-queries選項)。 log-bin [= filename] 把對數據進行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二進制格式記入日志(二進制變更日志,binary update log)。這種日志的文件名是filename.n或默認的hostname.n,其中n是一個6位數字的整數(日志文件按順序編號)。 log-bin-index = filename 二進制日志功能的索引文件名。在默認情況下,這個索引文件與二進制日志文件的名字相同,但後綴名是.index而不是.nnnnnn。 max_binlog_size = n 二進制日志文件的最大長度(默認設置是1GB)。在前一個二進制日志文件裡的信息量超過這個最大長度之前,MySQL服務器會自動提供一個新的二進制日志文件接續上。 binlog-do-db = dbname 只把給定數 據庫裡的變化情況記入二進制日志文件,其他數據庫裡的變化情況不記載。如果需要記載多個數據庫裡的變化情況,就必須在配置文件使用多個本選項來設置,每個數據庫一行。 binlog-ignore-db = dbname 不把給定數據庫裡的變化情況記入二進制日志文件。 sync_binlog = n 每經過n次日志寫操作就把日志文件寫入硬盤一次(對日志信息進行一次同步)。n=1是最安全的做法,但效率最低。默認設置是n=0,意思是由操作系統來負責二進制日志文件的同步工作。 log-update [= file] 記載出錯情況的日志文件名(出錯日志)。這種日志功能無法禁用。如果沒有給出file參數,MySQL會使用hostname.err作為種日志文件的名字。

 

mysqld程序:鏡像(主控鏡像服務器)

server-id = n 給服務器分配一個獨一無二的ID編號; n的取值范圍是1~2的32次方啟用二進制日志功能。 log-bin = name 啟用二進制日志功能。這種日志的文件名是filename.n或默認的hostname.n,其中的n是一個6位數字的整數(日志文件順序編號)。 binlog-do/ignore-db = dbname 只把給定數據庫裡的變化情況記入二進制日志文件/不把給定的數據庫裡的變化記入二進制日志文件。

 

mysqld程序:鏡像(從屬鏡像服務器)

server-id = n 給服務器分配一個唯一的ID編號 log-slave-updates 啟用從屬服務器上的日志功能,使這台計算機可以用來構成一個鏡像鏈(A->B->C)。 master-host = hostname 主控服務器的主機名或IP地址。如果從屬服務器上存在mater.info文件(鏡像關系定義文件),它將忽略此選項。 master-user = replicusername 從屬服務器用來連接主控服務器的用戶名。如果從屬服務器上存在mater.info文件,它將忽略此選項。 master-password = passwd 從屬服務器用來連接主控服務器的密碼。如果從屬服務器上存在mater.info文件,它將忽略此選項。 master-port = n 從屬服務器用來連接主控服務器的TCP/IP端口(默認設置是3306端口)。 master-connect-retry = n 如果與主控服務器的連接沒有成功,則等待n秒(s)後再進行管理方式(默認設置是60s)。如果從屬服務器存在mater.info文件,它將忽略此選項。 master-ssl-xxx = xxx 對主、從服務器之間的SSL通信進行配置。 read-only = 0/1 0: 允許從屬服務器獨立地執行SQL命令(默認設置); 1: 從屬服務器只能執行來自主控服務器的SQL命令。 read-log-purge = 0/1 1: 把處理完的SQL命令立刻從中繼日志文件裡刪除(默認設置); 0: 不把處理完的SQL命令立刻從中繼日志文件裡刪除。 replicate-do-table = dbname.tablename 與–replicate-do-table選項的含義和用法相同,但數據庫和數據庫表名字裡允許出現通配符”%” (例如: test%.%–對名字以”test”開頭的所有數據庫裡的所以數據庫表進行鏡像處理)。

 

replicate-do-db = name 只對這個數據庫進行鏡像處理。 replicate-ignore-table = dbname.tablename 不對這個數據表進行鏡像處理。 replicate-wild-ignore-table = dbn.tablen 不對這些數據表進行鏡像處理。 replicate-ignore-db = dbname 不對這個數據庫進行鏡像處理。 replicate-rewrite-db = db1name > db2name 把主控數據庫上的db1name數據庫鏡像處理為從屬服務器上的db2name數據庫。 report-host = hostname 從屬服務器的主機名; 這項信息只與SHOW SLAVE HOSTS命令有關–主控服務器可以用這條命令生成一份從屬服務器的名單。 slave-compressed-protocol = 1 主、從服務器使用壓縮格式進行通信–如果它們都支持這麼做的話。 slave-skip-errors = n1, n2, …或all 即使發生出錯代碼為n1、n2等的錯誤,鏡像處理工作也繼續進行(即不管發生什麼錯誤,鏡像處理工作也繼續進行)。如果配置得當,從屬服務器不應該在執行 SQL命令時發生錯誤(在主控服務器上執行出錯的SQL命令不會被發送到從屬服務器上做鏡像處理); 如果不使用slave-skip-errors選項,從屬服務器上的鏡像工作就可能因為發生錯誤而中斷,中斷後需要有人工參與才能繼續進行。

 

mysqld–InnoDB:基本設置、表空間文件

skip-innodb 不加載InnoDB數據表驅動程序–如果用不著InnoDB數據表,可以用這個選項節省一些內存。 innodb-file-per-table 為每一個新數據表創建一個表空間文件而不是把數據表都集中保存在中央表空間裡(後者是默認設置)。該選項始見於MySQL 4.1。 innodb-open-file = n InnoDB數據表驅動程序最多可以同時打開的文件數(默認設置是300)。如果使用了innodb-file-per-table選項並且需要同時打開很多數據表的話,這個數字很可能需要加大。 innodb_data_home_dir = p InnoDB主目錄,所有與InnoDB數據表有關的目錄或文件路徑都相對於這個路徑。在默認的情況下,這個主目錄就是MySQL的數據目錄。 innodb_data_file_path = ts 用來容納InnoDB為數據表的表空間: 可能涉及一個以上的文件; 每一個表空間文件的最大長度都必須以字節(B)、兆字節(MB)或千兆字節(GB)為單位給出; 表空間文件的名字必須以分號隔開; 最後一個表空間文件還可以帶一個autoextend屬性和一個最大長度(max:n)。例如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空間文件ibdata1的最大長度是1GB,ibdata2的最大長度也是1G,但允許它擴充到2GB。除文件名外,還可以用硬盤分區的設置名來定義表 空間,此時必須給表空間的最大初始長度值加上newraw關鍵字做後綴,給表空間的最大擴充長度值加上raw關鍵字做後綴(例如/dev/hdb1: 20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默認設置是ibdata1:10M:autoextend。 innodb_autoextend_increment = n 帶有autoextend屬性的表空間文件每次加大多少兆字節(默認設置是8MB)。這個屬性不涉及具體的數據表文件,那些文件的增大速度相對是比較小的。 innodb_lock_wait_timeout = n 如果某個事務在等待n秒(s)後還沒有獲得所需要的資源,就使用ROLLBACK命令放棄這個事務。這項設置對於發現和處理未能被InnoDB數據表驅動 程序識別出來的死鎖條件有著重要的意義。這個選項的默認設置是50s。 innodb_fast_shutdown 0/1 是否以最快的速度關閉InnoDB,默認設置是1,意思是不把緩存在INSERT緩存區的數據寫入數據表,那些數據將在MySQL服務器下次啟動時再寫入 (這麼做沒有什麼風險,因為INSERT緩存區是表空間的一個組成部分,數據不會丟失)。把這個選項設置為0反面危險,因為在計算機關閉時,InnoDB 驅動程序很可能沒有足夠的時間完成它的數據同步工作,操作系統也許會在它完成數據同步工作之前強行結束InnoDB,而這會導致數據不完整。

 

mysqld程序:InnoDB–日志

innodb_log_group_home_dir = p 用來存放InnoDB日志文件的目錄路徑(如ib_logfile0、ib_logfile1等)。在默認的情況下,InnoDB驅動程序將使用 MySQL數據目錄作為自己保存日志文件的位置。 innodb_log_files_in_group = n 使用多少個日志文件(默認設置是2)。InnoDB數據表驅動程序將以輪轉方式依次填寫這些文件; 當所有的日志文件都寫滿以後,之後的日志信息將寫入第一個日志文件的最大長度(默認設置是5MB)。這個長度必須以MB(兆字節)或GB(千兆字節)為單 位進行設置。 innodb_flush_log_at_trx_commit = 0/1/2 這個選項決定著什麼時候把日志信息寫入日志文件以及什麼時候把這些文件物理地寫(術語稱為”同步”)到硬盤上。設置值0的意思是每隔一秒寫一次日志並進行 同步,這可以減少硬盤寫操作次數,但可能造成數據丟失; 設置值1(設置設置)的意思是在每執行完一條COMMIT命令就寫一次日志並進行同步,這可以防止數據丟失,但硬盤寫操作可能會很頻繁; 設置值2是一般折衷的辦法,即每執行完一條COMMIT命令寫一次日志,每隔一秒進行一次同步。 innodb_flush_method = x InnoDB日志文件的同步辦法(僅適用於UNIX/Linux系統)。這個選項的可取值有兩種: fdatasync,用fsync()函數進行同步; O_DSYNC,用O_SYNC()函數進行同步。 innodb_log_archive = 1 啟用InnoDB驅動程序的archive(檔案)日志功能,把日志信息寫入ib_arch_log_n文件。啟用這種日志功能在InnoDB與 MySQL一起使用時沒有多大意義(啟用MySQL服務器的二進制日志功能就足夠用了)。

 

mysqld程序–InnoDB:緩存區的設置和優化

innodb_log_buffer_pool_size = n 為InnoDB數據表及其索引而保留的RAM內存量(默認設置是8MB)。這個參數對速度有著相當大的影響,如果計算機上只運行有 MySQL/InnoDB數據庫服務器,就應該把全部內存的80%用於這個用途。

 

innodb_log_buffer_size = n 事務日志文件寫操作緩存區的最大長度(默認設置是1MB)。 innodb_additional_men_pool_size = n 為用於內部管理的各種數據結構分配的緩存區最大長度(默認設置是1MB)。 innodb_file_io_threads = n I/O操作(硬盤寫操作)的最大線程個數(默認設置是4)。 innodb_thread_concurrency = n InnoDB驅動程序能夠同時使用的最大線程個數(默認設置是8)。

 

mysqld程序:其它選項

bind-address = ipaddr MySQL服務器的IP地址。如果MySQL服務器所在的計算機有多個IP地址,這個選項將非常重要。 default-storage-engine = type 新數據表的默認數據表類型(默認設置是MyISAM)。這項設置還可以通過–default-table-type選項來設置。 default-timezone = name 為MySQL服務器設置一個地理時區(如果它與本地計算機的地理時區不一樣)。 ft_min_word_len = n 全文索引的最小單詞長度工。這個選項的默認設置是4,意思是在創建全文索引時不考慮那些由3個或更少的字符構建單詞。 Max-allowed-packet = n 客戶與服務器之間交換的數據包的最大長度,這個數字至少應該大於客戶程序將要處理的最大BLOB塊的長度。這個選項的默認設置是1MB。 Sql-mode = model1, mode2, … MySQL將運行在哪一種SQL模式下。這個選項的作用是讓MySQL與其他的數據庫系統保持最大程度的兼容。這個選項的可取值包括ansi、db2、 oracle、no_zero_date、pipes_as_concat。

 

注意:如果在配置文件裡給出的某個選項是mysqld無法識別的,MySQL服務器將不啟動。

 

 3. 詳解日志


 

MySQL日志:主要包含:錯誤日志、查詢日志、慢查詢日志、事務日志、二進制日志;日志是mysql數據庫的重要組成部分。日志文件中記錄著mysql數據庫運行期間發生的變化;也就是說用來記錄mysql數據庫的客戶端連接狀況、SQL語句的執行情況和錯誤信息等。當數據庫遭到意外的損壞時,可以通過日志查看文件出錯的原因,並且可以通過日志文件進行數據恢復。

 

錯誤日志
在mysql數據庫中,錯誤日志功能是默認開啟的。並且,錯誤日志無法被禁止。默認情況下,錯誤日志存儲在mysql數據庫的數據文件中。錯誤日志文件通常的名稱為hostname.err。其中,hostname表示服務器主機名。 錯誤日志信息可以自己進行配置的,錯誤日志所記錄的信息是可以通過log-error和log-warnings來定義的,其中log-err是定義是否啟用錯誤日志的功能和錯誤日志的存儲位置,log-warnings是定義是否將警告信息也定義至錯誤日志中。默認情況下錯誤日志大概記錄以下幾個方面的信息:服務器啟動和關閉過程中的信息(未必是錯誤信息,如mysql如何啟動InnoDB的表空間文件的、如何初始化自己的存儲引擎的等等)、服務器運行過程中的錯誤信息、事件調度器運行一個事件時產生的信息、在從服務器上啟動服務器進程時產生的信息。 下面我們來定義mysql錯誤日志的功能:

 

一般而言,日志級別的定義沒有回話變量都只是在全局級別下進行定義。

 

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 mysql> SHOW  GLOBAL VARIABLES LIKE '%log%'; +-----------------------------------------+-----------------------------------+ |  Variable_name                            | Value                              | +-----------------------------------------+-----------------------------------+ | back_log                                | 50                                | |  binlog_cache_size                        | 32768                              | |  binlog_direct_non_transactional_updates | OFF                               | |  binlog_format                           | MIXED                             | |  binlog_stmt_cache_size                   | 32768                              | |  expire_logs_days                         | 0                                  | | general_log                             | OFF                               | |  general_log_file                         | /mydata/data/stu18.log             | |  innodb_flush_log_at_trx_commit           | 1                                  | |  innodb_locks_unsafe_for_binlog           | OFF                               | |  innodb_log_buffer_size                   | 8388608                            | |  innodb_log_file_size                     | 5242880                            | |  innodb_log_files_in_group                | 2                                  | |  innodb_log_group_home_dir                | ./                                 | |  innodb_mirrored_log_groups               | 1                                  | | log                                     |  OFF                               | | log_bin                                 | ON                                | |  log_bin_trust_function_creators          | OFF                                | | log_error                               |  /mydata/data/stu18.magedu.com.err |定義錯誤日志 | log_output                              | FILE                              | |  log_queries_not_using_indexes            | OFF                                | |  log_slave_updates                        | OFF                                | |  log_slow_queries                        | OFF                               | |  log_warnings                             | 1               是否把警告信息寫入錯誤日志中 |  max_binlog_cache_size                    | 18446744073709547520               | |  max_binlog_size                          | 1073741824                         | |  max_binlog_stmt_cache_size               | 18446744073709547520               | |  max_relay_log_size                       | 0                                  | | relay_log                               |                                   | |  relay_log_index                          |                                    | |  relay_log_info_file                      | relay-log.info                     | |  relay_log_purge                          | ON                                 | |  relay_log_recovery                       | OFF                                | |  relay_log_space_limit                    | 0                                  | |  slow_query_log                           | OFF                                | | slow_query_log_file                     |  /mydata/data/stu18-slow.log       | | sql_log_bin                             | ON                                | | sql_log_off                             | OFF                               | | sync_binlog                             | 0                                 | |  sync_relay_log                           | 0                                  | |  sync_relay_log_info                      | 0                                  | +-----------------------------------------+-----------------------------------+

 

其中,log_error可以直接定義為文件路徑,也可以為ON|OFF;log_warings只能使用1|0來定義開關啟動。

 

更改錯誤日志位置可以使用log_error來設置形式如下:

 

1 2 3 [root@stu18 data]#  vim /etc/my.cnf [mysqld] Log_error=DIR/[filename]

 

解析:其中,DIR參數指定錯誤日志的路徑filename參數是錯誤日志的名稱,沒有指定該參數時默認為主機名。重啟mysql服務器即可生效。

 

查看mysql錯誤日志:   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@stu18 data]#  tail -20 stu18.magedu.com.err 130813  15:30:50  InnoDB: Starting shutdown... 130813  15:30:51  InnoDB: Shutdown completed;  log sequence number 1630920 130813 15:30:51  [Note] /usr/local/mysql/bin/mysqld: Shutdown complete 130813 15:30:52  mysqld_safe mysqld from pid file /mydata/data/stu18.magedu.com.pid ended 130813 15:30:53  mysqld_safe Starting mysqld daemon with databases from /mydata/data 130813 15:30:54  InnoDB: The InnoDB memory heap is disabled     #禁用了InnoDB memory的堆功能。 130813 15:30:54  InnoDB: Mutexes and rw_locks use GCC atomic builtins #Mutexes(互斥量)和rw_locks(行級鎖)是GCC編譯的是InnoDB內置的。 130813 15:30:54  InnoDB: Compressed tables use zlib 1.2.3     #默認壓縮工具是zlib 130813 15:30:55  InnoDB: Initializing buffer pool, size = 128.0M    #InnoDB引擎的緩沖池(buffer pool)的值大小 130813 15:30:55  InnoDB: Completed initialization of buffer pool 130813 15:30:55  InnoDB: highest supported file format is Barracuda. 130813  15:30:57  InnoDB: Waiting for the  background threads to start 130813 15:30:58  InnoDB: 5.5.33 started; log sequence number 1630920 130813 15:30:58  [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306 130813 15:30:58  [Note]   - '0.0.0.0' resolves to  '0.0.0.0';  #0.0.0.0會反解主機名,這裡反解失敗 130813 15:30:58  [Note] Server socket created on IP: '0.0.0.0'. 130813 15:30:58  [Note] Event Scheduler: Loaded 0 events    #事件調度器沒有任何事件,因為沒有裝載。 130813 15:30:58  [Note] /usr/local/mysql/bin/mysqld: ready for connections. #mysql啟動完成等待客戶端的請求。 Version:  '5.5.33-log'  socket:  '/tmp/mysql.sock'  port: 3306  Source distribution  #創建一個本地sock用於本地連接。

 

刪除錯誤日志:

 

在mysql5.5.7之前:數據庫管理員可以刪除很長時間之前的錯誤日志,以保證mysql服務器上的硬盤空間。mysql數據庫中,可以使用mysqladmin命令開啟新的錯誤日志。mysqladmin命令的語法如下:mysqladmin –u root –pflush-logs也可以使用登錄mysql數據庫中使用FLUSHLOGS語句來開啟新的錯誤日志。

 

在mysql5.5.7之後:服務器將關閉此項功能。只能使用重命名原來的錯誤日志文件,手動沖洗日志創建一個新的:方式如下:

 

1 2 3 4 [root@stu18 data]# mv stu18.magedu.com.err  stu18.magedu.com.err.old  [root@stu18 data]#  mysqladmin flush-logs [root@stu18 data]# ls hellodb  myclass  mysql-bin.000003  mysql-bin.index           stu18.magedu.com.pid     ibdata1      mysql     mysql-bin.000004  performance_schema    ib_logfile0  mysql-bin.000001  stu18.magedu.com.err           test   ib_logfile1  mysql-bin.000002  stu18.magedu.com.err.old

 

更多信息請查閱官方文檔:http://dev.mysql.com/doc/refman/5.5/en/error-log.html

 

查詢日志:

 

默認情況下查詢日志是關閉的。由於查詢日志會記錄用戶的所有操作,其中還包含增刪查改等信息,在並發操作大的環境下會產生大量的信息從而導致不必要的磁盤IO,會影響mysql的性能的。如若不是為了調試數據庫的目的建議不要開啟查詢日志。

 

查看查詢日志是否開啟: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 mysql> SHOW  GLOBAL VARIABLES LIKE '%log%'; +-----------------------------------------+-----------------------------------+ |  Variable_name                            | Value                              | +-----------------------------------------+-----------------------------------+ | back_log                                | 50                                | |  binlog_cache_size                        | 32768                              | |  binlog_direct_non_transactional_updates | OFF                               | |  binlog_format                           | MIXED                             | |  binlog_stmt_cache_size                   | 32768                              | |  expire_logs_days                         | 0                                  | | general_log                             | OFF        #定義查詢日志是否開啟  |                    |  general_log_file                         | /mydata/data/stu18.log   #定義查詢日志的文件地址名稱                          | |  innodb_flush_log_at_trx_commit           | 1                                  | |  innodb_locks_unsafe_for_binlog           | OFF                                | |  innodb_log_buffer_size                   | 8388608                            | |  innodb_log_file_size                     | 5242880                            | |  innodb_log_files_in_group               | 2                                 | |  innodb_log_group_home_dir                | ./                                 | |  innodb_mirrored_log_groups               | 1                                  | | log                                     |  OFF          #是否開啟日志  (若開啟則表示開啟所有的日志功能)                 | | log_bin                                 | ON                                | |  log_bin_trust_function_creators          | OFF                                | | log_error                               | /mydata/data/stu18.magedu.com.err  | | log_output                              | FILE   #日志的輸出的位置          |        |  log_queries_not_using_indexes            | OFF                                | |  log_slave_updates                        | OFF                               | |  log_slow_queries                         | OFF                                | |  log_warnings                             | 1                                  | |  max_binlog_cache_size                    | 18446744073709547520               | |  max_binlog_size                          | 1073741824                         | |  max_binlog_stmt_cache_size               | 18446744073709547520               | |  max_relay_log_size                       | 0                                  | | relay_log                               |                                   | |  relay_log_index                          |                                    | |  relay_log_info_file                      | relay-log.info                     | |  relay_log_purge                         | ON                                | |  relay_log_recovery                       | OFF                                | |  relay_log_space_limit                    | 0                                  | |  slow_query_log                           | OFF                                | |  slow_query_log_file                      | /mydata/data/stu18-slow.log        | | sql_log_bin                             | ON                                | | sql_log_off                             | OFF                               | | sync_binlog                             | 0                                 | |  sync_relay_log                           | 0                                  | |  sync_relay_log_info                      | 0                                  | +-----------------------------------------+-----------------------------------+ 41 rows in set  (0.00 sec)

 

拓展解析:日志的輸出位置一般有三種方式:file(文件),table(表),none(不保存);其中前兩個輸出位置可以同時定義,none表示是開啟日志功能但是記錄日志信息。file就是通過general_log_file |/mydata/data/stu18.log 等方式定義的,而輸出位置定義為表時查看日志的內容方式為:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mysql> use  mysql;                    #在此數據庫中 Database changed mysql> show  tables; +---------------------------+ |  Tables_in_mysql           | +---------------------------+ |  columns_priv              | | db                        | | event                     | | func                      | | general_log               |      #這個就是查詢日志的表輸出位置 |  help_category             | |  help_keyword              | |  help_relation             | | help_topic ………………                | +---------------------------+

 

慢查詢日志:

 

慢查詢日志是用來記錄執行時間超過指定時間的查詢語句。通過慢查詢日志,可以查找出哪些查詢語句的執行效率很低,以便進行優化。一般建議開啟,它對服務器性能的影響微乎其微,但是可以記錄mysql服務器上執行了很長時間的查詢語句。可以幫助我們定位性能問題的。

 

查看慢查詢日志的定義:

 

1 2 3 mysql> SHOW  GLOBAL VARIABLES LIKE '%log%'; |  slow_query_log         | OFF    #定義慢查詢日志的 |  slow_query_log_file    |/mydata/data/stu18-slow.log    #輸出方式為file(文件)時定義慢查詢日志的位置

 

啟動和設置慢查詢日志:

 

1、通過配置文件my.cnf中的log-slow-queries選項可以開啟慢查詢日志;形式如下:

 

1 2 3 4 [root@stu18 data]#  vim /etc/my.cnf [mysqld] slow_query_log=1 log-slow-queries [=  DIR/[filename] ]

 

其中,DIR參數指定慢查詢日志的存儲路徑;filename參數指定日志的文件名,生成日志文件的完成名稱為filename-slow.log。如果不指定存儲路徑,慢查詢日志默認存儲到mysql數據庫的數據文件下,如果不指定文件名,默認文件名為hostname-slow.log。

 

2、通過登錄mysql服務器直接定義,方式如下:

 

首先要有全局權限;然後執行mysql>set global slow_query_log=1;

 

時間默認超過多少的稱為慢查詢日志?

 

一般都是通過long_query_time選項來設置這個時間值,時間以秒為單位,可以精確到微秒。如果查詢時間超過了這個時間值(默認為10秒),這個查詢語句將被記錄到慢查詢日志中。查看服務器默認時間值方式如下:

 

1 2 3 4 5 6 7 mysql> SHOW  GLOBAL VARIABLES LIKE 'long%'; +-----------------+-----------+ |  Variable_name   | Value     | +-----------------+-----------+ | long_query_time  | 10.000000 | +-----------------+-----------+ 1 row in set (0.04  sec)

 

注釋:其中這個慢查詢時間並不是只表示語句自身執行超過10秒還包含由於其他資源被征用造成阻塞的查詢執行時間或其他原因等都被記錄到慢查詢中。所以這個慢查的時長表示從查詢開始到查詢結束中間包含可能的任何原因所經歷的所有時間。

 

測試是否可以記錄日志:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 mysql> set globalslow_query_log=1;       #開啟慢查詢日志 Query OK, 0 rowsaffected (0.35 sec) mysql> setsession long_query_time=0.001;     #更改時間(當前session中,退出則重置) Query OK, 0 rowsaffected (0.00 sec) mysql> set globallong_query_time=0.001;      #更改時間(全局中,重啟服務則重置) mysql> SHOWVARIABLES LIKE 'long%';          #查詢定義時間 +-----------------+----------+ | Variable_name   | Value   | +-----------------+----------+ | long_query_time |0.001000 | +-----------------+----------+ 1 row in set (0.00sec) mysql> showglobal variables like "%slow%";  #查看慢查詢日志開啟狀態 +---------------------+-----------------------------+ | Variable_name       | Value                       | +---------------------+-----------------------------+ |log_slow_queries    | ON                          | |slow_launch_time    | 2                           | |slow_query_log      | ON                          | |slow_query_log_file | /mydata/data/stu18-slow.log | +---------------------+-----------------------------+ 4 rows in set (0.03sec)

 

查看慢查詢日志: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 mysql> use mysql mysql> selectuser,host,password from user where user="root"; +------+------------------+----------+ | user | host             | password | +------+------------------+----------+ | root |localhost        |          | | root |stu18.magedu.com |          | | root |127.0.0.1        |          | | root | ::1              |          | +------+------------------+----------+ 4 rows in set (0.08sec)       #查詢時間為0.08 mysql> systemmore /mydata/data/stu18_slow.log          #查詢慢查詢日志記錄信息 /usr/local/mysql/bin/mysqld,Version: 5.5.33-log (Source distribution). started with: Tcp port: 3306  Unix socket: /tmp/mysql.sock Time                 Id Command    Argument >>>>>>>>>>>>>>>>部分已省略>>>>>>>>>>>>>> # Time: 13100723:46:33 # User@Host:root[root] @ localhost [] # Query_time:0.108459  Lock_time: 0.000216 Rows_sent:4  Rows_examined: 6 SETtimestamp=1381160793; selectuser,host,password from user where user="root";

 

事務日志:

 

事務日志(InnoDB特有的日志)可以幫助提高事務的效率。使用事務日志,存儲引擎在修改表的數據時只需要修改其內存拷貝,再把改修改行為記錄到持久在硬盤上的事務日志中,而不用每次都將修改的數據本身持久到磁盤。事務日志采用追加的方式,因此寫日志的操作是磁盤上一小塊區域內的順序I/O,而不像隨機I/O需要在磁盤的多個地方移動磁頭,所以采用事務日志的方式相對來說要快得多。事務日志持久以後,內存中被修改的數據在後台可以慢慢的刷回到磁盤。目前大多數的存儲引擎都是這樣實現的,我們通常稱之為預寫式日志,修改數據需要寫兩次磁盤。

 

如果數據的修改已經記錄到事務日志並持久化,但數據本身還沒有寫回磁盤,此時系統崩潰,存儲引擎在重啟時能夠自動恢復這部分修改的數據。具有的恢復方式則視存儲引擎而定。

 

查看事務日志的定義:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 mysql> SHOWGLOBAL VARIABLES LIKE '%log%'; +-----------------------------------------+-----------------------------------+ | Variable_name                           | Value                             | +-----------------------------------------+-----------------------------------+ | innodb_flush_log_at_trx_commit          | 1        #在事務提交時innodb是否同步日志從緩沖到文件中1表示事務以提交就同步不提交每隔一秒同步一次,性能會很差造成大量的磁盤I/O;定義為2表示只有在事務提交時才會同步但是可能會丟失整個事務      | |innodb_locks_unsafe_for_binlog          |OFF                               | | innodb_log_buffer_size                  | 8388608                           | |innodb_log_file_size                    |5242880                           | | innodb_log_files_in_group               | 2      #至少有兩個                | |innodb_log_group_home_dir               |./      #定義innodb事務日志組的位置       | |innodb_mirrored_log_groups              |1    #表示對日志組做鏡像          | 每個事務日志都是大小為5兆的文件: [root@stu18 data]#ls -lh -rw-rw---- 1 mysqlmysql 5.0M Oct  7 23:36 ib_logfile0 -rw-rw---- 1 mysqlmysql 5.0M Aug 12 01:06 ib_logfile1

 

二進制日志:

 

二進制日志也叫作變更日志,主要用於記錄修改數據或有可能引起數據改變的mysql語句,並且記錄了語句發生時間、執行時長、操作的數據等等。所以說通過二進制日志可以查詢mysql數據庫中進行了哪些變化。一般大小體積上限為1G。

 

二進制開啟狀態:

 

1 2 3 4 5 6 7 8 mysql> showglobal variables like "%log_bin%"; +---------------------------------+-------+ | Variable_name                   | Value | +---------------------------------+-------+ | log_bin                         | ON    |  #已開啟 |log_bin_trust_function_creators | OFF   | | sql_log_bin                     | ON    | +---------------------------------+-------+

 

二進制日志相關的參數:

 

1 2 3 4 5 6 7 8 9 10 mysql> showglobal variables like "%log%"; sql_log_bin ={ON|OFF}     #用於控制會話級別二進制日志功能的開啟或關閉。默認為ON,表示啟用記錄功能。用戶可以在會話級別修改此變量的值,但其必須具有SUPER權限。 binlog_cache_size =32768   #默認值32768 Binlog Cache用於在打開了二進制日志(binlog)記錄功能的環境,是MySQL 用來提高binlog的記錄效率而設計的一個用於短時間內臨時緩存binlog數據的內存區域。一般來說,如果我們的數據庫中沒有什麼大事務,寫入也不是特別頻繁,2MB~4MB是一個合適的選擇。但是如果我們的數據庫大事務較多,寫入量比較大,可與適當調高binlog_cache_size。同時,我們可以通過binlog_cache_use 以及 binlog_cache_disk_use來分析設置的binlog_cache_size是否足夠,是否有大量的binlog_cache由於內存大小不夠而使用臨時文件(binlog_cache_disk_use)來緩存了。 binlog_stmt_cache_size= 32768       #當非事務語句使用二進制日志緩存,但是超出binlog_stmt_cache_size時,使用一個臨時文件來存放這些語句。 log_bin = mysql-bin#指定binlog的位置,默認在數據目錄下。 binlog-format= {ROW|STATEMENT|MIXED}     #指定二進制日志的類型,默認為MIXED。如果設定了二進制日志的格式,卻沒有啟用二進制日志,則MySQL啟動時會產生警告日志信息並記錄於錯誤日志中。 sync_binlog = 10#設定多久同步一次二進制日志至磁盤文件中,0表示不同步,任何正數值都表示對二進制每多少次寫操作之後同步一次。當autocommit的值為1時,每條語句的執行都會引起二進制日志同步,否則,每個事務的提交會引起二進制日志同步 max_binlog_cache_size= {4096 .. 18446744073709547520}      #二進定日志緩存空間大小,5.5.9及以後的版本僅應用於事務緩存,其上限由max_binlog_stmt_cache_size決定。 max_binlog_stmt_cache_size= {4096 .. 18446744073709547520}    #二進定日志緩存空間大小,5.5.9及以後的版本僅應用於事務緩存 expire_log_days ={0..99}    #設定二進制日志的過期天數,超出此天數的二進制日志文件將被自動刪除。默認為0,表示不啟用過期自動刪除功能。如果啟用此功能,自動刪除工作通常發生在MySQL啟動時或FLUSH日志時。

 

二進制日志定義方式:

 

其一、log_bin可以直接定義為文件路徑,也可以為ON|OFF。

 

其二、通過編輯my.cnf中的log-bin選項可以開啟二進制日志;形式如下:

 

1 2 3 [root@stu18 ~]#my.cnf [mysqld] log-bin [=DIR \ [filename]]

 

其中,DIR參數指定二進制文件的存儲路徑;filename參數指定二級制文件的文件名,其形式為filename.number,number的形式為000001、000002等。每次重啟mysql服務或運行mysql> flush logs;都會生成一個新的二進制日志文件,這些日志文件的number會不斷地遞增。除了生成上述的文件外還會生成一個名為filename.index的文件。這個文件中存儲所有二進制日志文件的清單又稱為二進制文件的索引。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [root@stu18 ~]# cd /mydata/data/ [root@stu18 data]#ls -lh -rw-rw---- 1 mysqlmysql  14K Aug 13 15:30 mysql-bin.000001 -rw-rw---- 1 mysqlmysql  150 Aug 13 17:05 mysql-bin.000002 -rw-rw---- 1 mysqlmysql  150 Aug 13 17:06 mysql-bin.000003 -rw-rw---- 1 mysqlmysql  150 Aug 13 17:07 mysql-bin.000004 -rw-rw---- 1 mysqlmysql  150 Aug 13 17:39 mysql-bin.000005 -rw-rw---- 1 mysqlmysql  126 Aug 13 19:03 mysql-bin.000006 -rw-rw---- 1 mysqlmysql  126 Aug 13 19:03 mysql-bin.000007 -rw-rw---- 1 mysqlmysql  126 Aug 13 19:05 mysql-bin.000008 -rw-rw---- 1 mysqlmysql  107 Aug 13 19:05 mysql-bin.000009 -rw-rw---- 1 mysqlmysql  353 Oct  7 23:40 mysql-bin.000010 -rw-rw---- 1 mysqlmysql  190 Oct  7 20:43 mysql-bin.index [root@stu18 data]#cat mysql-bin.index ./mysql-bin.000001 ./mysql-bin.000002 ./mysql-bin.000003 ./mysql-bin.000004 ./mysql-bin.000005 ./mysql-bin.000006 ./mysql-bin.000007 ./mysql-bin.000008 ./mysql-bin.000009 ./mysql-bin.000010

 

如果說我們向某個表的某個字段插入一個數據而這個數據為當前時間(日期時間型);過段時間將此二進制文件應用到另一台服務器上數據就會變動從而導致數據的不一致性所以說對於這種非確定性的數據使用默認的語句定義並不是可靠的;

 

二進制日志中常用的定義格式:

 

1、語句(statement):默認的記錄格式;

 

2、行(row):定義的並非數據本身而是這一行的數據是什麼;

 

3、混合模式(mixed):交替使用行和語句、由mysql服務器自行判斷。

 

其中基於行的定義格式數據量會大一些但是可以保證數據的精確性。

 

查看二進制日志:

 

二進制日志的定義方式為二進制格式;使用此格式可以存儲更多的信息,並且可以使寫入二進制日志的效率更高。但是不能直接使用查看命令打開並查看二進制日志。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 mysql> showbinary logs;     #顯示當前服務器使用的二進制文件及大小 +------------------+-----------+ | Log_name         | File_size | +------------------+-----------+ | mysql-bin.000001|     13814 | | mysql-bin.000002|       150 | | mysql-bin.000003|       150 | | mysql-bin.000004|       150 | | mysql-bin.000005|       150 | | mysql-bin.000006|       126 | | mysql-bin.000007|       126 | | mysql-bin.000008|       126 | | mysql-bin.000009|       107 | | mysql-bin.000010|       353 | +------------------+-----------+ 10 rows in set (0.07sec) mysql> showmaster logs;      #顯示主服務器使用的二進制文件及大小 +------------------+-----------+ | Log_name         | File_size | +------------------+-----------+ | mysql-bin.000001|     13814 | | mysql-bin.000002|       150 | | mysql-bin.000003|       150 | | mysql-bin.000004|       150 | | mysql-bin.000005|       150 | | mysql-bin.000006|       126 | | mysql-bin.000007|       126 | | mysql-bin.000008|       126 | | mysql-bin.000009|       107 | | mysql-bin.000010|       353 | +------------------+-----------+ 10 rows in set (0.02sec) mysql> showmaster status;   #當前使用的二進制文件及所處位置 +------------------+----------+--------------+------------------+ | File             | Position | Binlog_Do_DB |Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000010|      353 |              |                  | +------------------+----------+--------------+------------------+ 1 row in set (0.00sec)

 

小擴展:二進制日志的記錄位置:通常為上一個事件執行結束時間的位置,每一個日志文件本身也有自己的元數據所以說對於當前版本的mysql來說二進制的開始位置通常為107;

 

1 2 3 4 5 6 7 8 9 10 mysql> flushlogs; Query OK, 0 rowsaffected (0.23 sec) 注意:flush logs一般只會滾動中繼日志和二進制日志。 mysql> showmaster status; +------------------+----------+--------------+------------------+ | File             | Position | Binlog_Do_DB |Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000011|      107 |              |                  | +------------------+----------+--------------+------------------+ 1 row in set (0.00sec)

 

查看當前二進制文件的信息:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 mysql> createdatabase yong; Query OK, 1 rowaffected (0.12 sec) mysql> createtable yong.tb1 (id int,name char(20)); Query OK, 0 rowsaffected (0.44 sec) mysql> insertinto yong.tb1 values(1,'tom'); Query OK, 1 rowaffected (0.14 sec) mysql> showmaster status; +------------------+----------+--------------+------------------+ | File             | Position | Binlog_Do_DB |Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000011|      479 |              |                  | +------------------+----------+--------------+------------------+ 1 row in set (0.00sec)

 

查看二進制日志信息的命令:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 SHOW BINLOG EVENTS[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count] mysql> showbinlog events\G         #查看所有的二進制信息 ***************************87. row ***************************    Log_name: mysql-bin.000001         Pos: 13580  Event_type: Query   Server_id: 1 End_log_pos: 13688        Info: use `hellodb`; /*!40000 ALTERTABLE `toc` DISABLE KEYS */ ***************************88. row ***************************    Log_name: mysql-bin.000001         Pos: 13688  Event_type: Query   Server_id: 1 End_log_pos: 13795        Info: use `hellodb`; /*!40000 ALTERTABLE `toc` ENABLE KEYS */ ***************************89. row ***************************    Log_name: mysql-bin.000001         Pos: 13795  Event_type: Stop   Server_id: 1 End_log_pos: 13814        Info: 89 rows in set (0.00sec) mysql> showbinlog events in 'mysql-bin.000011';    #查看指定日志的二進制信息 +------------------+-----+-------------+-----------+-------------+----------------------------------------------+ | Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                         | +------------------+-----+-------------+-----------+-------------+----------------------------------------------+ | mysql-bin.000011|   4 | Format_desc |         1 |         107 | Server ver: 5.5.33-log, Binlogver: 4        | | mysql-bin.000011 |107 | Query       |         1 |         190 | create database yong                         | | mysql-bin.000011 |190 | Query       |         1 |         293 | create table yong.tb1 (idint,name char(20)) | | mysql-bin.000011 |293 | Query       |         1 |         357 | BEGIN                                        | | mysql-bin.000011 |357 | Query       |         1 |         452 | insert into yong.tb1values(1,'tom')         | | mysql-bin.000011 |452 | Xid         |         1 |         479 | COMMIT /* xid=103 */                         | +------------------+-----+-------------+-----------+-------------+----------------------------------------------+ 6 rows in set (0.00sec) mysql> showbinlog events in 'mysql-bin.000011' from 190; #從指定的事件位置開始 +------------------+-----+------------+-----------+-------------+----------------------------------------------+ | Log_name         | Pos | Event_type | Server_id |End_log_pos | Info                                         | +------------------+-----+------------+-----------+-------------+----------------------------------------------+ | mysql-bin.000011 |190 | Query      |         1 |         293 | create table yong.tb1 (idint,name char(20)) | | mysql-bin.000011 |293 | Query      |         1 |         357 | BEGIN                                        | | mysql-bin.000011 |357 | Query      |         1 |         452 | insert into yong.tb1values(1,'tom')         | | mysql-bin.000011 |452 | Xid        |         1 |         479 | COMMIT /* xid=103 */                         | +------------------+-----+------------+-----------+-------------+----------------------------------------------+ 4 rows in set (0.00sec) mysql> showbinlog events in 'mysql-bin.000011' from 190 limit 3;  #指定偏移量(不是語句,是事件) +------------------+-----+------------+-----------+-------------+----------------------------------------------+ | Log_name         | Pos | Event_type | Server_id |End_log_pos | Info                                         | +------------------+-----+------------+-----------+-------------+----------------------------------------------+ | mysql-bin.000011 |190 | Query      |         1 |         293 | create table yong.tb1 (idint,name char(20)) | | mysql-bin.000011 |293 | Query      |         1 |         357 | BEGIN                                        | | mysql-bin.000011 |357 | Query      |         1 |         452 | insert into yong.tb1values(1,'tom')         | +------------------+-----+------------+-----------+-------------+----------------------------------------------+ 3 rows in set (0.00sec)

 

命令行下查看二進制日志:

 

由於無法使用cat等方式直接打開並查看二進制日志;所以必須使用mysqlbinlog命令。但是當正在執行mysql讀寫操作時建議不要使用此打開正在使用的二進制日志文件;若非要打開可flush logs。mysqlbinlog命令的使用方式:

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@stu18 data]#mysqlbinlog mysql-bin.000017        #必須在數據目錄下 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET@@session.max_insert_delayed_threads=0*/; /*!50003 SET@OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4       #事件開始處 #131009  0:25:59 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.33-log created 131009  0:25:59  # Warning: thisbinlog is either in use or was not closed properly. BINLOG ' FzJUUg8BAAAAZwAAAGsAAAABAAQANS41LjMzLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA== '/*!*/; # at 107 #131009  0:26:36 server id 1  end_log_pos 192   Query   thread_id=12    exec_time=0 error_code=0     #131009 0:26:36年月日的簡寫方式;end_log_pos事件結束處;thread_id=12 哪個會話線程創建的此語句;exec_time=0 執行時長單位為秒;error_code=0 錯誤代碼0表示沒有 SET TIMESTAMP=1381249596/*!*/;      #預設信息(環境設定)

 

導出此數據庫的信息:

 

1 [root@stu18 data]#mysqlbinlog mysql-bin.000017 > /tmp/a.sql

 

導入此數據庫的信息:

 

1 [root@stu18 data]#mysql < a.sql

 

刪除二進制日志信息:

 

二進制日志會記錄大量的信息(其中包含一些無用的信息)。如果很長時間不清理二進制日志,將會浪費很多的磁盤空間。但是,刪除之後可能導致數據庫崩潰時無法進行恢復,所以若要刪除二進制日志首先將其和數據庫備份一份,其中也只能刪除備份前的二進制日志,新產生的日志信息不可刪(可以做即時點還原)。也不可在關閉mysql服務器之後直接刪除因為這樣可能會給數據庫帶來錯誤的。若非要刪除二進制日志需要做如下操作:導出備份數據庫和二進制日志文件進行壓縮歸檔存儲。刪除二進制文件的方法如下:

 

1、刪除所有的二進制日志(不可效仿):

 

使用RESET MASTER語句可以刪除所有的二進制日志。該語句的形式如下:

 

1 2 3 4 5 6 7 8 9 mysql> resetmaster;            Query OK, 0 rowsaffected (0.17 sec) mysql> showbinary logs; +------------------+-----------+ | Log_name         | File_size | +------------------+-----------+ | mysql-bin.000001|       107 | +------------------+-----------+ 1 row in set (0.04sec)

 

解析:首先不建議在生產環境下使用此操作;刪除所有的二進制日志後,Mysql將會重新創建新的二進制日志。新二進制日志的編號從000001開始。

 

2、根據文件或時間點來刪除二進制日志:

 

語法形式:

 

1 mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }

 

其中TO'log_name'表示把這個文件之前的其他文件都刪除掉,也可使用BEFORE datetime_expr指定把哪個時間之前的二進制文件刪除了。

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 mysql> PURGEBINARY LOGS TO 'mysql-bin.000007'; Query OK, 0 rowsaffected (0.11 sec) mysql> showbinary logs; +------------------+-----------+ | Log_name         | File_size | +------------------+-----------+ | mysql-bin.000007|       150 | | mysql-bin.000008|       150 | | mysql-bin.000009|       150 | | mysql-bin.000010|       150 | | mysql-bin.000011|       150 | | mysql-bin.000012|       150 | | mysql-bin.000013|       150 | | mysql-bin.000014|       150 | | mysql-bin.000015|       150 | | mysql-bin.000016|       150 | | mysql-bin.000017|       483 | +------------------+-----------+ 11 rows in set (0.04sec) [root@stu18 data]#cat mysql-bin.index ./mysql-bin.000007 ./mysql-bin.000008 ./mysql-bin.000009 ./mysql-bin.000010 ./mysql-bin.000011 ./mysql-bin.000012 ./mysql-bin.000013 ./mysql-bin.000014 ./mysql-bin.000015 ./mysql-bin.000016 ./mysql-bin.000017

 

由此可以看出這種清理二進制日志文件的方式是非常合理的,不會導致數據庫的錯誤發生。

 

1 2 mysql> PURGEBINARY LOGS BEFORE '13-10-19 10:26:36'#使用時間來刪除二進制日志 Query OK, 0 rowsaffected (0.05 sec)

 

 

 

到此關於二進制的知識就解析完了,其中若有錯誤不足之處請指出!謝謝!注意二進制日志和錯誤日志很重要重點學之!!

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved