mysql關於variable的總結

lusklusklusk發表於2018-09-29

總結

1、MySQL的my.cnf檔案類似Oracle的引數檔案,可以把它理解成oracle的pfile靜態引數檔案

2、MySQL可以使用set命令動態的修改變數,修改session變數只對當前會話產生影響;修改global變數,對所有新會話的global變數、session變數(特殊情況除外,比如wait_timeout變數)產生影響

3、set命令修改的變數不會寫入my.cnf檔案,DB重啟的話之前set修改的變數就失效了,想要永久生效,就把變數寫入到my.cnf檔案

4、只讀變數,不能使用set修改,只能透過修改my.cnf檔案再重啟生效

5、全域性(GLOBAL)級變數對整個MySQL伺服器有效;會話(SESSION)級變數隻影響當前會話。有些變數同時擁有這兩個級別,MySQL將在建立連線時用全域性級變數初始化會話級變數,但一旦連線建立之後,全域性級變數的改變不會影響到會話級變數

6、可以把全域性(GLOBAL)級變數理解成oracle的system引數,會話(SESSION)級變數理解成oracle的session引數

7、mysql沒有類似oracle的create pfile from memory儲存所有記憶體的中引數值的功能,mysql如果要儲存所有修改的引數但是沒有寫入my.cnf的方法,就是select * from INFORMATION_SCHEMA.GLOBAL_VARIABLES查詢出來並儲存


檢視系統變數的值

方法1

mysql> show variables like '%wait_timeout%';  

mysql> show global variables like '%wait_timeout%'; 

mysql> show session variables like '%wait_timeout%'; 

注意:show variables優先顯示會話級變數的值,如果這個值不存在,則顯示全域性級變數的值,當然你也可以加上SESSION關鍵字區別

方法2

mysql> set global show_compatibility_56=on;

mysql> select * from INFORMATION_SCHEMA.GLOBAL_VARIABLES where variable_name like '%wait_timeout%'

mysql> select * from INFORMATION_SCHEMA.SESSION_VARIABLES where variable_name like '%wait_timeout%'


修改系統變數的值

mysql> set wait_timeout = xxx;

mysql> set global wait_timeout = yyy;



只讀系統標量,不能使用set修改

mysql> show variables like 'log_bin';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | ON    |

+---------------+-------+

1 row in set (0.00 sec)

mysql> set log_bin=off;

ERROR 1238 (HY000): Variable 'log_bin' is a read only variable



只有全域性變數,沒有會話變數

全域性變數修改的時候,其他新開會話的會話變數和全域性變數都是修改後的值

會話1

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

mysql> set server_id=2;

ERROR 1229 (HY000): Variable 'server_id' is a GLOBAL variable and should be set with SET GLOBAL

mysql> set GLOBAL server_id=2;

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

mysql> show global variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

開啟另一個會話

全域性變數修改的時候,其他新開會話的會話變數和全域性變數都是修改後的值

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

mysql> show global variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+



有全域性變數,也有會話變數

會話變數修改的時候,不影響本身的全域性變數,也不影響其他新開會話的會話變數和全域性變數

全域性變數修改的時候,其他新開會話的會話變數和全域性變數都是修改後的值

會話1

mysql> show variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 131072 |

+------------------+--------+

mysql> show global variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 131072 |

+------------------+--------+

mysql> set read_buffer_size=212992;

mysql> show variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 212992 |

+------------------+--------+

mysql> show global variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 131072 |

+------------------+--------+

開啟另一個會話2

會話變數修改的時候,不影響本身的全域性變數,也不影響其他新開會話的會話變數和全域性變數

mysql> show variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 131072 |

+------------------+--------+

mysql> show global variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 131072 |

+------------------+--------+

會話1繼續如下

mysql> set global read_buffer_size=16384;

mysql> show variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 212992 |

+------------------+--------+

mysql> show global variables like 'read_buffer_size';

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| read_buffer_size | 16384 |

+------------------+-------+

開啟另一個會話3

全域性變數修改的時候,其他新開會話的會話變數和全域性變數都是修改後的值

mysql> show variables like 'read_buffer_size';

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| read_buffer_size | 16384 |

+------------------+-------+

mysql> show global variables like 'read_buffer_size';

+------------------+-------+

| Variable_name    | Value |

+------------------+-------+

| read_buffer_size | 16384 |

+------------------+-------+



重啟之後

重啟之後,所有的set修改的變數值都不在了,回到了初始值

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

mysql> show global variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

mysql> show variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 131072 |

+------------------+--------+

mysql> show global variables like 'read_buffer_size';

+------------------+--------+

| Variable_name    | Value  |

+------------------+--------+

| read_buffer_size | 131072 |

+------------------+--------+

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2215282/,如需轉載,請註明出處,否則將追究法律責任。

相關文章