mysql 搭建---服務器配置參考

MySQL配置選項

1.預編譯的選項:
(1).在生成RPM包時指定的選項;
(2).在源碼安裝時指定的選項;

2.命令行選項:
(1).可以在啓動服務器(mysqld)時在命令行上指定啓動選項;
(2).默認情況下,服務器在運行時使用其配置變量的預編譯值;但是,如果默認值不適合環境,則可添加運行時選項,讓服務器使用其他值來執行以下操作:
①.指定重要的目錄和文件的位置;
②.控制服務器寫入的日誌文件;
③.覆蓋服務器與性能相關的變量的內置值(即,控制最大同時連接數以及緩衝區和高速緩存的大小);
④.在服務器啓動時啓用或禁用預編譯的存儲引擎通過使用命令行選項或選項文件,或者使用兩者的組合,可以指定服務器啓動時的運行時選項(以更改其配置和行爲);
(3).命令行選項優先於選項文件中的任何設置

3.配置文件選項:在配置文件my.cnf中指定的啓動選項;最常用的方式;

4.查看相關幫助mysqld –verbose –help;

使用選項文件的原因

1.將選項放在文件中後,不需要每次啓動服務器時都在命令行上指定選項;對於複雜的選項(如用於配置InnoDB表空間的選項),這樣做更加方便,並且更不容易出錯;
2.如果所有服務器選項都在一個選項文件中,則可概覽服務器的配置情況;
3.MySQL程序可以訪問多個選項文件中的選項,要創建或修改某個選項文件,必須擁有該文件的寫入權限;客戶機程序僅需要讀取訪問權限;

選項文件組

1.選項文件中的選項按組進行組織,每個組前面有一個爲組命名的[group-name]行,通常,組名稱是選項組適用的程序的類別或名稱;
選項組示例包括:
2.[client]:用於指定適用於所有客戶機程序的選項;[client]組的一個常見用途是指定連接參數,因爲在一般情況下,不管使用什麼客戶機程序,都要建立到同一個服務器的連接;
3.[mysql]和[mysqldump]:分別用於指定適用於mysql和mysqldump客戶機的選項;此外,也可以單獨指定其他客戶機選項;
4.[server]:用於指定同時適用於mysqld和mysqld_safe服務器程序的選項;
5.[mysqld],[mysqld-5.6],[mysqld56]和[mysqld_safe]:用於指定適用於不同服務器版本或啓動方法的選項;

編寫選項文件

1.要創建或修改某個選項文件,最終用戶必須擁有該文件的寫入權限;服務器本身僅需要讀取訪問權限;服務器讀取選項文件,但不創建或修改選項文件;
2.如何在選項文件中寫入一個選項:
(1).使用長選項格式(像命令行上使用的那樣),但省略前導短劃線;
(2).如果某個選項取值,則允許在等號兩則加空格( = );此規則不適用於在命令行上指定的選項,eg:指定默認選項文件;
3.在幻燈片上的示例中,請注意以下方面:
(1).[client]:此組中的選項適用於所有標準客戶機;
①.host:指定服務器主機名;
②.compress:指示客戶機/服務器協議對通過網絡發送的通信使用壓縮;
(2).[mysql]:此組中的選項僅適用於mysql客戶機;
show-warnings:指示MySQL在每條語句後顯示任何當前警告;
(3).mysql客戶機同時使用[client]和[mysql]組中的選項,因此將使用顯示的全部三個選項;

選項文件位置

1.Linux:
(1)./etc/my.cnf;
(2)./etc/mysql/my.cnf;
(3)./usr/local/mysql/etc/my.cnf;
(4).~/.my.cnf;
(5).如果設置了MYSQL_HOME環境變量,則將搜索$MYSQL_HOME/my.cnf文件;
2.Windows:
(1).C:\目錄下的my.ini和my.cnf;
(2).C:\Windows(或C:\WinNT)目錄;
(3).C:\Program Files\MySQL\MySQL Server 目錄;
3.MySQL命令行程序會在MySQL安裝目錄中搜索選項文件;

選項文件中的啓動選項

要在選項文件中指定服務器選項,需要在[mysqld]或[server]組下指示特定選項;
1.日誌記錄:可以通過啓用所需日誌的類型爲服務器啓用日誌記錄;比如:
(1).general_log # 常規查詢日誌;
(2).log-bin # 二進制日誌;
(3).slow_query_log # 慢速查詢日誌;
2.默認存儲引擎:可以使用–default-storage-engine選項指定不同於InnoDB的默認存儲引擎;
3.系統變量:可以通過設置服務器系統變量值來定製服務器;
(1).max_connections=200 # 增加允許的最大連接數;
(2).innodb_buffer_pool_instances=4 # 增加InnoDB緩衝池數的默認值;
4.共享內存:在Windows上默認不啓用;可以使用shared-memory選項來啓用命名管道支持;
5.命名管道:要啓用命名管道支持,使用enable-named-pipe選項;

樣例選項文件

1.Linux:
(1).對於RPM安裝,樣例選項文件在/usr/share/mysql中;
(2).對於TAR文件安裝,樣例文件在MySQL安裝目錄下的share目錄中;
2.Windows:選項文件位於MySQL安裝目錄(my.ini)中;
3.如果多次指定一個選項(不管是在同一個選項文件中,還是在多個選項文件中),則最後
出現的選項值優先;
(1).–defaults-file=:使用指定位置的選項文件;
(2).–defaults-extra-file=:使用指定位置的其他選項文件;
(3).–no-defaults:忽略所有選項文件;
eg:要使用/etc/my-opts.cnf文件而忽略標準選項文件,可以:shell> mysql –defaults-file=/etc/my-opts.cnf;

顯示選項文件中的選項

1.# my_print_defaults –defaults-file=/usr/local/mysql/my.cnf client mysql mysqld;
2.# mysql –print-defaults:貌似打印不出來;

遮蔽驗證選項

1.建議不要使用mysql -uroot -poracle形式在命令行上指定口令;缺點:可以通過history命令查看到密碼;
2.爲方便起見,可以將口令放在[client]選項組中,但口令以純文本方式存儲,對選項文件有讀取訪問權限的任何人都能輕易地看到;
3.利用mysql_config_editor實用程序,可以將驗證憑證存儲在加密的登錄文件.mylogin.cnf中;在Linux和UNIX上,該文件位置是當前用戶的主目錄;MySQL客戶機程序以後可以讀取該文件以獲取用於連接到MySQL服務器的驗證憑證;
TIPS:加密方法是可逆的,因此不應假設憑證對任何有文件讀取特權的人都是安全的;相反,該功能使得避免使用純文本憑證變得更容易;
4.文件說明:
.mylogin.cnf登錄文件的未加密格式由選項組組成,類似於其他選項文件;
.mylogin.cnf中的每個選項組稱爲“登錄路徑”,僅允許一組有限的選項:主機,用戶和口令;可將登錄路徑視爲一組值,可以指示服務器主機以及用於服務器驗證的憑證;eg:
[admin]
user = root
password = oracle
host = 127.0.0.1

登錄路徑

1.創建登錄路徑:mysql_config_editor set –login-path=admin –host=localhost –user=root –password;如果調用mysql_config_editor時不使用–login-path選項,則將使用[client]登錄路徑;默認情況下,所有標準客戶機都使用此登錄路徑;
(1).查看生成的文件:ll ~/.mylogin.cnf;
(2).登錄:mysql –login-path=admin;
2.以純文本格式查看單個登錄路徑:mysql_config_editor print –login-path=admin;
3.以純文本格式查看所有登錄路徑:mysql_config_editor print –all;
4.刪除登錄路徑:mysql_config_editor remove –login-path=admin;

服務器系統變量

1.查看所有參數的默認值和讀取選項文件之後的值:mysqld –verbose –help;
2.查看所有參數的默認值和忽略任何選項文件中的設置:mysqld –no-defaults –verbose –help;
3.查看變量值,沒有其他啓動選項:SHOW GLOBAL VARIABLES;

動態系統變量

1.MySQL維護了兩種包含系統變量的作用域:
(1).GLOBAL變量影響服務器的整體操作;
(2).SESSION變量影響其對單個客戶機連接的操作;
(3).變量存在於任一作用域中,也可同時存在於兩個作用域中;
2.變量及其作用域的示例包括:
(1).僅全局:key_buffer_size,query_cache_size;
(2).全局和會話:sort_buffer_size,max_join_size;
(3).僅會話:timestamp,error_count;
3.在更改變量值時,適用以下幾點:
(1).設置會話變量不需要任何特殊特權,但客戶機只能更改自己的會話變量,不能更改其他任何客戶機的會話變量;
(2).LOCAL和@@local是SESSION和@@session的同義詞;
(3).如果不指定GLOBAL或SESSION,則當會話變量存在時,SET將更改會話變量;會話變量不存在時,將產生錯誤;
TIPS:修改的全局參數不會在選項文件中反應出來,需要手動修改,以便下次啓動後生效;與Oracle對比;

顯示動態系統變量

設定特定的變量時要注意賦值的類型;
— 結構化系統變量;
1.MySQL支持一種結構化變量類型,該變量類型可以指定控制鍵高速緩存操作的參數;鍵高速緩存結構化變量具有以下組件:
(1).key_buffer_size;
(2).key_cache_block_size;
(3).key_cache_division_limit;
(4).key_cache_age_threshold;
2.要引用結構化變量實例的組件,可使用複合名稱:instance_name.component_name;
示例:hot_cache.key_buffer_size/hot_cache.key_cache_block_size;cold_cache.key_cache_block_size;
3.相關文檔:http://dev.mysql.com/doc/refman/5.6/en/structured-system-variables.html。

服務器狀態變量

1.LOCAL是SESSION的同義詞;
2.如果沒有修飾符,則默認值爲SESSION;
3.SHOW STATUS示例:mysql> SHOW GLOBAL STATUS;

SQL模式

SQL模式由控制查詢處理某些方面的可選值組成,設置了相應的SQL模式後,客戶機就可以對以下項目進行某種程度的控制:
1.輸入數據:SQL模式可用於指示服務器對接受輸入數據的寬容度;
2.標準SQL符合性:SQL模式可用於啓用或禁用與標準SQL符合性相關的行爲;
3.兼容性:SQL模式可用於改進與其他數據庫系統的兼容性;

設置SQL模式

1.可以使用–sql-mode選項設置服務器啓動時的默認SQL模式;
2.單個客戶機可按自己的要求在選項文件內配置SQL模式;
3.如果沒有修飾符,則SET將更改會話SQL模式;調用SET語句時可以帶一個空字符串來清除當前SQL模式,也可以帶一個或多個模式名稱(用逗號分隔);
4.如果值爲空或者包含多個模式名稱,則必須將值放在引號中;如果值包含一個模式名稱,則引號可有可無;SQL 模式值不區分大小寫;
5.查看當前的sql_mode模式:
(1).使用SELECT語句檢查當前的sql_mode設置:SELECT @@sql_mode;
(2).查看系統變量:SHOW VARIABLES LIKE ‘sql_mode’;
例子:
1.使用單個模式值設置SQL模式:SET sql_mode = ANSI_QUOTES; SET sql_mode = ‘TRADITIONAL’;
2.使用多個模式名稱設置SQL模式:SET sql_mode = ‘IGNORE_SPACE,ANSI_QUOTES,NO_ENGINE_SUBSTITUTION’;

常用SQL模式

1.STRICT_TRANS_TABLES,STRICT_ALL_TABLES:沒有這些模式,MySQL將接受缺少,超出範圍或格式不正確的值;啓用 STRICT_TRANS_TABLES時將爲事務表設置“嚴格模式”;也可在默認的my.cnf文件中啓用;啓用STRICT_ALL_TABLES 時將爲所有表設置嚴格模式;

  1. mysql> CREATE DATABASE db1;
  2. mysql> USE db1;
  3. mysql> CREATE TABLE t(id INT);
  4. mysql> INSERT INTO t VALUES (‘1’);
  5. mysql> commit;
  6. mysql> INSERT INTO t VALUES (‘x’);
  7. mysql> commit;
  8. mysql> SELECT * FROM t;
  9. +——+
  10. | id |
  11. +——+
  12. | 1 |
  13. | 0 |
  14. +——+
  15. mysql> SELECT @@sql_mode;
  16. +————————+
  17. | @@sql_mode |
  18. +————————+
  19. | NO_ENGINE_SUBSTITUTION |
  20. +————————+
  21. mysql> SET sql_mode=’STRICT_TRANS_TABLES,STRICT_ALL_TABLES’;
  22. mysql> SELECT @@sql_mode;
  23. +—————————————+
  24. | @@sql_mode |
  25. +—————————————+
  26. | STRICT_TRANS_TABLES,STRICT_ALL_TABLES |
  27. +—————————————+
  28. mysql> INSERT INTO t VALUES (‘x’);
  29. ERROR 1366 (HY000): Incorrect integer value: x for column id at row 1

2.TRADITIONAL:啓用此SQL模式可對輸入數據值施加類似於其他數據庫服務器的限制;在此模式下,使用GRANT語句可創建要求指定口令的用戶;
3.IGNORE_SPACE:默認情況下,必須調用函數名稱與後接括號間沒有空格的函數;啓用此模式後,允許存在此類空格,並使函數名稱成爲保留字;
4.ERROR_FOR_DIVISION_BY_ZERO:默認情況下,除數爲零時將產生結果NULL,在啓用此模式的情況下插入數據時,除數爲零將導致出現警告,在嚴格模式下將出現錯誤;(這個模式之後會被廢棄掉)

  1. mysql> INSERT INTO t VALUES (2/1);
  2. mysql> INSERT INTO t VALUES (2/0);
  3. mysql> SET sql_mode=’STRICT_TRANS_TABLES,STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO’;
  4. mysql> SELECT @@sql_mode;
  5. mysql> INSERT INTO t VALUES (2/0);
  6. ERROR 1365 (22012): Division by 0

5.ANSI:使用此組合模式將使MySQL服務器變得更加“類似於ANSI”;即,此模式支持的行爲更像標準SQL,如ANSI_QUOTES和PIPES_AS_CONCAT;
6.NO_ENGINE_SUBSTITUTION:如果在創建或更改表時指定了不可用的存儲引擎,除非啓用了此模式,否則MySQL 將替換默認存儲引擎;這是默認的SQL模式;

日誌文件

1.錯誤日誌(error log):
(1).記錄MySQL啓動,關閉和運行時產生的重大的錯誤的信息;
(2).如果mysqld警告一個表需要自動的檢查或者修復,也會記錄一個錯誤日誌;
(3).可以使用–log-error=file_name選項來指定錯誤日誌文件,如果沒有指定,則系統默認在data目錄下生產一個hostname.err的文件;也可以在配置文件中配置log_error變量;
(4).主要是由mysqld_safe腳本可創建錯誤日誌,並在啓動服務器時將其輸出重定向到該錯誤日誌;
(5).查詢log_error的位置:>show variables like ‘log_error’;查看主機名:>system hostname;
2.常規查詢日誌(general query log):
(1).常規查詢日誌記錄服務器運行期間收到的所有語句.當客戶端連接或者斷開的時候服務器會記錄信息到日誌中,並記錄所有從客戶端接收到的sql語句,它對於在客戶端中排錯和查看是哪個客戶端發送的命令很有幫助;
(2).mysqld是按照接收到命令的方式記錄語句的,這可能跟它們執行的順序不同(這與二進制日誌是有區別的,二進制日誌是執行後記錄);
(3).使用–general_log=[0|OFF|1|ON]來控制是否打開常規查詢日誌和–general_log_file=file_name來指定生成的常規查詢日誌文件(在mysql5.1.6中可以使用–log選項啓動和使用–log-output選項指定日誌輸出的位置),也可以輸出到”Server Log Tables”表中;如果沒有指定file_name,默認是在data目錄下生產一個hostname.log文件;
(4).服務器重新啓動和log flush不會產生一個新的文件;
(5).默認此功能關閉,通過show variables like ‘general_log%’來查看;
(6).設置打開一般查詢日誌:set global general_log=1;set global general_log_file=file_name(兩個變量會同時打開關閉,打開之後立即生效);
(7).可以在啓動的時候指定–general-file選項或者在配置文件中指定general_log=1,general_file_log=/path;
(8).一般不打開此日誌功能,數據量太大,如果打開可以放到單獨的磁盤中.
(9).log_output變量值:
①.FILE:保存到文件中;
②.TABLE:保存到表中;SET GLOBAL log_output = ‘TABLE’;
③.清空日誌表:TRUNCATE mysql.general_log;
(10).備份切換一般日誌文件:
①.先備份:>mv hostname.log hostname.log.bak
②.切換日誌組:mysqladmin flush-logs;
3.慢查詢日誌(slow query log):
(1).調優時使用,記錄超出指定時間的sql語句;
(2).慢查詢日誌主要記錄執行時間超過long_query_time變量指定時間的sql語句,這個時間不包括獲得鎖的時間,只包含執行時間,系統默認時間是1s(long_query_time=1.0000);
(3).使用–slow-query-log=0|1選項和–slow_query_log_file=file_name選項指定(在mysql5.1.6版本可以指定mysqld的–long-slow-queries=file_name選項啓動);
(4).命令行參數:–log-slow-queries=file_name;指定慢查詢日誌文件
(5).系統變量:
①.slow_query_log:開啓慢查詢功能,set global slow_query_log = [0|OFF|1|ON];
②.slow_query_log_file:指定慢查詢日誌文件,系統默認是在data目錄下的hostname-slow.log文件;
③.long_query_time:指定查詢的最大時間,set global long_query_time=n;
④.log_queries_not_using_indexes:不用索引的慢查詢,默認是功能關閉的;
查看某個表是否有索引:> show index from t;
打開此功能:>set global log_queries_not_using_indexes =1;
查看變量:>show variables like ‘log_queries_not_using_indexes’;
(6).log_output變量值:
①.FILE:保存到文件中;
②.TABLE:保存到表中;SET GLOBAL log_output = ‘TABLE’;
③.清空日誌表:TRUNCATE mysql.slow_log;
(7).分析慢日誌文件的工具:mysqldumpslow,查看具體的幫助是用mysqldumpslow –help;
4.二進制日誌(binary log):
(1).記錄所有對數據庫更新和潛在的更新語句(一個delete語句,但是沒有影響的行),語句以事件(event)的方式存儲,同時也包含了更新語句執行的時間信息;
(2).它不記錄那些不修改任何數據的語句,如果想要記錄所有的語句,可以使用query log;
(3).它主要的目的是在做還原操作時儘可能全的更新數據庫,因爲它包含在一次備份後的所有更新操作.它同樣被用在master replication server中作爲一個記錄發送給slave servers;
(4).打開二進制日誌會損失1%的性能,但是它帶來的好處遠遠超過這些;
(5).查看二進制日誌是否打開,需要查看log_bin參數是否是ON:>show variables like ‘log_bin’;
(6).命令行參數
①.–log-bin=filename:記錄二進制日誌文件的位置,儘量指定路徑名,如果不指定的話則保存在數據目錄;
②.–log-bin-index=file:記錄二進制日誌文件索引的位置,保存了日誌文件名;
③.–max_binlog_size:單個文件最大多少;
④.–binlog-do-db=db_name:哪個數據庫使用,只有這個數據庫使用;
⑤.–binlog-ignore-db=db_name:哪個數據庫不使用,只有這個數據庫不使用;
(7).系統變量
①.log_bin:日誌的位置;
②.binlog_cache_size:二進制日誌緩存大小,是每一個連接進來的線程分配的大小,不是整個服務器的大小;
③.max_binlog_cache_size:最大緩存大小;
④.max_binlog_size:單個文件最大大小,超過此大小則再分配一個文件,但是一個事務必須在一個文件中,所以可能會稍大點;
⑤.binlog_cache_use:當前連接使用的binlog緩存的事務的數量,使用show status like ‘binlog_cache_use’查看(show status命令顯示了所有連接到mysql服務器的狀態值);
⑥.binlog_cache_disk_use:如果binlog_cache_use不夠用,則在磁盤上緩存,應該儘量避免;
⑦.binlog_do_db:設置master-slave時使用;
⑧.binlog-ignore-db:設置哪個數據庫不記錄日誌;
⑨.sync_binlog:緩存與硬盤的同步頻率(commit多少下同步一次,0表示服務器自動控制);
⑩.binlog_format:二進制日誌的格式;
(8).查看當前二進制文件的名稱和大小,show binary/master logs;
(9).如果不指定二進制日誌文件的位置,默認存放在data文件夾下,日誌文件是:mysql-bin.xxxxxx,索引文件是mysql-bin.index;
(10).如果要切換日誌的話,執行flush logs命令;
(11).初始化二進制日誌系統,從新生成:reset master命令;
(12).刪除某個日誌文件:purge binary logs [before ‘datetime’ / to ‘log_name’] 刪除指定日期之前的和刪除指定文件之前的日誌文件;
(13).設置日誌文件的失效期:參數爲–expire_logs_days,set global expire_log_days=n,N天前的日誌自動刪除;
(14).二進制日誌的格式
①.查看格式:show [global] variables like ‘binlog_format’;
②.設置日誌格式:set [global] binlog_format = statement|row|mixed;
③.查看binlog中的事件:show binlog events in ‘mysql-bin.000002’ from 0;
④.使用mysqlbinlog程序打開;
5.審計日誌(audit log):
(1).用於記錄企業版基於策略的審計信息;審計日誌是作爲企業版插件提供的;
(2).由–audit-log選項和audit_log_file選項來控制;
(3).審計過程會不斷寫入審計日誌,直到將該插件刪除,或者通過audit_log_policy=NONE 選項設置關閉審計;
(4).在服務器啓動時使用audit_log=FORCE_PLUS_PERMANENT作爲選項,可以防止刪除該插件;
補充:
6.InnoDB重做日誌(innodb redo log);
(1).與innodb數據引擎相關;
(2).用來實現災難恢復(crash recovery),突然斷電會導致innodb表空間中的數據沒有寫到磁盤上,通過執行redo log能夠重新執行這些操作來恢復數據;
(3).提升innodb的i/o性能,innodb引擎把數據和索引都載入到內存中的緩衝池中,如果每次休息數據和索引都需要更新到磁盤,必定會增加i/o請求,而且因爲每次更新的位置都是隨機的,磁頭需要頻繁的定位導致效率很低,所以innodb每處理完一個事務後只添加一條日誌log,另外有一個線程負責智能的讀取日誌文件並批量更新到磁盤上,實現最高效的磁盤寫入;
(4).系統變量:
①.innodb_log_buffer_size:日誌緩衝區的大小;
②.innodb_log_file_size:日誌文件的大小;
③.innodb_log_files_in_group:一組日誌中有幾個文件:
- 文件名爲ib_logfileX(X從0開始一次增加);
- 先關閉數據庫服務:>mysqladmin shutdown(mysql.server stop);
- 把data目錄下的ib_logfile文件移動走:>mv ib_logfile /tmp;
- 在配置文件中添加innodb_log_files_in_group=n的參數;
- 啓動數據庫服務:>mysqld –defaults-file=./my.cnf –user=mysql(mysql.server start);
- 可以查看error log文件觀察啓動過程;

④.innodb_log_group_home_dir:日誌存放的性對路徑(相對於$MYSQL_HOME/mysql/data目錄,即datadir目錄);
- 關閉服務器;
- 在配置文件中添加此參數,並指定路徑;
- 啓動服務器;

(5).innodb_flush_log_at_trx_commit:根據不同的數據安全級別去設定.
1.0:日誌緩衝每秒一次的被寫入到日誌文件,並且對日誌文件做到磁盤操作的刷新,但是在一個事務提交不做任何修改;
2.1:每個事務提交時,日誌緩衝被寫到日誌文件,對日誌文件做到磁盤操作的刷新;
3.2:每個事務提交後,日誌緩衝被寫到日誌文件,但不對日誌文件做到磁盤操作刷新,對日誌文件每秒刷新一次;
4.查看此變量:>show variables like ‘innodb_flush_log_at_trx_commit’;
(6).innodb_os_log_written:寫入到文件日誌的數據量,使用show status查詢;
(7).innodb_os_log_fsyncs:寫入到磁盤的次數,使用show status查詢;

日誌文件用法列表

二進制日誌記錄

1.二進制日誌包含描述數據庫更改(如創建數據庫或更改表數據)的“事件”;二進制日誌 還包含可能做出更改的語句的事件(例如,沒有匹配行的DELETE);該日誌還包含有關 每條更新語句所用時間的信息;
2.二進制日誌有兩個重要用途:複製和數據恢復;
3.MySQL使用日誌傳送複製解決方案;使用日誌傳送系統時,可以將主系統上發生的所有數據更改存儲在二進制日誌中,然後通過從系統檢索這些數據更改,並根據接收到的這些日誌文件執行更改;
4.可以實時下載日誌文件並執行內容;即,只要生成日誌文件事件,就將其發送到連接的從系統供執行;由於網絡傳播存在延遲,從系統可能需要幾秒到幾分鐘(最壞的情況)時間來接收更新;在理想的情況下,延遲會在一秒以內;
5.發生以下事件之一時,二進制日誌會輪轉:
(1).重新啓動MySQL服務器;
(2).達到允許的最大大小(max_binlog_size);
(3).發出了FLUSH LOGS SQL命令;
6.二進制日誌獨立於存儲引擎,不管使用的存儲引擎是哪個(即InnoDB或MyISAM),MySQL複製都會工作;

二進制日誌記錄格式

1.基於語句的二進制日誌記錄:
(1).包含實際SQL語句
(2).包括DDL(CREATE,DROP等)和DML(UPDATE,DELETE等)語句;
(3).相對較小的文件保存磁盤空間和網絡帶寬;
(4).並非所有複製的語句都會在遠程計算機上正確重放;
(5).要求主系統和從系統上覆制的表和列完全相同(或者符合多個限制條件);
2.基於行的二進制日誌記錄:
(1).指示對單個錶行的影響情況;
(2).正確重放所有語句,即使對於在使用基於語句的日誌記錄時未正確複製的功能導致的更改也是如此;
3.按如下方式設置格式:SET [GLOBAL|SESSION] BINLOG_FORMAT=[row|statement|mixed|default];
注:使用mixed選項可讓MySQL選取最適合單個事件的格式,MySQL通常會使用基於語句的二進制日誌,但在需要時可恢復到基於行的複製;

列出二進制日誌文件

1.SHOW BINARY LOGS語句可以列出當前日誌文件和文件大小;
2.SHOW MASTER STATUS語句可以顯示下一個事件的主狀態;需要SUPER或REPLICATION CLIENT特權;

查看二進制日誌內容

1.方式1:show binlog events in ‘mysql-bin.000002’ from 0;
2.方法2:mysqlbinlog mysql-bin.xxxxxx;

刪除二進制日誌

1.默認情況下,不會刪除舊的日誌文件;
2.根據存在時間刪除日誌:
(1).要在二進制日誌輪轉過程中自動刪除存在時間多於指定天數的任何二進制日誌,可使用expire_logs_days設置;
(2).也可以在選項文件中配置expire_logs_days:
[mysqld]
expire_logs_days=7
(3).PURGE BINARY LOGS BEFORE now() – INTERVAL 3 day;
4.根據文件名刪除日誌:PURGE BINARY LOGS TO ‘mysql-bin.000010’;

配置企業審計

1.要安裝audit_log插件:
(1).方法1:使用INSTALL PLUGIN語法:INSTALL PLUGIN audit_log SONAME ‘audit_log.so’;
(2).方法2:在服務器啓動時設置plugin-load選項:
[mysqld]
plugin-load=audit_log.so
2.默認情況下,裝入該插件就會啓用日誌記錄;將選項audit-log設置爲OFF可禁用日誌記錄;
3.要防止在運行時刪除該插件,可設置以下選項:audit-log=FORCE_PLUS_PERMANENT;
4.日誌文件命名爲audit.log,默認情況下位於服務器數據目錄中;要更改該文件的名稱或位置,可在服務器啓動時設置 audit_log_file系統變量;
5.要平衡遵從性和性能,可使用audit_log_strategy選項在SYNCHRONOUS,ASYNCHRONOUS,SEMISYNCHRONOUS和 PERFORMANCE之間進行選擇;
6.如果將audit_log_rotate_on_size設置爲某個大於0的數字,則當日志文件大小超出了該數量的4KB數據塊大小時,將輪轉日誌文件;

審計日誌文件

1.每個審計記錄的TIMESTAMP採用UTC格式;
2.NAME屬性代表事件類型;例如,“Connect”表示登錄事件,“Quit”表示客戶機斷開連接,“Shutdown”表示服務器關閉;
3.“Audit”和“NoAudit”表示審計開始和停止的點;
4.STATUS屬性提供命令狀態;這與MySQL命令SHOW ERRORS顯示的Code值相同;
5.有些屬性僅在特定的事件類型中出現;例如,“Connect”事件包括諸如HOST,DB,IP和USER之類的屬性;“Query”事件包括SQLTEXT屬性;
補充:審計過濾工具;
mysqlauditgrep –users=root –query-type=SELECT –status=0 /var/lib/mysql/audit.log

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章