深入理解mysql引數
前言:mysql引數的修改在mysql的課程裡面應該屬於相對基礎的知識,但是作為一個mysql的初學者還是很有必要弄懂這個知識點,以後的學習過程中將會經常用到的。技術很多時候都是相通的,如果有學過oracle的朋友應該會知道,oracle的引數裡面有幾個標籤:動態引數、靜態引數、session級別修改、全域性修改、立即生效和延遲生效。作為資料庫mysql也同樣有這些特性,但是整體學起來後會發現mysql某些方面還是沒有oracle做的到位,在該文件的最後我們們再做個總結。
一、引數檔案
1、檢視引數檔案
透過命令列"mysql --help | grep my.cnf"檢視my.cnf檔案的位置,linux作業系統中引數檔案預設為/etc/my.cnf,按照mysql官方文件的說明,mysql的啟動引數檔案的順序如下:
1、查詢根據順序查詢全域性 /etc/my.cnf /etc/mysql/my.cnf /SYSCONFDIR/my.cnf為全域性選項
2、$MYSQL_HOME/my.cnf為服務指定變數
二、引數檔案的修改
1、動態引數和靜態引數的概念
Mysql 的引數型別:分為動態(dynamic)和靜態引數(static);
動態引數意味著可以再mysql例項執行中進行更改;
靜態引數說明在整個例項宣告週期內都不得進行更改,就好像是隻讀的。
在動態引數中,有些引數修改可以是基於回話的也可以是基於整個例項的生命週期。
2、全域性變數與會話變數
全域性變數在MYSQL啟動的時候由伺服器自動將它們初始化為預設值。會話變數在每次建立一個新的連線的時候,由MYSQL來初始化。MYSQL會將當前所有全域性變數的值複製一份。來做為會話變數。(也就是說,如果在建立會話以後,沒有手動更改過會話變數與全域性變數的值,那所有這些變數的值都是一樣的。全域性變數與會話變數的區別就在於,對全域性變數的修改會影響到整個伺服器,但是對會話變數的修改,只會影響到當前的會話(也就是當前的資料庫連線)
3、引數的檢視方式
Mysql的引數可以透過"show variables"來檢視,由於從mysql5.1版本開始,可以透過information_schema架構下的GLOBAL_VARIABLES檢視來進行查詢,所以也可以這樣檢視"select * from information_schema.global_variables";
檢視引數的指令碼:
語句一、
mysql> SHOW VARIABLES LIKE 'max_join_size';
mysql> SHOW GLOBAL VARIABLES LIKE 'max_join_size';
語句二、
mysql> select * from information_schema.global_variables; +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +---------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+ | MAX_PREPARED_STMT_COUNT | 16382 | | INNODB_BUFFER_POOL_SIZE | 134217728 | | HAVE_CRYPT | YES | | PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE | 10000 | | INNODB_VERSION | 5.5.36 | | QUERY_PREALLOC_SIZE | 8192 | | DELAYED_QUEUE_SIZE | 1000 | | PERFORMANCE_SCHEMA_MAX_COND_INSTANCES | 1000 | | SSL_CIPHER | | | COLLATION_SERVER | utf8_general_ci | | SECURE_FILE_PRIV | | | TIMED_MUTEXES | OFF | | DELAYED_INSERT_TIMEOUT | 300 | | PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES | 1000000 | | LC_TIME_NAMES | en_US |
4、引數的修改,引數的修改有以下幾種方法,作為學習、便於理解其中的原理所在,這裡把幾種方法都整理出來了,歡迎各位的檢視
方法一、修改引數檔案。所有的引數都儲存在/etc/my.cnf檔案中,所以直接修改該引數檔案便可修改相應的系統引數。
弊端:修改該引數需要重啟後才能生效,當系統上線後一般都不能隨便重啟,所以該方法很少用;
操作方法:
1、修改引數檔案/etc/my.cnf,新增general_log_file = /data/mysql/mysql_2.log # The MySQL server [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 384M max_allowed_packet = 1M table_open_cache = 512 sort_buffer_size = 2M read_buffer_size = 2M read_rnd_buffer_size = 8M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size = 32M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 8 general_log_file = /data/mysql/mysql_2.log
2、重啟mysql服務 service mysqld stop
3、檢查引數是否生效 mysql> show variables like 'general%'; +------------------+-------------------------+ | Variable_name | Value | +------------------+-------------------------+ | general_log | OFF | | general_log_file | /data/mysql/mysql_2.log | +------------------+-------------------------+ 2 rows in set (0.00 sec)
當前顯示已生效 |
方法二、如果是動態引數的話,便可以直接透過語句修改。
(http://dev.mysql.com/doc/refman/5.6/en/dynamic-system-variables.html mysql的所有引數詳情介紹
sql語法:
SET variable_assignment [, variable_assignment] ... //可以同時修改多個參數
variable_assignment:
user_var_name = expr
| [GLOBAL | SESSION] system_var_name = expr
| @@[global. | session.]system_var_name = expr
例子:
SET sort_buffer_size=10000; /修改SESSION引數
SET @@local.sort_buffer_size=10000; /修改全域性引數
SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; /同時修改多個SESSION引數
SET @@sort_buffer_size=1000000; /第二種修改全域性引數的方法
SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
|
說明如下:
1)修改SESSION的引數的影響:如果您使用SESSION(預設情況)設定一個系統變數,則該值仍然有效,直到當前會話結束為止,或者直到您把變數設定為一個不同的值為止。
2)如果您使用GLOBAL(要求SUPER許可權)來設定一個系統變數,則該值被記住,並被用於新的連線,直到伺服器重新啟動為止。
如果您想要進行永久式變數設定,需要寫入到引數檔案。(透過SET命令並不會修改引數檔案的內容,還需要另行修改,這點做的沒有ORACLE好)
3)為了防止不正確的使用,如果您使用SET GLOBAL時同時使用了一個只能與SET SESSION同時使用的變數,或者如果您在設定一個全域性變數時未指定GLOBAL(或@@),則MySQL會產生一個錯誤。( SET GLOBAL命令修改SESSION引數的時候會報錯)
4)如果您想要把一個SESSION變數設定為GLOBAL值或把一個GLOBAL值設定為內部MySQL預設值,需使用DEFAULT關鍵詞。例如,在把max_join_size會話值設定為全域性值時,以下兩個語句是一樣的:SET max_join_size=DEFAULT;(恢復成預設值的設定)
總結:1、mysql的引數設定相對oracle來說較為簡單。
2、針對引數設定的方法本身沒有太多經驗,作為一個DBA不管是修改oracle引數、或mysql引數,建議每個資料庫都有一個文件用於記錄引數修改的歷史,這樣哪臺出現了問題,便於跟蹤;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
本文作者:JOHN
ORACLE技術部落格:ORACLE 獵人筆記 資料庫技術群:367875324 (請備註ORACLE管理 )
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-1262012/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 深入理解JVM(三)——配置引數JVM
- 帶你深入理解傳遞引數
- JavaScript引數傳遞的深入理解JavaScript
- 深入理解RabbitMQ中的prefetch_count引數MQ
- 深入理解MySQL索引MySql索引
- jmeter 引數理解JMeter
- 深入理解MYSQL undo redoMySql
- Mysql 引數MySql
- 深入理解MySQL系列之鎖MySql
- 深入理解MySQL系列之索引MySql索引
- MYSQL INNODB innodb_thread_concurrency相關引數理解MySqlthread
- 深入理解MySQL5.7GTID系列(七)binlog_gtid_simple_recovery引數的影響總結MySql
- 深入理解CSS計數器CSS
- 深入理解 MySQL 索引底層原理MySql索引
- 深入理解r2dbc-mysqlMySql
- 深入理解 MySQL 底層實現MySql
- MySQL引數調整MySql
- mysql 常用引數整理MySql
- MySQL引數說明MySql
- mysql 引數調優MySql
- 深入解析 ES6:Rest 引數和引數預設值REST
- linux find depth引數理解Linux
- find命令-mtime引數理解
- 深入理解浮點數的表示
- 【MySQL】檢視MySQL Server引數方法MySqlServer
- 《深入解析Oracle》第三章,引數及引數檔案Oracle
- 【勝通 】mysql的引數變數MySql變數
- MySQL效能相關引數MySql
- MySQL資料庫引數MySql資料庫
- mysql configure 引數MySql
- MySQL引數配置優化MySql優化
- mysql 5.0.41 mysqld 引數大全MySql
- flume 寫往hdfs引數理解分析
- linux,mtime引數的理解Linux
- JavaScript深入之引數按值傳遞JavaScript
- JavaScript 深入之引數按值傳遞JavaScript
- 深入理解浮點數的運算
- 【MySQL】MySQL 5.6 引數之 extra_portMySql