qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          深入理解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.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服務
            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參數,建議每個數據庫都有一個文檔用于記錄參數修改的歷史,這樣哪臺出現了問題,便于跟蹤;

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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 牡丹江市| 井陉县| 游戏| 阿拉善右旗| 高要市| 平遥县| 辰溪县| 康保县| 三门峡市| 和林格尔县| 金川县| 沽源县| 方山县| 垦利县| 定陶县| 新野县| 涟源市| 德安县| 利津县| 宁波市| 彰武县| 阿鲁科尔沁旗| 聊城市| 青浦区| 府谷县| 泗阳县| 黎平县| 治县。| 营口市| 南部县| 朔州市| 石首市| 本溪| 浦城县| 开阳县| 平谷区| 上杭县| 东平县| 梁平县| 玉溪市| 修文县|