### 第5章:數據庫管理
本章涵蓋了MySQL安裝管理主題,例如配置服務器、管理用戶賬戶和備份。
### 5.1.?MySQL服務器和服務器啟動腳本
[ 5.1.1. 服務器端腳本和實用工具概述](#)[ 5.1.2. mysq**ld-max擴展My**SQL服務器](#)[ 5.1.3. mysqld_safe:MySQL服務器啟動腳本](#)[ 5.1.4. mysql.server:MySQL服務器啟動腳本](#)[ 5.1.5. mysqld_multi:管理多個MySQL服務器的程序](#)
MySQL服務器,即**mysqld**,是在MySQL安裝中負責大部分工作的主程序。服務器隨附了幾個相關腳本,當你安裝MySQL時它們可以執行設置操作,或者是幫助你啟動和停止服務器的幫助程序。
本節提供了服務器和相關程序的概述,以及服務器啟動腳本相關信息。關于配置服務器的信息參見[5.3節,“mysqld:MySQL服務器”](# "5.3.?mysqld — The MySQL Server")。
### 5.1.1.?服務器端腳本和實用工具概述
MySQL程序采用各種不同的選項。但每個MySQL程序提供一個--help選項,你可以用來查閱程序選項相關說明。例如,你可以試試**mysqld --help**。
你可以在命令行中或在選項文件中指定選項來替換所有標準程序中的默認選項。參見[4.3節,“指定程序選項”](# "4.3.?Specifying Program Options")。
下面簡單描述了MySQL服務器和服務器相關程序:
·???????? **mysqld**
SQL后臺程序(即MySQL服務器)。要想使用客戶端程序,該程序必須運行,因為客戶端通過連接服務器來訪問數據庫。參見[5.3節,“mysqld:MySQL服務器”](# "5.3.?mysqld — The MySQL Server")。
·???????? mysqld-max
包括更多特性的一個服務器版本。參見[5.1.2節,“mysq**ld-max擴展My**SQL服務器”](# "5.1.2.?The mysqld-max Extended MySQL Server")
·???????? mysqld_safe
服務器啟動腳本。如果**mysqld-max**存在,**mysqld_safe**試圖啟動它,否則啟動**mysqld**。參見[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。
·???????? mysql.server
服務器啟動腳本。該腳本用于使用包含為特定級別的運行啟動服務的腳本的運行目錄的系統。它調用**mysqld_safe**來啟動MySQL服務器。參見[5.1.4節,“mysql.server:MySQL服務器啟動腳本”](# "5.1.4.?mysql.server — MySQL Server Startup Script")。
·???????? mysqld_multi
服務器啟動腳本,可以啟動或停止系統上安裝的多個服務器。參見[5.1.5節,“mysqld_multi:管理多個MySQL服務器的程序”](# "5.1.5.?mysqld_multi — Program for Managing Multiple MySQL Servers")
·???????? mysql_install_db
該腳本用默認權限創建MySQL授權表。通常只是在系統上首次安裝MySQL時執行一次。參見[2.9.2節,“Unix下安裝后的過程”](# "2.9.2.?Unix Post-Installation Procedures")。
·???????? ** mysql_fix_**** privilege_tables**
在升級安裝后,如果新版本MySQL中的 授權表有更改,則使用該腳本來更改授權表。參見[2.10.2節,“升級授權表”](# "2.10.2.?Upgrading the Grant Tables")。
服務器主機上還運行其它幾個程序:
·???????? myisamchk
用來描述、檢查、優化和維護MyISAM表的實用工具。在[5.9.5節,“myisamchk:MyISAM表維護實用工具”](# "5.9.5.?myisamchk — MyISAM Table-Maintenance Utility")中描述了**myisamchk**。
·???????? make_binary_distribution
該程序可以生成編譯過的MySQL的二進制版本。可以通過FTP上傳到ftp.mysql.com的/pub/mysql/upload/,供其它MySQL用戶使用。
·???????? mysqlbug
MySQL 缺陷報告腳本。它可以用來向MySQL郵件系統發送缺陷報告。(你也可以訪問[http://bugs.mysql.com/](http://bugs.mysql.com/)在線創建缺陷報告文件。參見[1.7.1.3節,“如何通報缺陷和問題”](# "1.7.1.3.?How to Report Bugs or Problems"))。
### 5.1.2.?mysq**ld-max擴展My**SQL服務器
MySQL-Max服務器是**mysqld** MySQL服務器的一個版本,包含了更多的特性。
該分發版的使用取決于你的平臺:
·???????? 對于Windows,MySQL二進制分發版包括標準服務器 (mysqld.exe)和MySQL-Max服務器(**mysqld-max.exe**),因此你不再需要專用分發版。只需要使用一個常規Windows分發版,可以從[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)獲得。參見[2.3節,“在Windows上安裝MySQL”](# "2.3.?Installing MySQL on Windows")。
·???????? 對于Linux,如果你使用RPM分發版安裝MySQL,首先使用常規MySQL-server RPM來安裝標準**mysqld**服務器。然后使用MySQL-Max RPM來安裝**mysqld-max**服務器。MySQL-Max RPM假定你已經安裝了常規服務器RPM。關于Linux RPM軟件包的詳細信息,參見[2.4節,“在Linux下安裝MySQL”](# "2.4.?Installing MySQL on Linux")。
·???????? 所有其它MySQL-Max分發版包含一個**mysqld**服務器,但具有更多的特性。
你可以從MySQL AB網址[http://dev.mysql.com/downloads/](http://dev.mysql.com/downloads/)找到MySQL-Max二進制版本。
MySQL AB使用下面的**configure**選項構建MySQL-Max服務器:
·???????? --with-server-suffix=-max
該選項為**mysqld**版本字符串添加一個-max后綴。
·???????? --with-innodb
該選項啟用InnoDB存儲引擎支持。MySQL-Max服務器包括InnoDB支持。在MySQL 4.0及以上版本中,默認InnoDB包括在所有二進制分發版中,因此你不需要用MySQL-Max服務器只是用來獲取InnoDB支持。
·???????? --with-bdb
該選項啟用Berkeley DB (BDB)存儲引擎支持。
·???????? --with-blackhole-storage-engine
該選項啟用BLACKHOLE存儲引擎支持。
·???????? USE_SYMDIR
啟用該定義來為Windows打開數據庫符號鏈接支持。符號鏈接支持適用于所有Windows服務器,因此Max服務器不需要支持該特性。
·???????? --with-ndbcluster
該選項啟用NDB Cluster存儲引擎支持。目前(5.1.2-alpha)只有Linux、Solaris和Mac OS X支持Cluster。已有一些用戶報告在BSD 操作系統上成功使用了從源碼構建的MySQL Cluster,但目前還沒有得到官方支持。
MySQL-Max二進制分發版對于想要安裝預編譯程序的用戶很方便。如果你使用源碼分發版構建MySQL,你可以通過在配置時啟用MySQL-Max二進制分發版構建所用的相同的特性來構建你自己的Max-like服務器。
MySQL-Max服務器包括BerkeleyDB (BDB)存儲引擎,但并非所有平臺支持BDB。
Solaris、Mac OS X和Linux(在大多數平臺上)的MySQL-Max服務器包括NDB CLUSTER存儲引擎支持。請注意必須用ndbcluster選項啟動服務器,以便使服務器做為MySQL Cluster的一部分來運行。(詳細信息參見[17.4節,“MySQL簇的配置”](# "17.4.?MySQL Cluster Configuration"))。
下面的表顯示了MySQL-Max二進制在哪個平臺上包括BDB和/或NDB CLUSTER支持:
<table border="1" cellpadding="0" id="table1"><tr><td> <p><strong><span>系統</span></strong></p></td> <td> <p><strong> <span>BDB</span><span>支持</span></strong></p></td> <td> <p><strong> <span>NDB</span><span>支持</span></strong></p></td> </tr><tr><td> <p><span>AIX 4.3</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>HP-UX 11.0</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Linux-Alpha</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>Linux-IA-64</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Linux-Intel</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>Mac OS X</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>NetWare</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>SCO OSR5</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Solaris-SPARC</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>Solaris-Intel</span></p></td> <td> <p><span>N</span></p></td> <td> <p><span>Y</span></p></td> </tr><tr><td> <p><span>UnixWare</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>N</span></p></td> </tr><tr><td> <p><span>Windows NT/2000/XP</span></p></td> <td> <p><span>Y</span></p></td> <td> <p><span>N</span></p></td> </tr></table>
要想找出你的服務器支持哪個存儲引擎,執行下面的語句:
mysql> SHOW ENGINES;
+------------+---------+----------------------------------------------------------------+
| Engine???? | Support | Comment??????????????????????????????????????????????????????? |
+------------+---------+----------------------------------------------------------------+
| MyISAM???? | DEFAULT | Default engine as of MySQL 3.23 with great performance???????? |
| MEMORY???? | YES???? | Hash based, stored in memory, useful for temporary tables????? |
| HEAP?????? | YES???? | Alias for MEMORY?????? ????????????????????????????????????????|
| MERGE????? | YES???? | Collection of identical MyISAM tables????????????????????????? |
| MRG_MYISAM | YES???? | Alias for MERGE??????????????????????????????????????????????? |
| ISAM?????? | NO????? | Obsolete storage engine, now replaced by MyISAM??????????????? |
| MRG_ISAM?? | NO????? | Obsolete storage engine, now replaced by MERGE???????????????? |
| InnoDB???? | YES???? | Supports transactions, row-level locking, and foreign keys???? |
| INNOBASE?? | YES? ???| Alias for INNODB?????????????????????????????????????????????? |
| BDB??????? | YES???? | Supports transactions and page-level locking?????????????????? |
| BERKELEYDB | YES???? | Alias for BDB????????????????????????????????????????????????? |
| NDBCLUSTER | NO????? | Clustered, fault-tolerant, memory-based tables???????????????? |
| NDB??????? | NO????? | Alias for NDBCLUSTER?????????????????????????????????????????? |
| EXAMPLE??? | NO????? | Example storage engine?????????????????????????????????? ??????|
| ARCHIVE??? | YES???? | Archive storage engine???????????????????????????????????????? |
| CSV??????? | NO????? | CSV storage engine???????????????????????????????????????????? |
| FEDERATED? | YES???? | Federated MySQL storage engine???????????? ????????????????????|
| BLACKHOLE? | YES???? | /dev/null storage engine (anything you write to it disappears) |
+------------+---------+----------------------------------------------------------------+
18 rows in set (0.00 sec)
(另參見[13.5.4.8節,“SHOW ENGINES語法”](# "13.5.4.8.?SHOW ENGINES Syntax"))。
你還可以使用下面的語句代替SHOW ENGINES,并檢查你感興趣的存儲引擎的變量值:
mysql> SHOW VARIABLES LIKE 'have%';
+-----------------------+----------+
| Variable_name???????? | Value??? |
+-----------------------+----------+
| have_archive????????? | YES????? |
| have_bdb????????????? | NO?????? |
| have_blackhole_engine | YES????? |
| have_compress???????? | YES????? |
| have_crypt??????????? | YES????? |
| have_csv????????????? | YES????? |
| have_example_engine?? | NO?????? |
| have_federated_engine | NO?????? |
| have_geometry???????? | YES????? |
| have_innodb?????????? | YES????? |
| have_isam???????????? | NO?????? |
| have_ndbcluster?????? | DISABLED |
| have_openssl????????? | NO????? ?|
| have_partition_engine | YES????? |
| have_query_cache????? | YES????? |
| have_raid???????????? | NO?????? |
| have_rtree_keys?????? | YES????? |
| have_symlink????????? | YES????? |
+-----------------------+----------+
18 rows in set (0.01 sec)
SHOW命令的精確輸出隨使用的MySQL版本(和啟用的特性)的不同而有變化。第2列的值表示各特性支持的服務器級別,如下所示:
<table border="1" cellpadding="0" id="table2"><tr><td> <p><strong><span>值</span></strong></p></td> <td> <p><strong><span>含義</span></strong></p></td> </tr><tr><td> <p> <span>YES</span></p></td> <td> <p><span>?</span>支持該特性并已經激活。</p></td> </tr><tr><td> <p> <span>NO</span></p></td> <td> <p><span>?</span>不支持該特性。</p></td> </tr><tr><td> <p> <span>DISABLED</span></p></td> <td> <p><span>?</span>支持該特性但被禁用。</p></td> </tr></table>
NO值表示編譯的服務器不支持該特性,因此在運行時不能激活。
出現DISABLED值是因為服務器啟動時該特性被禁用,或沒有給出啟用它的所有選項。在后一種情況,_host_名.err_錯誤日志文件應包含該選項被禁用的原因。
如果服務器支持InnoDB或BDB存儲引擎,你還可以看見DISABLED,但在運行啟動時使用了--skip-innodb或--skip-bdb選項。對于NDB CLUSTER存儲引擎,DISABLED表示服務器支持MySQL Cluster,但啟動時未啟用--ndb-cluster選項。
所有MySQL服務器支持MyISAM表,因為MyISAM是 默認存儲引擎。
### 5.1.3.?mysqld_safe:MySQL服務器啟動腳本
在Unix和NetWare中推薦使用**mysqld_safe**來啟動**mysqld服務器**。**mysqld_safe**增加了一些安全特性,例如當出現錯誤時重啟服務器并向錯誤日志文件寫入運行時間信息。本節后面列出了NetWare的特定行為。
**注**釋:為了保持同舊版本MySQL的向后兼容性,MySQL二進制分發版仍然包括**safe_mysqld**作為**mysqld_safe**的符號鏈接。但是,你不應再依賴它,因為再將來將刪掉它。
默認情況下,**mysqld_safe**嘗試啟動可執行**mysqld-max**(如果存在),否則啟動**mysqld**。該行為的含義是:
·???????? 在Linux中,MySQL-Max RPM依賴該**mysqld_safe**的行為。RPM安裝可執行**mysqld-max**,使**mysqld_safe**從該點起自動使用可執行命令。
·???????? 如果你安裝包括**mysqld-max**服務器的MySQL-Max分發版,后面升級到非-Max的MySQL版本,**mysqld_safe**仍然試圖運行舊的 **mysqld-max服務器**。升級時,你應手動刪除舊的**mysqld-max服務器**以確保**mysqld_safe**運行新的**mysqld服務器**。
要想越過默認行為并顯式指定你想要運行哪個服務器,為**mysqld_safe**指定--mysqld或--mysqld-version選項。
**mysqld_safe**的許多選項與**mysqld**的相同的。參見[5.3.1節,“**mysqld**命令行選項”](# "5.3.1.?mysqld Command-Line Options")。
所有在命令行中為**mysqld_safe**指定的選項被傳遞給**mysqld。**如果你想要使用**mysqld**不支持的**mysqld_safe的**選項,不要在命令行中指定。相反,在選項文件的[mysqld_safe]組內將它們列出來。參見[4.3.2節,“使用選項文件”](# "4.3.2.?Using Option Files")。
**mysqld_safe**從選項文件的[mysqld]、[server]和[mysqld_safe]部分讀取所有選項。為了保證向后兼容性,它還讀取 [safe_mysqld]部分,盡管在MySQL 5.1安裝中你應將這部分重新命名為[mysqld_safe]。
**mysqld_safe**支持下面的選項:
·???????? --help
顯示幫助消息并退出。
·???????? --autoclose
(只在NetWare中)在NetWare中,**mysqld_safe**可以保持窗口。當你關掉**mysqld_safe** NLM時,窗口不按默認設置消失。相反,它提示用戶輸入:
*<NLM has terminated; Press any key to close the screen>*
如果你想讓NetWare自動關閉窗口,在**mysqld_safe**中使用--autoclose選項。
·???????? --basedir=_path_
MySQL安裝目錄的路徑。
·???????? --core-file-size=_size_
**mysqld**能夠創建的內核文件的大小。選項值傳遞給**ulimit -c**。
·???????? --datadir=_path_
數據目錄的路徑。
·???????? ? --defaults-extra-file=_path_
除了通用選項文件所讀取的選項文件名。如果給出,必須首選該選項。
·???????? --defaults-file=_path_
讀取的代替通用選項文件的選項文件名。如果給出,必須首選該選項。
·???????? --ledir=_path_
包含**mysqld**程序的目錄的路徑。使用該選項來顯式表示服務器位置。
·???????? --log-error=_path_
將錯誤日志寫入給定的文件。參見[5.11.1節,“錯誤日志”](# "5.11.1.?The Error Log")。
·???????? --mysqld=_prog___name_
想要啟動的服務器程序名(在ledir目錄)。如果你使用MySQL二進制分發版但有二進制分發版之外的數據目錄需要該選項。
·???????? --mysqld-version =_suffix_
該選項類似--mysqld選項,但你只指定服務器程序名的后綴。基本名假定為**mysqld。**例如,如果你使用--mysqld-version =max,**mysqld_safe**啟動ledir目錄中的**mysqld-max**程序。如果--mysqld-version的參數為空,**mysqld_safe**使用目錄中的**mysqld**。
·???????? --nice=_priority_
使用nice程序根據給定值來設置服務器的調度優先級。
·???????? --no-defaults
不要讀任何選項文件。如果給出,必須首選該選項。
·???????? --open-files-limit=_count_
**mysqld**能夠打開的文件的數量。選項值傳遞給 **ulimit -n**。請注意你需要用root啟動**mysqld_safe**來保證正確工作!
·???????? --pid-file=path
進程ID文件的路徑。
·???????? --port=_port_num_
?用來幀聽TCP/IP連接的端口號。端口號必須為1024或更大值,除非MySQL以root系統用戶運行。
·???????? --skip-character-set-client-handshake
忽略客戶端發送的字符集信息,使用服務器的默認字符集。(選擇該選項,MySQL的動作與MySQL 4.0相同)。
·???????? --socket=path
用于本地連接的Unix套接字文件。
·???????? --timezone=_zone_
為給定的選項值設置TZ時區環境變量。從操作系統文檔查閱合法的時區規定格式。
·???????? --user={_user_name_ | _user_id_}
以用戶名_user_name_或數字用戶ID_ user_id_運行**mysqld服務器**。(本文中的“用戶”指系統登錄賬戶,而不是 授權表中的MySQL用戶)。
執行**mysqld_safe**時,必須先給出--defaults-file或--defaults-extra-option,或不使用選項文件。例如,該命令將不使用選項文件:
mysqld_safe --port=port_num --defaults-file=file_name
相反,使用下面的命令:
mysqld_safe --defaults-file=file_name --port=port_num
一般情況**mysqld_safe**腳本可以啟動從源碼或二進制MySQL分發版安裝的服務器,即使這些分發版將服務器安裝到稍微不同的位置。(參見[2.1.5節,“安裝布局”](# "2.1.5.?Installation Layouts"))。 ** mysqld_safe**期望下面的其中一個條件是真的:
·???????? 可以根據調用**mysqld_safe**的目錄找到服務器和數據庫。在二進制分發版中,**mysqld_safe**看上去在bin和data目錄的工作目錄下。對于源碼分發版,為libexec和var目錄。如果你從MySQL安裝目錄執行**mysqld_safe**應滿足該條件(例如,二進制分發版為/usr/local/mysql)。
·???????? 如果不能根據工作目錄找到服務器和數據庫,**mysqld_safe**試圖通過絕對路徑對它們定位。典型位置為/usr/local/libexec和/usr/local/var。實際位置由構建分發版時配置的值確定如果MySQL安裝到配置時指定的位置,它們應該是正確的。
因為**mysqld_safe**試圖通過工作目錄找到服務器和數據庫,只要你從MySQL安裝目錄運行**mysqld_safe****,**可以將MySQL二進制分發版安裝到其它位置:
shell> cd mysql_installation_directory
shell> bin/mysqld_safe &
如果**mysqld_safe**失敗,即使從MySQL安裝目錄調用仍然失敗,你可以指定--ledir和--datadir選項來指示服務器和數據庫在你的系統中的安裝目錄。
一般情況,你不應編輯**mysqld_safe**腳本。相反,應使用命令行選項或my.cnf選項文件的[mysqld_safe]部分的選項來配置**mysqld_safe**。一般不需要編輯**mysqld_safe**來正確啟動服務器。但是,如果你編輯,將來升級MySQL后會覆蓋你修改的**mysqld_safe**版本,因此你應對你修改的版本進行備份以便將來重裝。
在NetWare中,**mysqld_safe**是一個NetWare Loadable Module (NLM),從原Unix shell腳本移植。它執行:
1.??? 檢查系統和選項。
2.??? 檢查MyISAM表。
3.??? 保持MySQL服務器窗口。
4.??? 啟動并監視**mysqld**,如果因錯誤終止則重啟。
5.??? **將mysqld的**錯誤消息發送到數據目錄中的_host_name.err _文件。
6.??? 將**mysqld_safe**的屏幕輸出發送到數據目錄中的_host_name.safe_文件。
### 5.1.4.?mysql.server:MySQL服務器啟動腳本
在Unix中的MySQL分發版包括**mysql.server**腳本。它可以用于使用System V-style運行目錄來啟動和停止系統服務的系統,例如Linux和Solaris。它還用于MySQL的Mac OS X Startup Item。
**mysql.server**位于MySQL源碼樹MySQL安裝目錄下的support-files目錄中。
如果你使用Linux 服務器RPM軟件包(MySQL-server-VERSION.rpm),**mysql.server**腳本將安裝到/etc/init.d目錄下,名為mysql。你不需要 手動安裝。關于Linux RPM軟件包的詳細信息參見[2.4節,“在Linux下安裝MySQL”](# "2.4.?Installing MySQL on Linux")。
一些賣方提供的RPM軟件包安裝的啟動腳本用其它名,例如**mysqld。**
如果你從不自動安裝**mysql.server**的源碼分發版或二進制分發版格式安裝MySQL,也可以手動安裝。相關說明參見[2.9.2.2節,“自動啟動和停止MySQL”](# "2.9.2.2.?Starting and Stopping MySQL Automatically")。
**mysql.server**從 [mysql.server]和選項文件的[mysqld]部分讀取選項。(為了保證向后兼容性,它還讀取 [safe_mysqld]部分,盡管在MySQL 5.1安裝中你應將這部分重新命名為[mysqld_safe])。
### 5.1.5.?mysqld_multi:管理多個MySQL服務器的程序
**mysqld_multi**可以管理多個幀聽不同Unix套接字文件和TCP/IP端口的連接的**mysqld**進程。它可以啟動或停止服務器,或報告它們的當前狀態。
程序尋找my.cnf中的[mysqld_N_]組(或--config-file選項指定的文件)。_N_可以為任何正整數。在下面的討論中該數字指選項組號,或_GNR_。組號區別各選項組,并用作**mysqld_multi**的參數來指定想要啟動、停止哪個服務器或獲取哪個服務器的狀態報告。這些組中的選項與將用來啟動**mysqld**的[mysqld]組中的相同。(例如,參見[2.9.2.2節,“自動啟動和停止MySQL”](# "2.9.2.2.?Starting and Stopping MySQL Automatically"))。但是,當使用多個服務器時,需要每個服務器使用自己的選項值,例如Unix套接字文件和TCP/IP端口號。關于在多服務器環境中,每個服務器對應唯一選項的詳細信息,參見[5.12節,“在同一臺機器上運行多個MySQL服務器”](# "5.12.?Running Multiple MySQL Servers on the Same Machine")。
要想調用**mysqld_multi**,使用下面的語法:
shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...]
start、stop和report表示你想要執行的操作。你可以在單個服務器或多個服務器上執行指定的操作,取決于選項名后面的_GNR_列。如果沒有該列,**mysqld_multi**為選項文件中的所有服務器執行該操作。
每個_GNR_值代表一個選項組號或組號范圍。_GNR_值應為選項文件中組名末尾的號。例如,組[mysqld17]的_GNR_為17。要想指定組號的范圍,用破折號間隔開第1個和最后1個號。_GNR_值10-13代表組[mysqld10]到[mysqld13]。可以在命令行中指定多個組或組范圍,用逗號間隔開。_GNR_列不能有空格字符(空格或tab);空格字符后面的內容將被忽略掉。
該命令使用選項組[mysqld17]啟動單個服務器:
shell> mysqld_multi start 17
該命令停止多個服務器,使用選項組[mysql8]和[mysqld10]至[mysqld13]:
shell> mysqld_multi stop 8,10-13
使用該命令列出設置選項文件的示例:
shell> mysqld_multi --example
**mysqld_multi**支持下面的選項:
·???????? --config-file=_name_
指定選項文件名。這關系到**mysqld_multi**從哪里尋找[mysqld_N_]選項組。沒有該選項,從通用my.cnf文件讀所有選項。選項不影響 **mysqld_multi**從哪里讀取自己的選項,總是從通用my.cnf文件的[mysqld_multi]組讀取。
·???????? --example
顯示示例選項文件。
·???????? --help
顯示幫助消息并退出。
·???????? --log=_name_
指定日志文件名。如果該文件存在,后面為日志輸出。
·???????? --mysqladmin=_prog_name_
用來停止服務器的**mysqladmin**二進制。
·???????? --mysqld=_prog_name_
可用的**mysqld**二進制。請注意你還可以將該選項的值指定為**mysqld_safe**。選項被傳遞給 **mysqld。**確保在PATH環境變量設定值或**mysqld_safe**中有**mysqld**所在目錄。
·???????? --no-log
按照標準輸出打印日志信息,不要寫入日志文件。默認情況下,輸出寫入日志文件。
·???????? --password=_password_
調用**mysqladmin**時使用的MySQL賬戶的密碼。請注意該密碼值不是可選項,不象其它MySQL程序。
·???????? --silent
禁用警告。
·???????? --tcp-ip
通過TCP/IP端口而不是Unix套接字文件來連接每個MySQL服務器。(如果找不到套接字文件, 服務器仍然可以運行,但只能通過 TCP/IP端口訪問)。默認情況下,使用Unix套接字文件進行連接。該選項影響stop和report操作。
·???????? --user=_user_name_
調用**mysqladmin**時使用的MySQL賬戶的用戶名。
·???????? --verbose
更詳細。
·???????? --version
顯示版本信息并退出。
關于**mysqld_multi**的一些注解:
·???????? 確保停止**mysqld服務器**(用**mysqladmin**程序)的MySQL賬戶在各個服務器中的用戶名和密碼相同。并且應確保賬戶具有SHUTDOWN權限。如果你想要管理的服務器的管理賬戶有許多不同的用戶名或密碼,你需要在每個服務器上創建一個賬戶,并具有相同的用戶名和密碼。例如,你可以執行下面的命令為每個服務器設置一個普通multi_admin賬戶:
·??????????????? shell> mysql -u root -S /tmp/mysql.sock -proot_password
·??????????????? mysql> GRANT SHUTDOWN ON *.*
·??????????????? ????-> TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
參見[5.7.2節,“權限系統工作原理”](# "5.7.2.?How the Privilege System Works")。你必須為每個**mysqld服務器執行該操作**。當連接時適當更改連接參數。請注意賬戶名的主機部分必須允許你用multi_admin從你想要運行**mysqld_multi**的主機進行連接。
·???????? 如果你使用**mysqld_safe**來啟動**mysqld**(例如,--mysqld=mysqld_safe),--pid-file選項很重要。每個**mysqld**應有自己的進程ID文件。使用**mysqld_safe**而不使用**mysqld**的好處是**mysqld_safe**“守護”其**mysqld**進程,如果用kill –9發送的信號或由于其它原因(例如分段故障)進程終止,則重啟進程。請注意**mysqld_safe**腳本需要你從某個位置啟動它。這說明運行**mysqld_multi**前你必須進入某個目錄。如果啟動時有問題,請參見**mysqld_safe**腳本。特別是要檢查下列行:
·??????????????? ----------------------------------------------------------------
·??????????????? MY_PWD=`pwd`
·??????????????? # Check if we are starting this relative (for the binary release)
·??????????????? if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a \
·??????????????? -x ./bin/mysqld
·??????????????? ----------------------------------------------------------------
參見[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。上述行執行的測試應成功,否則你可能遇到了問題。
·???????? 每個**mysqld**的Unix套接字文件和TCP/IP端口號必須不同。
·???????? 你可能想要為**mysqld**使用--user選項,但為此你需要用Unix root用戶運行**mysqld_multi**腳本。選項文件中有選項不要緊;如果你不是超級用戶,并且你用自己的Unix賬戶重啟**mysqld**進程,你只會得到警告。
·???????? **重要**:確保**mysqld**進程啟動所用Unix賬戶可以完全訪問數據目錄。_不要_使用Unix root賬戶,除非你_知道_你在做什么。
·???????? **非常重要**:使用**mysqld_multi**前,確保理解傳遞給**mysqld服務器的**選項的含義以及你_為什么_想要獨立的**mysqld**進程。應清楚 在相同的數據目錄下使用多個**mysqld服務器**的危險。使用單獨的數據目錄,除非你_知道_你在做什么。在線程系統中,在相同的數據目錄下啟動多個服務器不會得到超性能。參見[5.12節,“在同一臺機器上運行多個MySQL服務器”](# "5.12.?Running Multiple MySQL Servers on the Same Machine")。
下面的示例顯示了你如何設置選項文件來使用**mysqld_multi**。專門省去第1個和第5個[mysqld_N_]組來說明你的選項文件可以稍有不同。這樣給你更大的靈活性。**mysqld**程序重啟或停止的順序由它們在選項文件中的順序決定。
# This file should probably be in your home dir (~/.my.cnf)
# or /etc/my.cnf
# Version 2.1 by Jani Tolonen
?
[mysqld_multi]
mysqld???? = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user?????? = multi_admin
password?? = multipass
?
[mysqld2]
socket???? = /tmp/mysql.sock2
port?????? = 3307
pid-file?? = /usr/local/mysql/var2/hostname.pid2
datadir??? = /usr/local/mysql/var2
language?? = /usr/local/share/mysql/english
user?????? = john
?
[mysqld3]
socket???? = /tmp/mysql.sock3
port?????? = 3308
pid-file?? = /usr/local/mysql/var3/hostname.pid3
datadir??? = /usr/local/mysql/var3
language?? = /usr/local/share/mysql/swedish
user? ?????= monty
?
[mysqld4]
socket???? = /tmp/mysql.sock4
port?????? = 3309
pid-file?? = /usr/local/mysql/var4/hostname.pid4
datadir??? = /usr/local/mysql/var4
language?? = /usr/local/share/mysql/estonia
user?????? = tonu
?
[mysqld6]
socket???? = /tmp/mysql.sock6
port?????? = 3311
pid-file?? = /usr/local/mysql/var6/hostname.pid6
datadir??? = /usr/local/mysql/var6
language?? = /usr/local/share/mysql/japanese
user?????? = jani
參見[4.3.2節,“使用選項文件”](# "4.3.2.?Using Option Files")。
### 5.2.?mysqlmanager:MySQL實例管理器
[ 5.2.1. 用MySQL實例管理器啟動MySQL服務器](#)[ 5.2.2. 連接到MySQL實例管理器并創建用戶賬戶](#)[ 5.2.3. MySQL實例管理器命令行選項](#)[ 5.2.4. MySQL實例管理器配置文件](#)[ 5.2.5. MySQL實例管理器識別的命令](#)
MySQL實例管理器(IM)是通過TCP/IP端口運行的后臺程序,用來監視和管理MySQL數據庫服務器實例。MySQL實例管理器 適合Unix-類操作系統和Windows。
可以在mysqld_safe腳本使用MySQL實例管理器來啟動和停止MySQL服務器,**甚至可以從一個遠程主機**。MySQL實例管理器還執行**mysqld_multi**腳本的功能(和大多數語法)。下面為MySQL實例管理器的詳細描述。
### 5.2.1.?用MySQL實例管理器啟動MySQL服務器
一般情況,用**mysql.server**腳本啟動MySQL Database Server(MySQL數據庫服務器),通常駐留在/etc/init.d/文件夾。默認情況下該腳本調用**mysqld_safe**腳本。但是,你可以在腳本中將use_mysqld_safe變量設置為0(零)以便使用MySQL實例管理器來啟動服務器。
在這種情況下,Instance Manager的行為取決于MySQL配置文件中的選項。如果沒有配置文件,MySQL實例管理器創建mysqld實例并試圖用默認(編譯嵌入的)配置來啟動。這說明如果**mysqld沒有**安裝到 默認位置,IM不能猜出它的位置。如果你已經在非標準位置安裝了MySQL服務器,你應使用配置文件。參見[2.1.5節,“安裝布局”](# "2.1.5.?Installation Layouts")。
如果有配置文件,IM將分析配置文件搜索[mysqld]部分(例如[mysqld]、[mysqld1]、[mysqld2]等)。每個部分指定一個實例。啟動時IM將啟動所有找到的實例。IM關閉時默認停止所有實例。
請注意有一個特殊選項mysqld-path(mysqld-path = _path-to-mysqld- binary_),只能用IM識別。使用該變量讓IM知道**mysqld**二進制駐留在哪兒。你還應該為服務器設置basedir和datadir選項。
啟用MySQL實例管理器的典型MySQL服務器啟動/關閉循環為:
·???????? ?用**/etc/init.d/mysql**腳本啟動MySQL實例管理器。
·???????? ?MySQL實例管理器啟動所有實例并監視它們。
·???????? 如果某個服務器實例失敗,MySQL實例管理器重啟它。
·???????? 如果MySQL實例管理器被關閉(例如用**/etc/init.d/mysql stop**命令),所有實例被MySQL實例管理器關閉。
### 5.2.2.?連接到MySQL實例管理器并創建用戶賬戶
使用MySQL客戶端-服務器協議來處理同MySQL實例管理器之間的通信。你不能使用標準**mysql**客戶端程序和MySQL C API來連接IM。IM支持客戶端工具和mysql-4.1或以后的版本所分發的庫所用的MySQL客戶端-服務器協議版本。
IM將用戶信息保存到密碼文件中。密碼文件的默認位置為/etc/mysqlmanager.passwd。
密碼應類似于:
petr:*35110DC9B4D8140F5DE667E28C72DD2597B5C848
要想生成密碼用**--passwd**選項調用IM。則輸出可以重定向到/etc/mysqlmanager.passwd文件以添加新用戶。下面為示例命令。
./mysqlmanager --passwd >> /etc/mysqlmanager.passwd
Creating record for new user.
Enter user name: mike
Enter password: <password>
Re-type password: <password>
下面的行將加到/etc/mysqlmanager.passwd:
mike:*00A51F3F48415C7D4E8908980D443C29C69B60C9
如果/etc/mysqlmanager.passwd文件中沒有該條,則不能連接IM。
### 5.2.3.?MySQL實例管理器命令行選項
MySQL實例管理器支持許多命令行選項。執行**./mysqlmanager --help**命令可以簡單列出。有下面的選項:
·???????? --help,-?
顯示幫助消息并退出。
·???????? --bind-address=_name_
綁定地址用于連接。
·???????? --default-mysqld-path=_name_
在Unix中,如果實例部分沒有路徑,則為尋找MySQL服務器二進制的地點。例如:default-mysqld-path = /usr/sbin/mysqld
·???????? --defaults-file=_file_name_
從給定文件讀Instance Manager和MySQL服務器設定值。所有Instance Manager更改的配置將加入該文件。只能用于Instance Manager的第一選項。
·???????? --install
在Windows中,將Instance Manager安裝為Windows服務。
·???????? --log=_name_
IM日志文件的路徑。結合**--run-as-service**選項使用。
·???????? --monitoring-interval=_Seconds_
監視實例的間隔,單位為秒。Instance Manager將嘗試連接每個監視的實例來檢查它們是否是活動的/沒有掛起。出現故障,IM將重啟幾次(實際上是多次)實例。可以用nonguarded選項為特定實例禁用該行為。如果未給定任何值, 默認使用20秒。
·???????? --passwd,-P
編寫passwd文件并退出。
·???????? --password-file=_name_
從該文件中尋找Instance Manager用戶和密碼。默認文件是/etc/mysqlmanager.passwd。
·???????? --pid-file=_name_
使用的進程ID文件。默認情況下,該文件文件名為mysqlmanager.pid。
·???????? -- port=_port_num_
用于連接的端口號。(IANA分配的 默認端口號為2273)。
·???????? --print-defaults
打印當前的默認值并退出。只能用作Instance Manager的第一選項。
·???????? --remove
在Windows中,刪掉Instance Manager Windows服務。假定前面已經用--install運行了Instance Manager。
·???????? --run-as-service
使完善進程變為后臺程序并啟動。完善進程很簡單,不易崩潰。出現故障后它將自己重啟IM。
·???????? --socket=_name_
Unix中用于連接的套接字文件。默認情況下,文件名為/tmp/mysqlmanager.sock。
·???????? --standalone
在Windows中以單機模式運行Instance Manager。
·???????? --user=_name_
啟動并運行**mysqlmanager**的用戶名。建議使用運行**mysqld服務器**的用戶賬戶來運行**mysqlmanager**。
·???????? --version, -V
輸出版本信息并退出。
### 5.2.4.?MySQL實例管理器配置文件
Instance Manager使用標準my.cnf文件。它使用[manager]部分為自己讀取選項并讀取[mysqld]部分來創建實例。[manager]部分包含上述列出的選項。下面為[manager]部分示例: # MySQL Instance Manager options section
[manager]
default-mysqld-path = /usr/local/mysql/libexec/mysqld
socket=/tmp/manager.sock
pid-file=/tmp/manager.pid
password-file = /home/cps/.mysqlmanager.passwd
monitoring-interval = 2
port = 1999
bind-address = 192.168.1.5
MySQL實例管理器只在Unix中讀取并管理/etc/my.cnf文件。在Windows中,MySQL實例管理器從Instance Manager的安裝目錄讀取my.ini文件。用--defaults-file=_file_ name_選項可以更改默認選項文件的位置。
實例部分指定啟動時給每個實例的選項。這些主要是普通MySQL服務器選項,但有一些IM-專用選項:
·???????? mysqld-path = <path-to-mysqld-binary>
**mysqld服務器**二進制的路徑。
·???????? shutdown-delay = _ Seconds_
IM應等待實例關閉的秒數。 默認為35秒。超過延遲時間后,IM假定實例正掛起并試圖“kill –9”它。如果你使用帶large表的InnoDB,你應當增加該值。
·???????? nonguarded
如果你想要為某個實例禁用IM監視功能,應設置該選項。
下面給出了幾個實例示例。
[mysqld]
mysqld-path=/usr/local/mysql/libexec/mysqld
socket=/tmp/mysql.sock
port=3307
server_id=1
skip-stack-trace
core-file
skip-bdb
log-bin
log-error
log=mylog
log-slow-queries
?
[mysqld2]
nonguarded
port=3308
server_id=2
mysqld-path= /home/cps/mysql/trees/mysql-5.1/sql/mysqld
socket???? = /tmp/mysql.sock5
pid-file?? = /tmp/hostname.pid5
datadir= /home/cps/mysql_data/data_dir1
language=/home/cps/mysql/trees/mysql-5.1/sql/share/english
log-bin
log=/tmp/fordel.log
### 5.2.5.?MySQL實例管理器識別的命令
一旦你已經為MySQL實例管理器設置了一個密碼文件并且IM正在運行,你可以連接它。你可以使用**mysql**客戶端工具通過標準MySQL API來連接。以下是MySQL實例管理器目前可以接收的命令的清單和例子。
·???????? START INSTANCE <instance_name>
該命令將試圖啟動一個實例:
mysql> START INSTANCE mysqld4;
Query OK, 0 rows affected (0,00 sec)
·???????? STOP INSTANCE <instance_name>
將試圖停止一個實例:
mysql> STOP INSTANCE mysqld4;
Query OK, 0 rows affected (0,00 sec)
·???????? SHOW INSTANCES
顯示所有載入的實例名:
mysql> show instances;
+---------------+---------+
| instance_name | status? |
+---------------+---------+
| mysqld3?????? | offline |
| mysqld4?????? | online? |
| mysqld2?????? | offline |
+---------------+---------+
3 rows in set (0,04 sec)
·???????? SHOW INSTANCE STATUS <instance_name>
顯示選定的實例的狀態和版本信息:
mysql> SHOW INSTANCE STATUS mysqld3;
+---------------+--------+---------+
| instance_name | status | version |
+---------------+--------+---------+
| mysqld3?????? | online | unknown |
+---------------+--------+---------+
1 row in set (0.00 sec)
·???????? SHOW INSTANCE OPTIONS <instance_name>
顯示實例使用的選項:
mysql> SHOW INSTANCE OPTIONS mysqld3;
+---------------+---------------------------------------------------+
| option_name?? | value???????????????????????????????????????????? |
+---------------+---------------------------------------------------+
| instance_name | mysqld3????????????????? ?????????????????????????|
| mysqld-path?? | /home/cps/mysql/trees/mysql-4.1/sql/mysqld??????? |
| port????????? | 3309????????????????????????????????????????????? |
| socket??????? | /tmp/mysql.sock3????????????????????????????????? |
| pid-file????? | hostname.pid3???????????????????????????????????? |
| datadir?????? | /home/cps/mysql_data/data_dir1/?????????????????? |
| language????? | /home/cps/mysql/trees/mysql-4.1/sql/share/english |
+---------------+---------------------------------------------------+
7 rows in set (0.01 sec)
·???????? SHOW <instance_name> LOG FILES
該命令提供實例使用的所有日志文件。結果包含日志文件的路徑和日志文件的大小。如果沒有在配置文件中指定日志文件的路徑 (例如log=/var/mysql.log),IM試圖猜出它的位置。如果IM不能猜出日志文件的位置,你應明確指定日志文件的位置。
mysql> SHOW mysqld LOG FILES;
+-------------+------------------------------------+----------+
| Logfile???? | Path?????????????????????????????? | Filesize |
+-------------+------------------------------------+----------+
| ERROR LOG?? | /home/cps/var/mysql/owlet.err????? | 9186???? |
| GENERAL LOG | /home/cps/var/mysql/owlet.log????? | 471503?? |
| SLOW LOG??? | /home/cps/var/mysql/owlet-slow.log | 4463???? |
+-------------+------------------------------------+----------+
3 rows in set (0.01 sec)
·???????? SHOW <instance_name> LOG {ERROR | SLOW | GENERAL} size[,offset_from_end]
該命令查找指定的日志文件的一部分。因為大多數用戶關注最新的日志消息,用size參數定義你想要從日志末尾開始索取的字節數。你可以指定可選offset_from_end參數從日志文件中部索取數據。下面的示例可以索取21個字節的數據,從日志文件末尾開始23個字節,2個字節用于結束:
mysql> SHOW mysqld LOG GENERAL 21, 2;
+---------------------+
| Log??????????????? ?|
+---------------------+
| using password: YES |
+---------------------+
1 row in set (0.00 sec)
·???????? SET instance_name.option_name=option_value
該命令編輯指定的實例的配置文件以更改/增加實例選項。IM假定配置文件位于/etc/my.cnf。你應檢查文件是否存在,并具有合適的權限。
mysql> SET mysqld2.port=3322;
Query OK, 0 rows affected (0.00 sec)
在MySQL服務器重啟前,對配置文件進行的更改不會生效。并且,執行FLUSH INSTANCES命令后,才會將這些更改保存到Instance Manager的實例設定值的本地緩存中。
·???????? UNSET instance_name.option_name
該命令從實例的配置文件刪除一個選項。
mysql> UNSET mysqld2.port;
Query OK, 0 rows affected (0.00 sec)
在MySQL服務器重啟前,對配置文件進行的更改不會生效。并且,執行FLUSH INSTANCES命令后,才會將這些更改保存到Instance Manager的實例設定值的本地緩存中。
·???????? FLUSH INSTANCES
該命令強制IM重讀配置文件并清空內部結構。編輯配置文件后應執行該命令。該命令不重啟實例:
mysql> FLUSH INSTANCES;
Query OK, 0 rows affected (0.04 sec)
### 5.3.?mysqld:MySQL服務器
[5.3.1. ** mysqld**命令行選項](#)[ 5.3.2. SQL服務器模式](#)[ 5.3.3. 服務器系統變量](#)[ 5.3.4. 服務器狀態變量](#)
**mysqld**是MySQL服務器。下面討論MySQL服務器的配置:
·???????? 服務器支持的啟動選項
·???????? 如何設置服務器SQL模式
·???????? 服務器系統變量
·???????? 服務器狀態變量
### 5.3.1.?**mysqld**命令行選項
當啟動**mysqld服務器**時,你可以使用[4.3節,“指定程序選項”](# "4.3.?Specifying Program Options")中描述的方法指定程序選項。最常用的方法是在選項文件中或在命令行提供選項。但是,在大多數情況下,希望服務器每次運行時使用相同的選項。最好的方法是確保將它們列在選項文件中。參見[4.3.2節,“使用選項文件”](# "4.3.2.?Using Option Files")。
**mysqld**從[mysqld]和[server]組讀取選項。**mysqld_safe**從[mysqld]、[server]、[mysqld_safe]和[safe_mysqld]組讀取選項。**mysql.server**從 [mysqld]和[mysql.server]組讀取選項。嵌入式MySQL服務器通常從[server]、[embedded]和[_xxxxx_SERVER_]組讀取選項,其中_xxxxx_是服務器嵌入的應用程序名。
**mysqld**接受許多命令行選項。執行**mysqld --help**可以簡單列出來。要想看全部列表列,使用命令**mysqld --verbose --help**。
下面列出了一些最常用的服務器選項。其它的選項在其它地方描述:
·???????? 影響安全的選項:參見[5.6.3節,“Mysqld安全相關啟動選項****”](# "5.6.3.?Startup Options for mysqld Concerning Security")。
·???????? SSL-相關選項:參見[5.8.7.6節,“SSL命令行選項”](# "5.8.7.6.?SSL Command-Line Options")。
·???????? 二進制日志控制選項:參見[5.11.3節,“二進制日志”](# "5.11.3.?The Binary Log")。
·???????? 復制相關選項:參見[6.8節,“復制啟動選項”](# "6.8.?Replication Startup Options")。
·???????? 特定存儲引擎相關選項:參見[15.1.1節,“MyISAM啟動選項”](# "15.1.1.?MyISAM Startup Options")、[15.5.3節,“BDB啟動選項”](# "15.5.3.?BDB Startup Options")和[15.2.4節,“InnoDB啟動選項”](# "15.2.4.?InnoDB Startup Options")。
你還可以將變量名作為一個選項,設置服務器系統變量的值,如本節后面所述。
·???????? --help,-?
顯示簡短的幫助消息并退出。使用--verbose和--help選項來看全部內容。
·???????? --allow-suspicious-udfs
該選項控制是否用戶定義的函數只有一個xxx符,用作可載入的主函數。默認情況下,該選項被關閉,只有至少有一個附屬符的UDF? 可以載入。這樣可以防止從未包含合法UDF的共享文件裝載函數。參見[27.2.3.6節,“用戶定義函數安全注意事項”](# "27.2.3.6.?User-Defined Function Security Precautions")。
·???????? --ansi
使用標準(ANSI)SQL語法代替MySQL語法。參見[1.8.3節,“在ANSI模式下運行MySQL”](# "1.8.3.?Running MySQL in ANSI Mode")。使用--sql-mode選項可以更精確控制服務器SQL模式。
·???????? --basedir=_path_, -b _path_
MySQL安裝目錄的路徑。通常所有路徑根據該路徑來解析。
·???????? --bind-address=_IP_
待綁定的IP地址。
·???????? --bootstrap
**mysql_install_db**腳本使用該選項來創建MySQL授權表,不需要啟動MySQL服務器。
·???????? --console
將錯誤日志消息寫入stderr和stdout,即使指定了--log-error。在Windows中,如果使用該選項,**mysqld**不關閉控制臺窗口。
·???????? --character-sets-dir=_path_
字符集安裝的目錄。參見[5.10.1節,“數據和排序用字符集”](# "5.10.1.?The Character Set Used for Data and Sorting")。
·???????? --chroot=path
通過chroot()系統調用在啟動過程中將**mysqld**服務器放入一個封閉環境中。這是推薦的一個安全措施。請注意使用該選項可以 限制LOAD DATA INFILE和SELECT ... INTO OUTFILE。
·???????? --character-set-server=_charset_
使用_charset_作為 默認服務器字符集。參見[5.10.1節,“數據和排序用字符集”](# "5.10.1.?The Character Set Used for Data and Sorting")。
·???????? --core-file
如果**mysqld**終止,寫內核文件。在某些系統中,你還必須為**mysqld_safe**指定--core-file-size 選項。參見[5.1.3節,“mysqld_safe:MySQL服務器啟動腳本”](# "5.1.3.?mysqld_safe — MySQL Server Startup Script")。請注意對于一些系統,例如Solaris,如果你使用--user選項不會獲得內核文件。
·???????? --collation-server=_collation_
使用_collation_作為 默認服務器校對規則。參見[5.10.1節,“數據和排序用字符集”](# "5.10.1.?The Character Set Used for Data and Sorting")。
·???????? --datadir=_path_, -h _path_
數據目錄的路徑。
·???????? --debug[=_debug_options_], -# [_debug_options_]
如果MySQL配置了--with-debug,你可以使用該選項來獲得一個跟蹤文件,跟蹤**mysqld**正進行的操作。_debug_options_字符串通常為'd:t:o,_file_name_'。參見[E.1.2節,“創建跟蹤文件”](# "E.1.2.?Creating Trace Files")。
·???????? (_DEPRECATED_) --default-character-set=_charset_
使用_char設置_作為 默認字符集。由于--character-set-server,反對使用該選項。參見[5.10.1節,“數據和排序用字符集”](# "5.10.1.?The Character Set Used for Data and Sorting")。
·???????? --default-collation=_collation_
使用_collation_作為默認校對規則。由于--collation-server,反對使用該選項。參見[5.10.1節,“數據和排序用字符集”](# "5.10.1.?The Character Set Used for Data and Sorting")。
·???????? --default-storage-engine=_type_
該選項為--default-table-type的同義詞。
·???????? --default-table-type=_type_
設置表的默認類型。參見[第15章:](#)[_存儲引擎和表類型_](# "Chapter?15.?Storage Engines and Table Types")。
·???????? --default-time-zone=_type_
設置默認服務器時區。該選項設置全局time_zone系統變量。如果未給出該選項, 默認時區與系統時區相同(用system_time_zone系統變量值給定)。
·???????? --delay-key-write[= OFF | ON | ALL]
如何使用DELAYED KEYS選項。鍵寫入延遲會造成再次寫MyISAM表時鍵緩沖區不能被清空。OFF禁用延遲的鍵寫入。ON啟用用DELAYED KEYS選項創建的表的延遲的鍵寫入。ALL延遲所有MyISAM表的鍵寫入。參見[7.5.2節,“調節服務器參數”](# "7.5.2.?Tuning Server Parameters")。參見[15.1.1節,“MyISAM啟動選項”](# "15.1.1.?MyISAM Startup Options")。
**注**釋:如果你將該變量設置為ALL,你不應從另一個正使用MyISAM表的程序中使用MyISAM表(例如從另一個MySQL服務器或用**myisamchk**)。這樣操作會導致索引破壞。
·???????? --des-key-file=_file_name_
從該文件讀DES_ENCRYPT()和DES_DECRYPT()使用的 默認鍵。
·???????? --enable-named-pipe
啟用命名管道支持。該選項只適用Windows NT、2000、XP和2003系統,并且只適用支持命名管道連接的**mysqld-nt**和**mysqld-max-nt**服務器。
?
·???????? --exit-info[=_flags_], -T [_flags_]
這是不同標志的一個位掩碼,你可以用來調試**mysqld服務器**。不要使用該選項,除非你_確切_知道它在做什么!
·???????? --external-locking
啟用系統鎖定。請注意如果你在lockd不能完全工作的系統上使用該選項(例如在Linux中),**mysqld**容易死鎖。該選項以前叫--enable-locking。
**注**釋:如果你在許多MySQL進程中使用該選項來更新MyISAM表,你必須確保滿足下述條件:
o??????? 使用正被另一個進程更新的表的查詢的緩存不可使用。
o??????? 不應在共享表中使用--delay-key-write=ALL或DELAY_KEY_WRITE=1。
最簡單的方法是結合使用--external-locking和--delay-key-write=OFF --query-cache-size=0。
(默認不能實現,因為在許多設置中,結合使用上述選項很有用)。
·???????? --flush
執行SQL語句后向硬盤上清空更改。一般情況執行SQL語句后 MySQL向硬盤寫入所有更改,讓操作系統處理與硬盤的同步。參見[A.4.2節,“如果MySQL依然崩潰,應作些什么”](# "A.4.2.?What to Do If MySQL Keeps Crashing")。
·???????? --init-file=_file_
啟動時從該文件讀SQL語句。每個語句必須在同一行中并且不應包括注釋。
·???????? --language=_lang_name_, -L _lang_name_
用給定語言給出客戶端錯誤消息。_lang_name_可以為語言名或語言文件安裝目錄的全路徑名。參見[5.10.2節,“設置錯誤消息語言”](# "5.10.2.?Setting the Error Message Language")。
·???????? --large-pages
一些硬件/操作系統架構支持大于 默認值(通常4 KB)的內存頁。實際支持取決于使用的硬件和OS。大量訪問內存的應用程序通過使用較大的頁,降低了Translation Lookaside Buffer (TLB)損失,可以改善性能。
目前,MySQL只在Linux中支持大頁面(在Linux中被稱作HugeTLB)。我們已經計劃將該支持擴展到FreeBSD、Solaris和其它可能的平臺。
在Linux中可以使用大頁面前,需要配置HugeTLB內存池。參考Linux內核源碼中的hugetlbpage.txt文件。
默認情況下該選項被禁用。
·???????? ---log[=_file_], -l [_file_]
日志連接和對文件的查詢。參見[5.11.2節,“通用查詢日志”](# "5.11.2.?The General Query Log")。如果你不指定文件名,MySQL使用_host_name_.log作為文件名。
·???????? --log-bin=[_file_]
二進制日志文件。將更改數據的所有查詢記入該文件。用于備份和復制。參見[5.11.3節,“二進制日志”](# "5.11.3.?The Binary Log")。建議指定一個文件名(原因參見[A.8.1節,“MySQL中的打開事宜”](# "A.8.1.?Open Issues in MySQL")),否則MySQL使用_host_name_-bin作為日志文件基本名。
·???????? --log-bin-index[=_file_]
二進制日志文件名的索引文件。參見[5.11.3節,“二進制日志”](# "5.11.3.?The Binary Log")。如果你不指定文件名,并且如果你沒有在--log-bin中指定,MySQL使用_host_name_-bin.index作為文件名。
·???????? --log-bin-trust-routine-creators[={0|1}]
沒有參數或參數為1,該選項將系統變量log_bin_trust_routine_creators設置為1。為參數 0時,該選項將系統變量設置為0。log_bin_trust_routine_creators影響MySQL如何對保存的程序的創建強加限制。參見[20.4節,“存儲子程序和觸發程序的二進制日志功能”](# "20.4.?Binary Logging of Stored Routines and Triggers")。
·???????? --log-error[=_file_]
該文件的日志錯誤和啟動消息。參見[5.11.1節,“錯誤日志”](# "5.11.1.?The Error Log")。如果你不指定文件名,MySQL使用_host_name.err_作為文件名。如果文件名沒有擴展名,則加上.err擴展名。
·???????? --log-isam[=_file_]
將所有MyISAM更改記入該文件(只有調試MyISAM時才使用)。
·???????? (_DEPRECATED_) --log-long-format
記錄激活的更新日志、二進制更新日志、和慢查詢日志的大量信息。例如,所有查詢的用戶名和時間戳將記錄下來。不贊成選用該選項,因為它現在代表 默認記錄行為。(參見--log-short-format描述)。--log-queries-not-using-indexes選項適合將未使用索引的查詢記錄到慢查詢日志中。
·???????? --log-queries-not-using-indexes
如果你結合--log-slow-queries使用該選項,未使用索引的查詢也被記錄到慢查詢日志中。參見[5.11.4節,“慢速查詢日志”](# "5.11.4.?The Slow Query Log")。
·???????? --log-short-format
記錄激活的更新日志、二進制更新日志、和慢查詢日志的少量信息。例如,用戶名和時間戳不記錄下來。
·???????? ---log-slow-admin-statements
將慢管理語句例如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE記入慢查詢日志。
·???????? --log-slow-queries[=_file_]
將所有執行時間超過long_query_time秒的查詢記入該文件。參見[5.11.4節,“慢速查詢日志”](# "5.11.4.?The Slow Query Log")。詳細信息參見--log-long-format和--log-short-format選項描述。
?
·???????? --log-warnings, -W
將警告例如Aborted connection...打印到錯誤日志。建議啟用該選項,例如,如果你使用復制 (你可以得到關于所發生事情的詳細信息,例如關于網絡故障和重新連接的消息)。默認情況下啟用該選項;要想禁用它,使用--skip-log-warnings。中斷的連接不會記入錯誤日志,除非值大于1。參見[A.2.10節,“通信錯誤和失效連接”](# "A.2.10.?Communication Errors and Aborted Connections")。
·???????? --low-priority-updates
表修改(INSERT, REPLACE, DELETE, UPDATE)比選擇的優先級要低。也可以通過{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ...來降低某個查詢的優先級來實現,或通過SET LOW_PRIORITY_UPDATES=1來更改一個線程的優先級。參見[7.3.2節,“表鎖定事宜”](# "7.3.2.?Table Locking Issues")。
·???????? ?--memlock
**將mysqld**進程鎖定在內存中。在支持mlockall()系統調用的系統上有效,例如Solaris。如果操作系統使**mysqld**在硬盤上交換時出現問題,可以為你提供幫助。請注意使用該選項時需要以root運行服務器,但從安全考慮并不是一個好注意。
·???????? --myisam-recover [=_option_[,_option_...]]]
將存儲引擎MyISAM設置為恢復模式。該選項值是DEFAULT、BACKUP、FORCE或QUICK值的任何組合。如果你指定多個值,用逗號間隔開。你還可以使用""值來禁用該選項。使用如果該選項,當**mysqld**打開MyISAM表時,檢查是否表標記為崩潰或沒有正確關閉。(只有用--skip-external-lockingare運行時,最后的選項才工作)。 如果是這種情況,**mysqld**則檢查 表。如果表被破壞,**mysqld**試圖維護它。
下面的選項影響維護工作:
<table border="1" cellpadding="0" id="table3"><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p><strong><span>選項</span></strong></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p><strong><span>描述</span></strong></p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>DEFAULT</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>與沒有使用<span>--myisam-recover</span>選項相同。</p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>BACKUP</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>如果在恢復過程中,數據文件被更改了,將<span><i><span>tbl_name</span></i><span>.MYD</span></span>文件備份為<span><i><span>tbl_name-datetime</span></i><span>.BAK</span></span>。</p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>FORCE</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>即使<span>.MYD</span>文件將丟掉多個行也進行恢復。</p></td> </tr><tr><td width="68" style="width:51.35pt;padding:.75pt .75pt .75pt .75pt"> <p> <span>QUICK</span></p></td> <td width="789" style="width:591.4pt;padding:.75pt .75pt .75pt .75pt"> <p>如果沒有刪除塊,不要檢查表中的行。</p></td> </tr></table>
在表自動修復前,MySQL錯誤日志添加一條注解。如果你不想用戶干涉干涉大多數問題,你應使用BACKUP,FORCE選項。該選項強制維護表,即使一些行將會被刪除也不例外,但它保持舊的數據文件做為備份,以便你可以在后來進行檢查。
·???????? --ndb-connectstring=_connect_string_
當使用NDB存儲引擎時,可以指出通過設置連接字符串選項來分發群集配置的管理服務器。相關語法參見[17.4.4.2節,“MySQL簇連接字符串”](# "17.4.4.2.?The MySQL Cluster connectstring")。
·???????? --ndbcluster
如果二進制支持NDB CLUSTER存儲引擎,使用該選項可以代替禁用MySQL Cluster支持的 默認設置。參見[第17章:](#)[_MySQL簇_](# "Chapter?17.?MySQL Cluster")。
·???????? --old-passwords
強制服務器為新密碼生成短(4.1前)密碼哈希。如果服務器必須支持舊客戶端程序,為保證兼容性這很有用。參見[5.7.9節,“MySQL 4.1中的密碼哈希處理”](# "5.7.9.?Password Hashing in MySQL 4.1")。
·???????? --one-thread
只使用一個線程(用于在Linux中調試)。只有服務器啟用了調試,該選項才可用。參見[E.1節,“調試MySQL服務器”](# "E.1.?Debugging a MySQL Server")。
·???????? --open-files-limit=_count_
用來更改**mysqld**文件描述符的數量。如果沒有設置或設置為0,則**mysqld**通過setrlimit()使用該值來保存文件描述符。如果該值為0,則**mysqld**保存max_connections*5或max_connections + table_cache*2(取較大者)個文件。如果**mysqld**給出你錯誤"打開的文件太多。",你應試試增加該值。
·???????? --pid-file=path
**mysqld_safe**使用的進程ID文件的路徑。
·???????? --port=_port_num_, -P _port_num_
幀聽TCP/IP連接時使用的端口號。
·???????? --safe-mode
跳過一些優化階段。
·???????? (_DEPRECATED_) --safe-show-database
參見[5.7.3節,“MySQL提供的權限”](# "5.7.3.?Privileges Provided by MySQL")。
·???????? --safe-user-create
啟用后如果用戶沒有mysql.user表或表中列的INSERT權限,則用戶不能用GRANT語句創建新用戶。
·???????? --secure-auth
不允許使用舊(4.1之前)密碼的賬戶進行鑒定。
·???????? --shared-memory
啟用本地客戶端的共享內存連接。該選項只用于Windows。
·???????? --shared-memory-base-name=_name_
共享內存連接名。該選項只用于Windows。
·???????? --skip-bdb
禁用BDB存儲引擎。這樣可以節省內存,并可能加速某些操作。如果你需要BDB表則不要使用該選項。
·???????? --skip-concurrent-insert
關閉在同一時間在MyISAM表中選擇和插入的能力。(只有你發現缺陷時才使用該選項)。
·???????? --skip-external-locking
不要使用系統鎖定。要想使用**myisamchk**,你必須關閉服務器。(參見[1.4.3節,“MySQL穩定性”](# "1.4.3.?MySQL Stability"))。 要避免該需求,使用MySQL Monitor中的CHECK TABLE和REPAIR TABLE來檢查并維護MyISAM表。
·???????? --skip-grant-tables
該選項使服務器不使用
- 前言
- 1. 一般信息
- 2. 安裝MySQL
- 3. 教程
- 4. MySQL程序概述
- 5. 數據庫管理
- 6. MySQL中的復制
- 7. 優化
- 8. 客戶端和實用工具程序
- 9. 語言結構
- 10. 字符集支持
- 11. 列類型
- 12. 函數和操作符
- 13. SQL語句語法
- 14. 插件式存儲引擎體系結構
- 15. 存儲引擎和表類型
- 16. 編寫自定義存儲引擎
- 17. MySQL簇
- 18. 分區
- 19. MySQL中的空間擴展
- 20. 存儲程序和函數
- 21. 觸發程序
- 22. 視圖
- 23. INFORMATION_SCHEMA信息數據庫
- 24. 精度數學
- 25. API和庫
- 26. 連接器
- 27. 擴展MySQL
- A. 問題和常見錯誤
- B. 錯誤代碼和消息
- C. 感謝
- D. MySQL變更史
- E. 移植到其他系統
- F. 環境變量
- G. MySQL正則表達式
- H. MySQL中的限制
- I. 特性限制
- J. GNU通用公共許可
- K. MySQL FLOSS許可例外
- 索引