MYSQL-服務器選項和服務器變量

MySQL中的系統數據庫

mysql數據庫

是mysql的核心數據庫,類似於Sql Server中的master庫,主要負責存儲數據庫的用戶、權限設置、關鍵字等mysql自己需要使用的控制和管理信息

performance_schema數據庫

MySQL 5.5開始新增的數據庫,主要用於收集數據庫服務器性能參數,庫裏表的存儲引擎均爲PERFORMANCE_SCHEMA,用戶不能創建存儲引擎爲PERFORMANCE_SCHEMA的表

information_schema數據庫

MySQL 5.0之後產生的,一個虛擬數據庫,物理上並不存在information_schema數據庫類似與“數據字典”,提供了訪問數據庫元數據的方式,即數據的數據。比如數據庫名或表名,列類型,訪問權限(更加細化的訪問方式)
MySQL5.1版本上,只有information_schema系統數據庫

總結:

    在數據庫備份的時候,我們只關心用戶數據和mysql數據庫
    在mysql數據庫運行的時候,實際上就是跑了一個mysqld進程,有mysqld_safe調用了mysqld,而mysqld是個服務器軟件,它支持一些參數

mysqld選項,服務器系統變量和服務器狀態變量

官方手冊:

https://dev.mysql.com/doc/refman/5.7/en/mysqld-option-tables.html
https://mariadb.com/kb/en/library/full-list-of-mariadb-options-system-and-status-variables/

注意:

其中有些參數支持運行時修改,會立即生效;有些參數不支持,且只能通過修改配置文件,並重啓服務器程序生效;有些參數作用域是全局的,且不可改變;有些可以爲每個用戶提供單獨(會話)的設置
選項是橫線,變量是下劃線

獲取mysqld的可用選項列表:

mysqld --help --verbose
mysqld --print-defaults 獲取默認設置

設置服務器選項方法:

在命令行中設置
shell> ./mysqld_safe --skip-name-resolve=1

在配置文件my.cnf中設置

skip_name_resolve=1

在數據庫中使用以下命令查看所有變量

show variables; 查不到的變量就是選項

服務器系統變量:分全局和會話兩種

獲取系統變量

mysql> SHOW GLOBAL VARIABLES;
mysql> SHOW [SESSION] VARIABLES;
mysql> SELECT @@VARIABLES;

修改服務器變量的值:

mysql> help SET

修改全局變量:僅對修改後新創建的會話有效;對已經建立的會話無效

mysql> SET GLOBAL system_var_name=value;
mysql> SET @@global.system_var_name=value;

修改會話變量:

mysql> SET [SESSION] system_var_name=value;
mysql> SET @@[session.]system_var_name=value;

系統的狀態變量:只讀變量

MariaDB [(none)]> show status like 'uptime'; 顯示mysql啓動的時間
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Uptime | 665 |
+---------------+-------+

服務器狀態變量:

分全局和會話兩種

狀態變量(只讀):用於保存mysqld運行中的統計數據的變量,不可更改

mysql> SHOW GLOBAL STATUS;
mysql> SHOW [SESSION] STATUS;

示例:

修改mysql最大連接數

1、顯示max_connections變量
show variables 'max_connections';
2、修改該變量,由於這個變量是一個全局變量,所以要加上global
set global max_connections=1000;
3、再次查看變量
show variables 'max_connections';

查看系統的狀態變量

1、查看線程的狀態信息

show status like 'threads%'
MariaDB [(none)]> show status like 'threads%';

+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 0 |
| Threads_connected | 1 |
| Threads_created | 1 |
| Threads_running | 1 |
+-------------------+-------+
2、當前系統的查詢次數
show status like 'com_select';
3、隨着每次查詢主鍵遞增
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Com_select | 1 |
+---------------+-------+

服務器變量 SQL_MODE

SQL_MODE:
對其設置可以完成一些約束檢查的工作,可分別進行全局的設置或當前會話的設置,參看:https://mariadb.com/kb/en/library/sql-mode/

常見MODE:

NO_AUTO_CREATE_USER 禁止GRANT創建密碼爲空的用戶
NO_ZERO_DATE 在嚴格模式,不允許使用‘0000-00-00’的時間
ONLY_FULL_GROUP_BY 對於GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現,那麼將認爲這個SQL是不合法的
NO_BACKSLASH_ESCAPES 反斜槓“\”作爲普通字符而非轉義字符
PIPES_AS_CONCAT 將"||"視爲連接操作符而非“或運算符”

示例:

將sql_mode設置爲嚴格模式

1、查看當前SQL_MODE當前的值
show variables like 'sql_mode';
2、創建一個表
create table db1 (id int,name char(3));
3、添加信息
insert db1 values(1,'aaaa');
4、查看警報信息
提示name字段長度超長
這似乎不太好,我們可以超長就認爲錯誤,設置變量
嚴格模式,當創建或添加超過數據長度,不會給出警告,直接給出錯誤

set sql_mode='TRADITIONAL';  在這裏設置的會話級別的變量
set global sql_mode='TRADITIONAL';   設置的是全局變量,每個會話都會生效

當然,這設置變量只會在本次啓動的時候生效,在下次啓動的時候就會失效,我們可寫入到配置文件中

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