您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“MySQL如何配置服務(wù)器”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“MySQL如何配置服務(wù)器”這篇文章吧。
1. 服務(wù)器配置
1.1. MySQL 配置選項(xiàng)
在調(diào)用服務(wù)器(或客戶機(jī))時(shí)可以在命令行上指定啟動(dòng)選項(xiàng),也可以在配置文件中指定啟動(dòng)選項(xiàng)。 MySQL 客戶機(jī)程序會(huì)在啟動(dòng)時(shí)查找配置文件,并使用相應(yīng)的選項(xiàng)。
默認(rèn)情況下,服務(wù)器在運(yùn)行時(shí)使用其配置變量的預(yù)編譯值。但是,如果默認(rèn)值不適合環(huán)境,則可添加運(yùn)行時(shí)選項(xiàng),讓服務(wù)器使用其他值來(lái)執(zhí)行以下操作:
? 指定重要的目錄和文件的位置
? 控制服務(wù)器寫入的日志文件
? 覆蓋服務(wù)器與性能相關(guān)的變量的內(nèi)置值(即,控制最大同時(shí)連接數(shù)以及緩沖區(qū)和高速緩存的大?。?/p>
? 在服務(wù)器啟動(dòng)時(shí)啟用或禁用預(yù)編譯的存儲(chǔ)引擎
通過(guò)使用命令行選項(xiàng)或配置文件,或者使用兩者的組合,可以指定服務(wù)器啟動(dòng)時(shí)的運(yùn)行時(shí)選項(xiàng)(以更改其配置和行為)。命令行選項(xiàng)優(yōu)先于配置文件中的任何設(shè)置。要了解服務(wù)器支持的選項(xiàng),請(qǐng)?jiān)? shell 提示符下執(zhí)行以下命令:
mysqld --verbose --help
注: 上述命令提供信息。該命令不會(huì)啟動(dòng) MySQL 服務(wù)器。
1) 使用配置文件的原因?
通過(guò)命令行調(diào)用服務(wù)器時(shí),可以指定 --help 選項(xiàng)列出的任何服務(wù)器選項(xiàng)。但是,將它們?cè)谂渲梦募辛谐鰰?huì)更有用,原因如下:
A. 將選項(xiàng)放在文件中后,不需要每次啟動(dòng)服務(wù)器時(shí)都在命令行上指定選項(xiàng)。對(duì)于復(fù)雜的選項(xiàng)(如用于配置 InnoDB 表空間的選項(xiàng)),這樣做更加方便,并且更不容易出錯(cuò)。
B. 如果所有服務(wù)器選項(xiàng)都在一個(gè)配置文件中,則可概覽服務(wù)器的配置情況。
MySQL 程序可以訪問(wèn)多個(gè)配置文件中的選項(xiàng)。程序會(huì)查找每個(gè)標(biāo)準(zhǔn)配置文件,并讀取任何存在的配置文件。未發(fā)現(xiàn)指定文件時(shí),不會(huì)發(fā)生錯(cuò)誤。
要使用某個(gè)配置文件,可使用編輯器以純文本文件形式創(chuàng)建該文件。要?jiǎng)?chuàng)建或修改某個(gè)配置文件,必須擁有該文件的寫入權(quán)限??蛻魴C(jī)程序僅需要讀取訪問(wèn)權(quán)限。
2) 配置文件組
配置文件中的選項(xiàng)按組進(jìn)行組織,每個(gè)組前面有一個(gè)為組命名的 [group-name] 行。通常,組名稱是選項(xiàng)組適用的程序的類別或名稱。選項(xiàng)組示例包括:
[client]:用于指定適用于所有客戶機(jī)程序的選項(xiàng)。 [client] 組的一個(gè)常見(jiàn)用途是指定連接參數(shù),因?yàn)樵谝话闱闆r下,不管使用什么客戶機(jī)程序,都要建立到同一個(gè)服務(wù)器的連接。
[mysql] 和 [mysqldump]:分別用于指定適用于 mysql 和 mysqldump 客戶機(jī)的選項(xiàng)。此外,也可以單獨(dú)指定其他客戶機(jī)選項(xiàng)。
[server]:用于指定同時(shí)適用于 mysqld 和 mysqld_safe 服務(wù)器程序的選項(xiàng)。
[mysqld]、 [mysqld-5.6] 和 [mysqld_safe]:用于指定適用于不同服務(wù)器版本或啟動(dòng)方法的選項(xiàng)。
3) 編寫配置文件
配置文件中組的簡(jiǎn)短示例:
[client]
host = myhost.example.com
compress
[mysql]
show-warnings
要?jiǎng)?chuàng)建或修改某個(gè)配置文件,最終用戶必須擁有該文件的寫入權(quán)限。服務(wù)器本身僅需要讀取訪問(wèn)權(quán)限;服務(wù)器讀取配置文件,但不創(chuàng)建或修改配置文件。在配置文件中寫入一個(gè)選項(xiàng):
使用長(zhǎng)選項(xiàng)格式(像命令行上使用的那樣),但省略前導(dǎo)短劃線。
如果某個(gè)選項(xiàng)取值,則允許在等號(hào)兩則加空格 ( = )。此規(guī)則不適用于在命令行上指定的選項(xiàng)。
示例中,請(qǐng)注意以下方面:
[client]:此組中的選項(xiàng)適用于所有標(biāo)準(zhǔn)客戶機(jī)。
- host:指定服務(wù)器主機(jī)名
- compress:指示客戶機(jī)/服務(wù)器協(xié)議對(duì)通過(guò)網(wǎng)絡(luò)發(fā)送的通信使用壓縮
[mysql]:此組中的選項(xiàng)僅適用于 mysql 客戶機(jī)。
- show-warnings:指示 MySQL 在每條語(yǔ)句后顯示任何當(dāng)前警告
mysql 客戶機(jī)同時(shí)使用 [client] 和 [mysql] 組中的選項(xiàng),因此將使用顯示的全部三個(gè)選項(xiàng)。
4) 配置文件位置
MySQL 服務(wù)器會(huì)在標(biāo)準(zhǔn)位置中查找文件。Linux 和 Windows 的標(biāo)準(zhǔn)文件不同,在 Linux 中,使用 my.cnf 文件。在 Windows 中,使用 my.ini 文件。
可以使用以下選項(xiàng)查看配置文件查找位置和組:
shell> mysql --help
標(biāo)準(zhǔn)配置文件如下:
Linux: 文件 /etc/my.cnf 用作所有用戶都使用的全局配置文件。可以在用戶的主目錄中創(chuàng)建特定于用戶的配置文件 .my.cnf。如果設(shè)置了 MYSQL_HOME 環(huán)境變量,則將搜索 $MYSQL_HOME/my.cnf 文件。
Windows: 程序按以下順序查找配置文件: Windows C:\ 目錄下的 my.ini 和my.cnf,然后是 C:\Windows(或 C:\WinNT)目錄。但是,因?yàn)? Windows 安裝向?qū)⑴渲梦募旁谀夸汣:\Program Files\MySQL\MySQL Server <version number> 中,因此在Windows 中,服務(wù)器還會(huì)搜索此目錄。
MySQL 命令行程序會(huì)在 MySQL 安裝目錄中搜索配置文件。
5) 配置文件中的啟動(dòng)選項(xiàng)
要在配置文件中指定服務(wù)器選項(xiàng),請(qǐng)?jiān)? [mysqld] 或 [server] 組下指示特定選項(xiàng)。
日志記錄: 可以通過(guò)啟用所需日志的類型為服務(wù)器啟用日志記錄。以下選項(xiàng)可啟用常規(guī)查詢?nèi)罩?、二進(jìn)制日志和慢速查詢?nèi)罩荆?/p>
general_log
log-bin
slow_query_log
默認(rèn)存儲(chǔ)引擎: 可以使用 --default-storage-engine 選項(xiàng)指定不同于 InnoDB的默認(rèn)存儲(chǔ)引擎。
系統(tǒng)變量: 可以通過(guò)設(shè)置服務(wù)器系統(tǒng)變量值來(lái)定制服務(wù)器。例如,要增加允許的最大連接數(shù),并增加 InnoDB 緩沖池?cái)?shù)的默認(rèn)值,可設(shè)置以下變量:
max_connections=200
innodb_buffer_pool_instances=4
共享內(nèi)存: 在 Windows 上默認(rèn)不啟用??梢允褂? shared-memory 選項(xiàng)來(lái)啟用命名管道支持。
命名管道: 要啟用命名管道支持,請(qǐng)使用 enable-named-pipe 選項(xiàng)。
6) 樣例配置文件
MySQL 安裝提供了一個(gè)樣例配置文件:my-default.cnf。Linux對(duì)于 RPM 安裝,樣例配置文件在 /usr/share/mysql 中;對(duì)于 TAR 文件安裝,樣例文件在 MySQL 安裝目錄下的 share 目錄中。Windows: 配置文件位于 MySQL 安裝目錄 (my.ini) 中。
安裝過(guò)程將此文件復(fù)制到 /etc/my.cnf。如果已存在該文件,則將其復(fù)制到 /etc/my-new.cnf。在該文件中指定新選項(xiàng)可替換、添加或忽略標(biāo)準(zhǔn)選項(xiàng)。必須是命令行上的第一個(gè)選項(xiàng):
--defaults-file=<file_name>
--defaults-extra-file=<file_name>
--no-defaults
在更改任何默認(rèn)選項(xiàng)之前,請(qǐng)確保充分了解相應(yīng)選項(xiàng)對(duì)服務(wù)器操作的影響。例如,有些設(shè)置會(huì)啟用特定的日志文件,或者會(huì)改變內(nèi)存緩沖區(qū)的大小。
--defaults-file=<file_name>:使用指定位置的配置文件。
--defaults-extra-file=<file_name>:使用指定位置的其他配置文件。
--no-defaults:忽略所有配置文件。
例如,要僅使用 /etc/my-opts.cnf 文件而忽略標(biāo)準(zhǔn)配置文件,可以像下面這樣調(diào)用程序:
shell> mysql --defaults-file=/etc/my-opts.cnf
如果多次指定一個(gè)選項(xiàng)(不管是在同一個(gè)配置文件中,還是在多個(gè)配置文件中),則最后出現(xiàn)的選項(xiàng)值優(yōu)先。
有關(guān)使用配置文件的更多信息,請(qǐng)參閱《MySQL 參考手冊(cè)》:
http://dev.mysql.com/doc/refman/5.6/en/option-files.html。
7) 顯示配置文件中的選項(xiàng)
通過(guò)使用 --print-defaults 選項(xiàng)執(zhí)行 mysql 客戶機(jī)或者使用 my_print_defaults實(shí)用程序,可以查看讀取特定選項(xiàng)組的程序所使用的選項(xiàng)。輸出由各種選項(xiàng)組成,每個(gè)選項(xiàng)占一行,其形式與命令行上指定選項(xiàng)時(shí)相同。此輸出會(huì)因?yàn)榕渲梦募O(shè)置而有差異。
my_print_defaults 接受以下選項(xiàng):
--help, -?:顯示幫助信息并退出。
--config-file=<file_name>、 --defaults-file=<file_name>、
-c <file_name>:僅讀取指定的配置文件。
--debug=<debug_options>、 -# <debug_options>:寫入調(diào)試日志。
--defaults-extra-file=<file_name>、 --extra-file=<file_name>、-e <file_name>:在全局配置文件之后,但在用戶配置文件之前(在 Linux 上),讀取此配置文件。
--defaults-group-suffix=<suffix>、 -g <suffix>:讀取具有此后綴的組。
--no-defaults、 -n:返回一個(gè)空字符串。
--verbose、 -v:詳細(xì)模式。輸出有關(guān)程序行為的更多信息。
--version、 -V: 顯示版本信息并退出。
通過(guò)命令行按組顯示選項(xiàng)。[mysql] 和 [client] 組示例:
shell> my_print_defaults mysql client
--user=myusername
--password=secret
--host=localhost
--port=3306
--character-set-server=latin1
或者(對(duì)于相同的輸出):
mysql --print-defaults mysql client
8) 遮蔽驗(yàn)證選項(xiàng)
建議不要使用 mysql -uroot -poracle 形式在命令行上指定口令。為方便起見(jiàn),可以將口令放在 [client] 選項(xiàng)組中,但口令以純文本方式存儲(chǔ),對(duì)配置文件有讀取訪問(wèn)權(quán)限的任何人都能輕易地看到。利用 mysql_config_editor 實(shí)用程序,可以將驗(yàn)證憑證存儲(chǔ)在加密的登錄文件.mylogin.cnf 中。在 Linux 和 UNIX 上,該文件位置是當(dāng)前用戶的主目錄,在Windows 上是 %APPDATA%\MySQL 目錄。MySQL 客戶機(jī)程序以后可以讀取該文件以獲取用于連接到 MySQL 服務(wù)器的驗(yàn)證憑證。加密方法是可逆的,因此不應(yīng)假設(shè)憑證對(duì)任何有文件讀取權(quán)限的人都是安全的。相反,該功能使得避免使用純文本憑證變得更容易。
.mylogin.cnf 登錄文件的未加密格式由選項(xiàng)組組成,類似于其他配置文件。.mylogin.cnf 中的每個(gè)選項(xiàng)組稱為“登錄路徑” ,僅允許一組有限的選項(xiàng):主機(jī)、用戶和口令??蓪⒌卿浡窂揭暈橐唤M值,可以指示服務(wù)器主機(jī)以及用于服務(wù)器驗(yàn)證的憑證。
下面是一個(gè)示例:
[admin]
user = root
password = oracle
host = 127.0.0.1
shell>mysql --login-path=admin
9) 登錄路徑
創(chuàng)建登錄路徑:
mysql_config_editor --login-path=<login-path> --user=<user> --password --host=<hostname>
以純文本格式查看單個(gè)登錄路徑:
mysql_config_editor print --login-path=<login-path>
以純文本格式查看所有登錄路徑:
mysql_config_editor print --all
刪除登錄路徑:
mysql_config_editor remove --login-path=<login-path>
默認(rèn)登錄路徑名稱為 client,被所有標(biāo)準(zhǔn)客戶機(jī)讀取
如果調(diào)用 mysql_config_editor 時(shí)不使用 --login-path 選項(xiàng),則將使用[client] 登錄路徑。默認(rèn)情況下,所有標(biāo)準(zhǔn)客戶機(jī)都使用此登錄路徑。
例如,以下命令將創(chuàng)建一個(gè)所有標(biāo)準(zhǔn)客戶機(jī)都使用的 [client] 登錄路徑:
shell> mysql_config_editor set --user=root --password
Enter password: oracle
調(diào)用標(biāo)準(zhǔn)客戶機(jī)時(shí)不提供命令行參數(shù)或配置文件將導(dǎo)致讀取 .mylogin.cnf 文件中的[client] 登錄路徑以及任何配置文件中的 [client] 選項(xiàng)組。例如,以下輸出顯示了調(diào)用 mysql 客戶機(jī)而不提供任何選項(xiàng)的結(jié)果(已執(zhí)行前述命令):
shell> mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
...
1.2. 服務(wù)器系統(tǒng)變量
MySQL 服務(wù)器維護(hù)了許多服務(wù)器系統(tǒng)變量,這些變量可指示服務(wù)器的配置情況。在 shell下使用mysqld --verbose --help命令可以查看服務(wù)器根據(jù)其內(nèi)部編譯的默認(rèn)值使用的值,以及服務(wù)器讀取的任何配置文件,shell下使用mysqld --no-defaults --verbose --help命令可以查看服務(wù)器根據(jù)其內(nèi)部編譯的默認(rèn)值使用的值,忽略任何配置文件中的設(shè)置:
每個(gè)系統(tǒng)變量都有默認(rèn)值,通過(guò)執(zhí)行以下任一操作,可以在服務(wù)器啟動(dòng)時(shí)設(shè)置變量:在命令行上使用選項(xiàng)或者使用配置文件;系統(tǒng)變量值可以在表達(dá)式中引用,也可以查看服務(wù)器使用的系統(tǒng)變量值。
在 mysql 客戶機(jī)內(nèi)部,使用此命令可以僅查看變量值,沒(méi)有其他啟動(dòng)選項(xiàng):
SHOW GLOBAL VARIABLES;
有關(guān)服務(wù)器系統(tǒng)變量的更多信息,請(qǐng)參閱《MySQL 參考手冊(cè)》:
http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html。
1) 動(dòng)態(tài)系統(tǒng)變量
MySQL 維護(hù)了兩種包含系統(tǒng)變量的作用域。 GLOBAL 變量影響服務(wù)器的整體操作。SESSION 變量影響其對(duì)單個(gè)客戶機(jī)連接的操作。變量存在于任一作用域中,也可同時(shí)存在于兩個(gè)作用域中。
變量及其作用域的示例包括:
僅全局: key_buffer_size、 query_cache_size
全局和會(huì)話: sort_buffer_size、 max_join_size
僅會(huì)話: timestamp、 error_count
在更改變量值時(shí),適用以下幾點(diǎn):
設(shè)置會(huì)話變量不需要任何特殊權(quán)限,但客戶機(jī)只能更改自己的會(huì)話變量,不能更改其他任何客戶機(jī)的會(huì)話變量。
LOCAL 和 @@local 是 SESSION 和 @@session 的同義詞。
如果不指定 GLOBAL 或 SESSION,則當(dāng)會(huì)話變量存在時(shí), SET 將更改會(huì)話變量;會(huì)話變量不存在時(shí),將產(chǎn)生錯(cuò)誤。
2) 顯示動(dòng)態(tài)系統(tǒng)變量
列出所有可用變量及其值:
SHOW [GLOBAL|SESSION] VARIABLES;
列出特定的變量值:
mysql> SHOW VARIABLES LIKE 'bulk%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| bulk_insert_buffer_size | 8388608 |
+-------------------------+---------+
設(shè)置一個(gè)新值,然后列出:
mysql> SET bulk_insert_buffer_size=4000000;
mysql> SHOW VARIABLES LIKE 'bulk%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| bulk_insert_buffer_size | 4000000 |
+-------------------------+---------+
SHOW VARIABLE 會(huì)話示例使用 'bulk%' 查找用于設(shè)置插入緩沖區(qū)大小幻燈片中的變量,但是,可以使用整個(gè)變量名稱來(lái)輸入任何變量,也可輸入部分變量名稱和百分比符號(hào) (%) 通配符。
必須按如下方式設(shè)置特定的變量類型:
2 對(duì)具有字符串類型(如 CHAR 或 VARCHAR)的變量使用字符串值。
2 對(duì)具有數(shù)值類型(如 INT 或 DECIMAL)的變量使用數(shù)值。
2 將具有布爾(BOOL 或 BOOLEAN)類型的變量設(shè)置為 0、 1、 ON 或 OFF。(如果在命令行上或在配置文件中設(shè)置布爾變量,則使用數(shù)值。)
2 將枚舉類型的變量設(shè)置為可用的變量值之一,但也可將其設(shè)置為與所需枚舉值對(duì)應(yīng)的數(shù)字。對(duì)于枚舉的服務(wù)器變量,第一個(gè)枚舉值對(duì)應(yīng)于 0。這不同于 ENUM 列,后者的第一個(gè)枚舉值對(duì)應(yīng)于 1。
有關(guān)動(dòng)態(tài)服務(wù)器變量的更多信息,請(qǐng)參閱《MySQL 參考手冊(cè)》:
http://dev.mysql.com/doc/refman/5.6/en/dynamic-system-variables.html。
3) 結(jié)構(gòu)化系統(tǒng)變量
MySQL 支持一種結(jié)構(gòu)化變量類型,該變量類型可以指定控制key buffer操作的參數(shù)。key buffer結(jié)構(gòu)化變量具有以下組件:
key_buffer_size
key_cache_block_size
key_cache_division_limit
key_cache_age_threshold
要引用結(jié)構(gòu)化變量實(shí)例的組件,可使用復(fù)合名稱:
instance_name.component_name format
示例:
hot_cache.key_buffer_size
hot_cache.key_cache_block_size
cold_cache.key_cache_block_size
有關(guān)結(jié)構(gòu)化系統(tǒng)變量的更多信息,請(qǐng)參閱《MySQL 參考手冊(cè)》:
http://dev.mysql.com/doc/refman/5.6/en/structured-system-variables.html。
4) 服務(wù)器狀態(tài)變量
使用 SHOW STATUS 語(yǔ)句評(píng)估系統(tǒng)運(yùn)行狀況。
從兩種類別中選擇(類似于動(dòng)態(tài)變量):
LOCAL 是 SESSION 的同義詞。如果沒(méi)有修飾符,則默認(rèn)值為 SESSION。
mysql> SHOW GLOBAL STATUS;
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Binlog_cache_disk_use | 0 |
| Bytes_received | 169 |
| Bytes_sent | 331 |
| Com_admin_commands | 0 |
...
有些狀態(tài)變量只有一個(gè)全局值。對(duì)于這些狀態(tài)變量, GLOBAL 和 SESSION 的值是相同的。
有關(guān)服務(wù)器狀態(tài)變量的更多信息,請(qǐng)參閱《MySQL 參考手冊(cè)》:
http://dev.mysql.com/doc/refman/5.6/en/server-status-variables.html。
1.3. SQL 模式
通過(guò)設(shè)置 SQL 模式配置多種服務(wù)器操作特征,指定 MySQL 對(duì)接受輸入數(shù)據(jù)的寬容度,設(shè)置與其他數(shù)據(jù)庫(kù)系統(tǒng)的兼容性,控制查詢處理(啟用或禁用與 SQL 符合性相關(guān)的行為),覆蓋 SQL 的“空” 默認(rèn)模式(空模式不啟用限制或符合性行為)。
SQL 模式由控制查詢處理某些方面的可選值組成。設(shè)置了相應(yīng)的 SQL 模式后,客戶機(jī)就可以對(duì)以下項(xiàng)目進(jìn)行某種程度的控制:
2 輸入數(shù)據(jù): SQL 模式可用于指示服務(wù)器對(duì)接受輸入數(shù)據(jù)的寬容度。
2 標(biāo)準(zhǔn) SQL 符合性: SQL 模式可用于啟用或禁用與標(biāo)準(zhǔn) SQL 符合性相關(guān)的行為。
2 兼容性: SQL 模式可用于改進(jìn)與其他數(shù)據(jù)庫(kù)系統(tǒng)的兼容性。
默認(rèn)的 SQL 模式為 NO_ENGINE_SUBSTITUTION,默認(rèn)的配置文件會(huì)添加 STRICT_TRANS_TABLES。
1) 設(shè)置 SQL 模式
2 通過(guò)命令行在啟動(dòng)時(shí)設(shè)置:
shell> mysqld --sql-mode=<mode_value>
2 在配置文件內(nèi)設(shè)置:
[mysqld]
sql-mode=IGNORE_SPACE
2 SET 語(yǔ)句
在 mysql 中,在啟動(dòng)之后:
SET [SESSION|GLOBAL] sql_mode=<mode_value>
示例:
使用單個(gè)模式值設(shè)置 SQL 模式:
SET sql_mode = ANSI_QUOTES;
SET sql_mode = 'TRADITIONAL';
使用多個(gè)模式名稱設(shè)置 SQL 模式:
sql_mode = 'IGNORE_SPACE,ANSI_QUOTES,NO_ENGINE_SUBSTITUTION';
使用 SELECT 語(yǔ)句檢查當(dāng)前的 sql_mode 設(shè)置:
SELECT @@sql_mode;
清除當(dāng)前 SQL 模式:
SET sql_mode=''
單個(gè)客戶機(jī)可按自己的要求配置 SQL 模式,但也可使用 --sql-mode 選項(xiàng)設(shè)置服務(wù)器啟動(dòng)時(shí)的默認(rèn) SQL 模式。如果服務(wù)器的運(yùn)行模式對(duì)接受無(wú)效數(shù)據(jù)或創(chuàng)建 MySQL 用戶帳戶比較慎重,則可能需要執(zhí)行此操作。
如果沒(méi)有修飾符,則 SET 將更改會(huì)話 SQL 模式。調(diào)用 SET 語(yǔ)句時(shí)可以帶一個(gè)空字符串,也可以帶一個(gè)或多個(gè)模式名稱(用逗號(hào)分隔)。如果值為空或者包含多個(gè)模式名稱,則必須將值放在引號(hào)中。如果值包含一個(gè)模式名稱,則引號(hào)可有可無(wú)。 SQL 模式值不區(qū)分大小寫。
2) 常用 SQL 模式
STRICT_TRANS_TABLES、 STRICT_ALL_TABLES:沒(méi)有這些模式, MySQL 將接受缺少、超出范圍或格式不正確的值。啟用 STRICT_TRANS_TABLES 時(shí)將為事務(wù)表設(shè)置“嚴(yán)格模式” ;也可在默認(rèn)的 my.cnf 文件中啟用。啟用STRICT_ALL_TABLES 時(shí)將為所有表設(shè)置嚴(yán)格模式。
TRADITIONAL:啟用此 SQL 模式可對(duì)輸入數(shù)據(jù)值施加類似于其他數(shù)據(jù)庫(kù)服務(wù)器的限制。在此模式下,使用 GRANT 語(yǔ)句可創(chuàng)建要求指定口令的用戶。
IGNORE_SPACE:默認(rèn)情況下,必須調(diào)用函數(shù)名稱與后接括號(hào)間沒(méi)有空格的函數(shù)。啟用此模式后,允許存在此類空格,并使函數(shù)名稱成為保留字。
ERROR_FOR_DIVISION_BY_ZERO:默認(rèn)情況下,除數(shù)為零時(shí)將產(chǎn)生結(jié)果 NULL。在啟用此模式的情況下插入數(shù)據(jù)時(shí),除數(shù)為零將導(dǎo)致出現(xiàn)警告,在嚴(yán)格模式下將出現(xiàn)錯(cuò)誤。
ANSI:使用此組合模式將使 MySQL 服務(wù)器變得更加“類似于 ANSI”。即,此模式支持的行為更像標(biāo)準(zhǔn) SQL,如 ANSI_QUOTES 和 PIPES_AS_CONCAT。
NO_ENGINE_SUBSTITUTION:如果在創(chuàng)建或更改表時(shí)指定了不可用的存儲(chǔ)引擎,除非啟用了此模式,否則 MySQL 將替換默認(rèn)存儲(chǔ)引擎。這是默認(rèn)的 SQL 模式。
1.4. 日志文件
MySQL 用不同的日志文件來(lái)記錄服務(wù)器活動(dòng),記錄有關(guān)服務(wù)器執(zhí)行的 SQL 語(yǔ)句的信息:
2 錯(cuò)誤日志: 與啟動(dòng)、關(guān)閉和異常情況有關(guān)的診斷信息
2 常規(guī)查詢?nèi)罩荆? 服務(wù)器從客戶機(jī)收到的所有語(yǔ)句
2 慢速查詢?nèi)罩荆? 需要長(zhǎng)時(shí)間執(zhí)行的查詢
2 二進(jìn)制日志: 修改數(shù)據(jù)的語(yǔ)句
2 審計(jì)日志: 企業(yè)版基于策略的審計(jì)
這些日志可用于評(píng)估服務(wù)器的操作狀態(tài)、用于崩潰后的數(shù)據(jù)恢復(fù)、用于復(fù)制、用于幫助確定運(yùn)行速度慢的查詢以及用于安全和法規(guī)遵從性。在默認(rèn)情況下,這些日志都未啟用(Windows 中的錯(cuò)誤日志除外)。必須了解的是,日志文件(特別是常規(guī)查詢?nèi)罩荆┑拇笮】赡軙?huì)增長(zhǎng)到相當(dāng)大。
有關(guān)日志文件的更多信息,請(qǐng)參閱《MySQL 參考手冊(cè)》:
http://dev.mysql.com/doc/refman/5.6/en/server-logs.html 和
http://dev.mysql.com/doc/refman/5.6/en/mysql-enterprise-audit.html
1) 日志文件用法列表
服務(wù)器在數(shù)據(jù)目錄中創(chuàng)建所有日志文件;在未設(shè)置其他路徑名的情況下,服務(wù)器會(huì)將文件名設(shè)置為當(dāng)前主機(jī)名。通過(guò)在啟動(dòng)服務(wù)器時(shí)使用對(duì)應(yīng)的選項(xiàng)(在命令行上,或者配置文件中(不帶前綴 --)),可以啟用這些日志文件。
錯(cuò)誤日志: 設(shè)置 --log-error=<file_name> 以將錯(cuò)誤記錄到指定文件中。mysqld_safe 腳本可創(chuàng)建錯(cuò)誤日志,并在啟動(dòng)服務(wù)器時(shí)將其輸出重定向到該錯(cuò)誤日志。
常規(guī)查詢?nèi)罩?/strong>: 設(shè)置 --general_log_file=<file_name> 以記錄查詢。全局的 general_log 和 general_log_file 服務(wù)器變量可提供對(duì)常規(guī)查詢?nèi)罩镜倪\(yùn)行時(shí)控制。將 general_log 設(shè)置為 0(或 OFF)禁用該日志,設(shè)置為 1(或ON)啟用該日志。
慢速查詢?nèi)罩?/strong>: 設(shè)置 --slow_query_log_file=<file_name> 以提供對(duì)慢速查詢?nèi)罩镜倪\(yùn)行時(shí)控制。將 slow_query_log 設(shè)置為 0 禁用該日志,設(shè)置為 1 啟用該日志。如果日志文件已打開(kāi),則將其關(guān)閉,然后打開(kāi)新文件。
二進(jìn)制日志: 設(shè)置 --log-bin 以啟用二進(jìn)制日志記錄。服務(wù)器使用該選項(xiàng)值作為基名;在創(chuàng)建新日志文件時(shí),在基名上添加一個(gè)升序數(shù)字后綴。這些日志文件以二進(jìn)制格式(而不是文本格式)存儲(chǔ)。
審計(jì)日志: 審計(jì)日志是作為企業(yè)版插件提供的;加載該日志后,可用于將事件記錄到audit_log_file 選項(xiàng)指定的文件中。審計(jì)過(guò)程會(huì)不斷寫入審計(jì)日志,直到將該插件刪除,或者通過(guò) audit_log_policy=NONE 選項(xiàng)設(shè)置關(guān)閉審計(jì)。在服務(wù)器啟動(dòng)時(shí)使用 audit_log=FORCE_PLUS_PERMANENT 作為選項(xiàng),可以防止刪除該插件。
2) 二進(jìn)制日志記錄
二進(jìn)制日志包含描述數(shù)據(jù)庫(kù)更改(如創(chuàng)建數(shù)據(jù)庫(kù)或更改表數(shù)據(jù))的“事件” 。二進(jìn)制日志還包含可能做出更改的語(yǔ)句的事件(例如,沒(méi)有匹配行的 DELETE)。該日志還包含有關(guān)每條更新語(yǔ)句所用時(shí)間的信息。二進(jìn)制日志有兩個(gè)重要用途:復(fù)制和數(shù)據(jù)恢復(fù)。
MySQL 使用日志傳送復(fù)制解決方案。使用日志傳送系統(tǒng)時(shí),可以將主系統(tǒng)上發(fā)生的所有數(shù)據(jù)更改存儲(chǔ)在二進(jìn)制日志中,然后通過(guò)從系統(tǒng)檢索這些數(shù)據(jù)更改,并根據(jù)接收到的這些日志文件執(zhí)行更改??梢詫?shí)時(shí)下載日志文件并執(zhí)行內(nèi)容;即,只要生成日志文件事件,就將其發(fā)送到連接的從系統(tǒng)供執(zhí)行。由于網(wǎng)絡(luò)傳播存在延遲,從系統(tǒng)可能需要幾秒到幾分鐘(最壞的情況)時(shí)間來(lái)接收更新。在理想的情況下,延遲會(huì)在一秒以內(nèi)。
發(fā)生以下事件之一時(shí),二進(jìn)制日志會(huì)輪轉(zhuǎn):
l 重新啟動(dòng) MySQL 服務(wù)器。
l 達(dá)到允許的最大大小 (max_binlog_size)。
l 發(fā)出了 FLUSH LOGS SQL 命令。
二進(jìn)制日志獨(dú)立于存儲(chǔ)引擎。不管使用的存儲(chǔ)引擎是哪個(gè)(即 InnoDB 或 MyISAM),MySQL 復(fù)制都會(huì)工作。
3) 二進(jìn)制日志記錄格式
基于語(yǔ)句的二進(jìn)制日志記錄:
l 包含實(shí)際 SQL 語(yǔ)句
l 包括 DDL(CREATE、 DROP 等)和 DML(UPDATE、 DELETE 等)語(yǔ)句
l 相對(duì)較小的文件保存磁盤空間和網(wǎng)絡(luò)帶寬
l 并非所有復(fù)制的語(yǔ)句都會(huì)在遠(yuǎn)程計(jì)算機(jī)上正確重放
l 要求主系統(tǒng)和從系統(tǒng)上復(fù)制的表和列完全相同(或者符合多個(gè)限制條件)
基于行的二進(jìn)制日志記錄:
l 指示對(duì)單個(gè)表行的影響情況
l 正確重放所有語(yǔ)句,即使對(duì)于在使用基于語(yǔ)句的日志記錄時(shí)未正確復(fù)制的功能導(dǎo)致的更改也是如此
按如下方式設(shè)置格式:
SET [GLOBAL|SESSION] BINLOG_FORMAT=[row|statement|mixed|default];
注: 使用 mixed 選項(xiàng)可讓 MySQL 選取最適合單個(gè)事件的格式。 MySQL 通常會(huì)使用基于語(yǔ)句的二進(jìn)制日志,但在需要時(shí)可恢復(fù)到基于行的復(fù)制。
4) 查詢二進(jìn)制日志文件
使用 SHOW BINARY LOGS 語(yǔ)句可完成以下任務(wù):
#列出當(dāng)前的日志文件和文件大小
mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000015 | 724935 |
| binlog.000016 | 733481 |
+---------------+-----------+
使用 SHOW MASTER STATUS 語(yǔ)句可完成以下任務(wù):
#顯示下一個(gè)事件的主狀態(tài)
mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000016 | 733481 | world_innodb | manual,mysql |
+---------------+----------+--------------+------------------+
語(yǔ)句以描述數(shù)據(jù)庫(kù)修改的“事件” 形式存儲(chǔ)在二進(jìn)制日志中。要確定事件,必須獲得二進(jìn)制日志文件名稱和字節(jié)偏移(即位置)。例如,日志文件 binlog.000016、位置733481 可確定幻燈片中的最后一個(gè)事件。
SHOW MASTER STATUS 命令需要 SUPER 或 REPLICATION CLIENT 權(quán)限。
5) 查看二進(jìn)制日志內(nèi)容
二進(jìn)制日志是無(wú)法使用普通文本查看器查看的,日志以緊湊二進(jìn)制格式存儲(chǔ)。使用 mysqlbinlog 實(shí)用程序可以將二進(jìn)制日志轉(zhuǎn)換成 SQL 文本格式,在標(biāo)準(zhǔn)輸出中查看數(shù)據(jù):
shell> mysqlbinlog host-bin.000001 host-bin.000002
也可以將輸出重定向到 more:
shell> mysqlbinlog host-bin.000001 | more
通過(guò)命令行執(zhí)行 mysqlbinlog 程序,將要查看的日志指定為參數(shù)。此程序有多個(gè)選項(xiàng),提供諸如根據(jù)時(shí)間或文件偏移提取事件之類的功能??梢圆榭此袔? --help 標(biāo)志的選項(xiàng)。在 mysqlbinlog 輸出中,事件前面會(huì)有提供相關(guān)信息的頭注釋:
# at 141
#100309 9:28:36 server id 123 end_log_pos 245
Query thread_id=3350 exec_time=11 error_code=0
如果使用基于語(yǔ)句的日志記錄創(chuàng)建二進(jìn)制日志,然后運(yùn)行 mysqlbinlog --database=test 創(chuàng)建可讀文件,則服務(wù)器將過(guò)濾掉不與 test 數(shù)據(jù)庫(kù)關(guān)聯(lián)的語(yǔ)句:
INSERT INTO test.t1 (i) VALUES(100);
----------------------------------------
| USE test; |
| INSERT INTO test.t1 (i) VALUES(101); |
| INSERT INTO t1 (i) VALUES(102); |
| INSERT INTO db2.t2 (j) VALUES(201); |
----------------------------------------
USE db2;
INSERT INTO db2.t2 (j) VALUES(202);
因?yàn)闆](méi)有默認(rèn)數(shù)據(jù)庫(kù),因此不包括第一條 INSERT 語(yǔ)句。輸出的是跟在 USE test 后面的三條 INSERT 語(yǔ)句,而不是跟在 USE db2 后面的 INSERT 語(yǔ)句。
6) 刪除二進(jìn)制日志
默認(rèn)情況下,不會(huì)自動(dòng)刪除舊的日志文件。
A. 根據(jù)存在時(shí)間刪除日志:
SET GLOBAL expire_logs_days = 7;
…或者…
PURGE BINARY LOGS BEFORE now() - INTERVAL 3 day;
B. 根據(jù)文件名刪除日志:
PURGE BINARY LOGS TO 'mysql-bin.000010';
C. 要在二進(jìn)制日志輪轉(zhuǎn)過(guò)程中自動(dòng)刪除存在時(shí)間多于指定天數(shù)的任何二進(jìn)制日志,可使用expire_logs_days 設(shè)置。
也可以在配置文件中配置 expire_logs_days:
[mysqld]
expire_logs_days=7
7) 配置企業(yè)審計(jì)
企業(yè)審計(jì)通過(guò)使用 audit_log 服務(wù)器插件實(shí)現(xiàn),該功能隨企業(yè)版本訂閱提供。企業(yè)審計(jì)啟用后,在日志文件中生成一個(gè)服務(wù)器活動(dòng)審計(jì)記錄,內(nèi)容取決于策略,可能包括:
2 在系統(tǒng)上發(fā)生的錯(cuò)誤的記錄
2 客戶機(jī)連接和斷開(kāi)連接的時(shí)間
2 客戶機(jī)在連接期間執(zhí)行的操作
2 客戶機(jī)訪問(wèn)的數(shù)據(jù)庫(kù)和表
A. 安裝 audit_log 插件
要安裝 audit_log 插件,請(qǐng)使用 INSTALL PLUGIN 語(yǔ)法,如以下示例中所示:
INSTALL PLUGIN audit_log SONAME 'audit_log.so';
或者,也可以在服務(wù)器啟動(dòng)時(shí)設(shè)置 plugin-load 選項(xiàng):
[mysqld]
plugin-load=audit_log.so
默認(rèn)情況下,裝入該插件就會(huì)啟用日志記錄。將選項(xiàng) audit-log 設(shè)置為 OFF 可禁用日志記錄。要防止在運(yùn)行時(shí)刪除該插件,可設(shè)置以下選項(xiàng):
audit-log=FORCE_PLUS_PERMANENT
日志文件命名為 audit.log,默認(rèn)情況下位于服務(wù)器數(shù)據(jù)目錄中。要更改該文件的名稱或位置,可在服務(wù)器啟動(dòng)時(shí)設(shè)置 audit_log_file 系統(tǒng)變量。
B. 日志記錄策略
基于策略的日志記錄通過(guò) audit_log_policy 選項(xiàng)設(shè)置,提供的日志記錄選項(xiàng)有 ALL、 NONE、 LOGINS 或 QUERIES,默認(rèn)為 ALL;
要平衡遵從性和性能,可使用 audit_log_strategy 選項(xiàng)在 SYNCHRONOUS、ASYNCHRONOUS、 SEMISYNCHRONOUS 和 PERFORMANCE 之間進(jìn)行選擇。如果將 audit_log_rotate_on_size 設(shè)置為某個(gè)大于 0 的數(shù)字,則當(dāng)日志文件大小超出了該數(shù)量的 4 KB 數(shù)據(jù)塊大小時(shí),將輪轉(zhuǎn)日志文件。
有關(guān)配置企業(yè)審計(jì)的更多信息,請(qǐng)參閱《MySQL 參考手冊(cè)》:
http://dev.mysql.com/doc/refman/5.6/en/audit-log-plugin-options-variables.html
C. 審計(jì)日志文件
審計(jì)日志文件以 XML 形式寫入,采用 UTF-8 編碼。根元素為 <AUDIT>。根元素的結(jié)束標(biāo)記 </AUDIT> 在該插件終止時(shí)寫入。在審計(jì)日志插件處于活動(dòng)狀態(tài)期間,文件中沒(méi)有該標(biāo)記。每個(gè)審計(jì)條目就是一個(gè) <AUDIT_RECORD /> 元素:
<AUDIT_RECORD TIMESTAMP="2012-10-12T09:35:15"
NAME="Connect" CONNECTION_ID="4" STATUS="0"
USER="root" PRIV_USER="root" OS_LOGIN="" PROXY_USER=""
HOST="localhost" IP="127.0.0.1" DB=""/>
<AUDIT_RECORD TIMESTAMP="2012-10-12T09:38:33"
NAME="Query" CONNECTION_ID="4" STATUS="0"
SQLTEXT="INSERT INTO tbl VALUES(1, 2)"/>
每個(gè)審計(jì)記錄的 TIMESTAMP 采用 UTC 格式。
NAME 屬性代表事件類型。例如, “Connect” 表示登錄事件, “Quit” 表示客戶機(jī)斷開(kāi)連接, “Shutdown” 表示服務(wù)器關(guān)閉。 “Audit” 和“NoAudit” 表示審計(jì)開(kāi)始和停止的點(diǎn)。
STATUS 屬性提供命令狀態(tài)。這與 MySQL 命令 SHOW ERRORS 顯示的 Code 值相同。有些屬性僅在特定的事件類型中出現(xiàn)。例如, “Connect” 事件包括諸如 HOST、 DB、 IP和 USER 之類的屬性, “Query” 事件包括 SQLTEXT 屬性。
以上是“MySQL如何配置服務(wù)器”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。