qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          深入理解mysql參數(shù)

          前言:mysql參數(shù)的修改在mysql的課程里面應(yīng)該屬于相對(duì)基礎(chǔ)的知識(shí),但是作為一個(gè)mysql的初學(xué)者還是很有必要弄懂這個(gè)知識(shí)點(diǎn),以后的學(xué)習(xí)過程中將會(huì)經(jīng)常用到的。技術(shù)很多時(shí)候都是相通的,如果有學(xué)過oracle的朋友應(yīng)該會(huì)知道,oracle的參數(shù)里面有幾個(gè)標(biāo)簽:動(dòng)態(tài)參數(shù)、靜態(tài)參數(shù)、session級(jí)別修改、全局修改、立即生效和延遲生效。作為數(shù)據(jù)庫mysql也同樣有這些特性,但是整體學(xué)起來后會(huì)發(fā)現(xiàn)mysql某些方面還是沒有oracle做的到位,在該文檔的最后咱們?cè)僮鰝€(gè)總結(jié)。
            一、參數(shù)文件
            1、查看參數(shù)文件
            通過命令行"mysql --help | grep my.cnf"查看my.cnf文件的位置,linux操作系統(tǒng)中參數(shù)文件默認(rèn)為/etc/my.cnf,按照mysql官方文檔的說明,mysql的啟動(dòng)參數(shù)文件的順序如下:
            1、查找根據(jù)順序查找全局 /etc/my.cnf  /etc/mysql/my.cnf  /SYSCONFDIR/my.cnf為全局選項(xiàng)
            2、$MYSQL_HOME/my.cnf為服務(wù)指定變量
            二、參數(shù)文件的修改
            1、動(dòng)態(tài)參數(shù)和靜態(tài)參數(shù)的概念
            Mysql 的參數(shù)類型:分為動(dòng)態(tài)(dynamic)和靜態(tài)參數(shù)(static);
            動(dòng)態(tài)參數(shù)意味著可以再mysql實(shí)例運(yùn)行中進(jìn)行更改;
            靜態(tài)參數(shù)說明在整個(gè)實(shí)例聲明周期內(nèi)都不得進(jìn)行更改,就好像是只讀的。
            在動(dòng)態(tài)參數(shù)中,有些參數(shù)修改可以是基于回話的也可以是基于整個(gè)實(shí)例的生命周期。
            2、全局變量與會(huì)話變量
            全局變量在MYSQL啟動(dòng)的時(shí)候由服務(wù)器自動(dòng)將它們初始化為默認(rèn)值。會(huì)話變量在每次建立一個(gè)新的連接的時(shí)候,由MYSQL來初始化。MYSQL會(huì)將當(dāng)前所有全局變量的值復(fù)制一份。來做為會(huì)話變量。(也就是說,如果在建立會(huì)話以后,沒有手動(dòng)更改過會(huì)話變量與全局變量的值,那所有這些變量的值都是一樣的。全局變量與會(huì)話變量的區(qū)別就在于,對(duì)全局變量的修改會(huì)影響到整個(gè)服務(wù)器,但是對(duì)會(huì)話變量的修改,只會(huì)影響到當(dāng)前的會(huì)話(也就是當(dāng)前的數(shù)據(jù)庫連接)
            3、參數(shù)的查看方式
            Mysql的參數(shù)可以通過"show variables"來查看,由于從mysql5.1版本開始,可以通過information_schema架構(gòu)下的GLOBAL_VARIABLES視圖來進(jìn)行查找,所以也可以這樣查看"select * from information_schema.global_variables";
            查看參數(shù)的腳本:
            語句一、
            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、參數(shù)的修改,參數(shù)的修改有以下幾種方法,作為學(xué)習(xí)、便于理解其中的原理所在,這里把幾種方法都整理出來了,歡迎各位的查看
            方法一、修改參數(shù)文件。所有的參數(shù)都保存在/etc/my.cnf文件中,所以直接修改該參數(shù)文件便可修改相應(yīng)的系統(tǒng)參數(shù)。
            弊端:修改該參數(shù)需要重啟后才能生效,當(dāng)系統(tǒng)上線后一般都不能隨便重啟,所以該方法很少用;
            操作方法:
            1、修改參數(shù)文件/etc/my.cnf,添加general_log_file = /data/mysql/mysql_2.logvi  /etc/my.cnf
          # 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服務(wù)
            service mysqld stop
            3、檢查參數(shù)是否生效
            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)
            當(dāng)前顯示已生效
            方法二、如果是動(dòng)態(tài)參數(shù)的話,便可以直接通過語句修改。
            (http://dev.mysql.com/doc/refman/5.6/en/dynamic-system-variables.html mysql的所有參數(shù)詳情介紹
            sql語法:
            SET variable_assignment [, variable_assignment] ...      //可以同時(shí)修改多個(gè)參數(shù)
            variable_assignment:
            user_var_name = expr
            | [GLOBAL | SESSION] system_var_name = expr
            | @@[global. | session.]system_var_name = expr
            例子:
            SET sort_buffer_size=10000;   /修改SESSION參數(shù)
            SET @@local.sort_buffer_size=10000;   /修改全局參數(shù)
            SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000;   /同時(shí)修改多個(gè)SESSION參數(shù)
            SET @@sort_buffer_size=1000000; /第二種修改全局參數(shù)的方法
            SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
            說明如下:
            1)修改SESSION的參數(shù)的影響:如果您使用SESSION(默認(rèn)情況)設(shè)置一個(gè)系統(tǒng)變量,則該值仍然有效,直到當(dāng)前會(huì)話結(jié)束為止,或者直到您把變量設(shè)置為一個(gè)不同的值為止。
            2)如果您使用GLOBAL(要求SUPER權(quán)限)來設(shè)置一個(gè)系統(tǒng)變量,則該值被記住,并被用于新的連接,直到服務(wù)器重新啟動(dòng)為止。
            如果您想要進(jìn)行永久式變量設(shè)置,需要寫入到參數(shù)文件。(通過SET命令并不會(huì)修改參數(shù)文件的內(nèi)容,還需要另行修改,這點(diǎn)做的沒有ORACLE好)
            3)為了防止不正確的使用,如果您使用SET GLOBAL時(shí)同時(shí)使用了一個(gè)只能與SET SESSION同時(shí)使用的變量,或者如果您在設(shè)置一個(gè)全局變量時(shí)未指定GLOBAL(或@@),則MySQL會(huì)產(chǎn)生一個(gè)錯(cuò)誤。( SET GLOBAL命令修改SESSION參數(shù)的時(shí)候會(huì)報(bào)錯(cuò))
            4)如果您想要把一個(gè)SESSION變量設(shè)置為GLOBAL值或把一個(gè)GLOBAL值設(shè)置為內(nèi)部MySQL默認(rèn)值,需使用DEFAULT關(guān)鍵詞。例如,在把max_join_size會(huì)話值設(shè)置為全局值時(shí),以下兩個(gè)語句是一樣的:SET max_join_size=DEFAULT;(恢復(fù)成默認(rèn)值的設(shè)置)
            總結(jié):1、mysql的參數(shù)設(shè)置相對(duì)oracle來說較為簡單。
            2、針對(duì)參數(shù)設(shè)置的方法本身沒有太多經(jīng)驗(yàn),作為一個(gè)DBA不管是修改oracle參數(shù)、或mysql參數(shù),建議每個(gè)數(shù)據(jù)庫都有一個(gè)文檔用于記錄參數(shù)修改的歷史,這樣哪臺(tái)出現(xiàn)了問題,便于跟蹤;

          posted on 2014-09-03 11:54 順其自然EVO 閱讀(307) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 浙江省| 洪湖市| 九寨沟县| 平阴县| 连城县| 徐州市| 高清| 宁国市| 育儿| 昌黎县| 岢岚县| 平潭县| 咸丰县| 潮安县| 息烽县| 嘉禾县| 习水县| 宁远县| 泗洪县| 东台市| 万全县| 皋兰县| 安乡县| 交口县| 阿坝县| 通城县| 武强县| 富顺县| 安国市| 昆山市| 子长县| 阳城县| 赣州市| 隆子县| 安阳县| 惠来县| 江津市| 弥渡县| 大理市| 临桂县| 工布江达县|