亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問板塊 發(fā)新帖
樓主: luren04
打印 上一主題 下一主題

【申請(qǐng)加精】MySQL 5.1參考手冊(cè)  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
0
31 [報(bào)告]
發(fā)表于 2008-04-15 11:50 |只看該作者

2.9. 安裝后的設(shè)置和測(cè)試

安裝完MySQL后,有一些問題你應(yīng)當(dāng)處理。例如,在Unix中,你應(yīng)當(dāng)初始化數(shù)據(jù)目錄并創(chuàng)建MySQL授權(quán)表。對(duì)于所有平臺(tái),一個(gè)重要安全問題是 授權(quán)表中的初始賬戶沒有密碼。你應(yīng)當(dāng)指定密碼以防止未授權(quán)訪問MySQL服務(wù)器。你可以創(chuàng)建時(shí)區(qū)表以識(shí)別命名的時(shí)區(qū)。(目前,只在Unix上裝了這些表。不久將在Windows中解決該問題)。

下面章節(jié)包括適用Windows系統(tǒng)和Unix系統(tǒng)的安裝后的過程。另一節(jié),2.9.2.3節(jié),“啟動(dòng)MySQL服務(wù)器以及其故障診斷和排除”,適用所有平臺(tái);它描述了啟動(dòng)服務(wù)器時(shí)遇到問題時(shí)如何解決。2.9.3節(jié),“使初始MySQL賬戶安全”也適用所有平臺(tái)。你應(yīng)當(dāng)按照說明確保你已經(jīng)正確地為你的MySQL賬戶指定密碼來保護(hù)其安全。

如果你準(zhǔn)備創(chuàng)建其它用戶賬戶,你可以在5.7節(jié),“MySQL訪問權(quán)限系統(tǒng)”和5.8節(jié),“MySQL用戶賬戶管理”找到關(guān)于MySQL訪問控制系統(tǒng)和賬戶管理的信息。

論壇徽章:
0
32 [報(bào)告]
發(fā)表于 2008-04-15 11:50 |只看該作者
2.9.1. Windows下安裝后的過程
在Windows中,不需要?jiǎng)?chuàng)建數(shù)據(jù)目錄和授權(quán)表。MySQL Windows分發(fā)版包括在數(shù)據(jù)目錄下的MySQL數(shù)據(jù)庫(kù)中的一套預(yù)初始化的賬戶的 授權(quán)表。不要運(yùn)行Unix中使用的mysql_install_db腳本。但是,如果你沒有使用Windows Installation Wizard(安裝幫助)來安裝MySQL,應(yīng)當(dāng)為賬戶指定密碼。請(qǐng)參見2.3.4.1節(jié),“前言”。在2.9.3節(jié),“使初始MySQL賬戶安全”。

設(shè)置密碼前,你可能想要運(yùn)行一些客戶端程序來確保你能夠連接服務(wù)器,并且操作正確。確保服務(wù)器在運(yùn)行(參見2.3.10節(jié),“首次啟動(dòng)服務(wù)器”),然后發(fā)出下面的命令來驗(yàn)證你可以從服務(wù)器獲取信息。輸出應(yīng)當(dāng)類似于:

C:\> C:\mysql\bin\mysqlshow+-----------+| Databases |+-----------+| mysql     || test      |+-----------+ C:\> C:\mysql\bin\mysqlshow mysqlDatabase: mysql+--------------+|    Tables    |+--------------+| columns_priv || db           || func         || host         || tables_priv  || user         |+--------------+ C:\> C:\mysql\bin\mysql -e "SELECT Host,Db,User FROM db" mysql+------+-------+------+| host | db    | user |+------+-------+------+| %    | test% |      |+------+-------+------+如果你正運(yùn)行支持服務(wù)的Windows版本,你想讓MySQL服務(wù)器在Windows啟動(dòng)時(shí)自動(dòng)運(yùn)行,參見2.3.12節(jié),“以Windows服務(wù)方式啟動(dòng)MySQL”。

論壇徽章:
0
33 [報(bào)告]
發(fā)表于 2008-04-15 11:51 |只看該作者
2.9.2. Unix下安裝后的過程
2.9.2.1. 與運(yùn)行mysql_install_db有關(guān)的問題
2.9.2.2. 自動(dòng)啟動(dòng)和停止MySQL
2.9.2.3. 啟動(dòng)MySQL服務(wù)器以及其故障診斷和排除
在Unix上安裝MySQL后,需要初始化 授權(quán)表、啟動(dòng)服務(wù)器,并確保服務(wù)器工作正常。你還要讓服務(wù)器隨系統(tǒng)的啟動(dòng)和停止自動(dòng)啟動(dòng)和停止。應(yīng)當(dāng)為授權(quán)表中的賬戶指定密碼。

在Unix中,由mysql_install_db設(shè)置 授權(quán)表。在某些安裝中,該程序自動(dòng)運(yùn)行:

·         如果你使用RPM分發(fā)版在Linux上安裝MySQL,服務(wù)器RPM運(yùn)行mysql_install_db。

·         如果你使用PKG分發(fā)版在Mac OS X上安裝MySQL,安裝器運(yùn)行mysql_install_db。

否則,你需要自己運(yùn)行mysql_install_db。

下面的過程描述了如何初始化授權(quán)表 (如果還沒有初始化)并啟動(dòng)服務(wù)器。還推薦了一些你可以用來測(cè)試服務(wù)器是否可以訪問以及是否工作正確的命令。關(guān)于自動(dòng)啟動(dòng)和停止服務(wù)器的信息,參見2.9.2.2節(jié),“自動(dòng)啟動(dòng)和停止MySQL”。

你完成過程并讓服務(wù)器運(yùn)行后,你應(yīng)當(dāng)為mysql_install_db創(chuàng)建的賬戶指定密碼。2.9.3節(jié),“使初始MySQL賬戶安全”中列出了相關(guān)說明。

在本節(jié)的例子中,服務(wù)器用MySQL登錄賬戶的用戶ID運(yùn)行。假定存在這樣的賬戶。如果不存在,要么創(chuàng)建賬戶,或用其它已有的用來運(yùn)行服務(wù)器的登錄賬戶來替代。

1.    進(jìn)入MySQL的頂級(jí)安裝目錄,此處為BASEDIR:

2.            shell> cd BASEDIRBASEDIR可能為/usr/local/mysql 或/usr/local。以下步驟假定你位于該目錄。

3.    根據(jù)需要,運(yùn)行mysql_install_db 程序設(shè)置含有確定如何讓用戶連接服務(wù)器的權(quán)限的初始MySQL授權(quán)表。如果你使用的分發(fā)版類型不能運(yùn)行程序,你需要執(zhí)行該步驟。

典型,只有首次安裝MySQL時(shí),才需要運(yùn)行mysql_install_db,因此如果你升級(jí)已有的安裝你可以跳過該步驟,但mysql_install_db不會(huì)覆蓋已有的 授權(quán)表,因此可以在任何環(huán)境下安全運(yùn)行。

要想初始化授權(quán)表,根據(jù)mysql_install_db是位于bin還是scripts目錄下,使用下面的一個(gè)命令:

shell> bin/mysql_install_db --user=mysqlshell> scripts/mysql_install_db --user=mysqlmysql_install_db腳本創(chuàng)建數(shù)據(jù)目錄、擁有所有數(shù)據(jù)庫(kù)權(quán)限的mysql數(shù)據(jù)庫(kù)和可以用來測(cè)試MySQL的test數(shù)據(jù)庫(kù)。腳本為root賬戶和匿名用戶賬戶創(chuàng)建 授權(quán)表?xiàng)l目。賬戶一開始沒有密碼。2.9.3節(jié),“使初始MySQL賬戶安全”中描述了初始權(quán)限。簡(jiǎn)單說,這些權(quán)限允許MySQL root用戶執(zhí)行任何操作,允許任何人使用test名創(chuàng)建或使用數(shù)據(jù)庫(kù)或用test_啟動(dòng)。

一定要確保由mysql登錄賬戶擁有數(shù)據(jù)庫(kù)目錄和文件,以便在以后運(yùn)行時(shí) 服務(wù)器具有讀、寫訪問權(quán)限。為此,如果你用root用戶運(yùn)行mysql_install_db,應(yīng)當(dāng)使用--user選項(xiàng)。否則,當(dāng)以mysql登錄時(shí),應(yīng)當(dāng)執(zhí)行腳本,你可以省略命令中的--user選項(xiàng)。

mysql_install_db在mysql數(shù)據(jù)庫(kù)中創(chuàng)建幾個(gè)表,包括user、db、host、 tables_priv、columns_priv和func以及其它。5.7節(jié),“MySQL訪問權(quán)限系統(tǒng)”中有完整的列表和描述。

如果你不想要test數(shù)據(jù)庫(kù),啟動(dòng)服務(wù)器后,可以用mysqladmin -u root drop test卸掉。

如果有mysql_install_db相關(guān)問題,參見2.9.2.1節(jié),“與運(yùn)行mysql_install_db有關(guān)的問題”。

有一些選擇運(yùn)行mysql_install_db腳本,正如MySQL分發(fā)版中所提供的:

·         如果想讓初始權(quán)限與標(biāo)準(zhǔn)默認(rèn)值不同,你可以在運(yùn)行前修改mysql_install_db。然而,最好是在設(shè)置 授權(quán)表后使用GRANT和REVOKE來更改權(quán)限。換句話說,你可以運(yùn)行mysql_install_db,然后通過MySQL root用戶使用mysql -u rootMySQL來連接服務(wù)器,以便發(fā)出GRANT和REVOKE命令。

如果你想要在幾個(gè)機(jī)器上用相同的權(quán)限安裝MySQL,可以將GRANT和REVOKE語句放入一個(gè)文件中,以腳本方式執(zhí)行文件,運(yùn)行mysql_install_db之后使用mysql。例如:

shell> bin/ mysql_install_db --user=mysqlshell> bin/mysql -u root < your_script_file 這樣,你就可以避免在每臺(tái)機(jī)器上手動(dòng)發(fā)出命令。

·         完全可以重新創(chuàng)建授權(quán)表。如果你剛剛知道如何使用GRANT和REVOKE,并且運(yùn)行mysql_install_db 之后進(jìn)行了許多修改,想要關(guān)閉表重新啟動(dòng),你可能想要這樣操作。

要想重新創(chuàng)建授權(quán)表,從含有MySQL數(shù)據(jù)庫(kù)的目錄中移走所有 .frm、.MYI和 .MYD文件。(這是數(shù)據(jù)目錄下面的mysql目錄,當(dāng)你運(yùn)行mysqld --help 時(shí),列為datadir值)。然后再次運(yùn)行mysql_install_db 腳本。

·         可以使用--skip-grant-tables選項(xiàng)手動(dòng)啟動(dòng)mysqld,并使用mysql自己增加權(quán)限信息:

·                      shell> bin/mysqld_safe --user=mysql --skip-grant-tables &·                      shell> bin/mysql mysql手動(dòng)從mysql執(zhí)行mysql_install_db中的SQL命令。確保后面鑰運(yùn)行mysqladmin flush-privileges或mysqladmin reload,讓服務(wù)器重載授權(quán)表。

請(qǐng)注意不使用mysql_install_db,不僅需要手動(dòng)安裝授權(quán)表,還需要先創(chuàng)建。

4.    啟動(dòng)MySQL服務(wù)器:

5.                     shell> bin/mysqld_safe --user=mysql &一定要讓MySQL服務(wù)器使用非權(quán)限(non-root) 登錄賬戶運(yùn)行。為此,如果你以系統(tǒng)root運(yùn)行mysql_safe,應(yīng)當(dāng)使用--user選項(xiàng)。否則,你應(yīng)當(dāng)用mysql登錄到系統(tǒng)來執(zhí)行腳本,這樣可以省略命令中的--user選項(xiàng)。

A.3.2節(jié),“如何以普通用戶身份運(yùn)行MySQL”中給出了非特權(quán)用戶運(yùn)行MySQL的說明。

如果在執(zhí)行該步前你忘記了創(chuàng)建授權(quán)表,當(dāng)你啟動(dòng)服務(wù)器時(shí),在錯(cuò)誤日志文件中將出現(xiàn)下面的消息:

mysqld: Can't find file: 'host.frm'如果啟動(dòng)服務(wù)器時(shí)遇到其它問題,查閱2.9.2.3節(jié),“啟動(dòng)MySQL服務(wù)器以及其故障診斷和排除”。

6.    使用mysqladmin驗(yàn)證服務(wù)器在運(yùn)行中。以下命令提供了簡(jiǎn)單的測(cè)試,可檢查服務(wù)器是否已經(jīng)啟動(dòng)并能響應(yīng)連接:

7.            shell> bin/mysqladmin version8.            shell> bin/mysqladmin variables mysqladmin version的輸出根據(jù)平臺(tái)和MySQL版本的不同而稍有變化,但是應(yīng)當(dāng)類似于:

shell> bin/mysqladmin versionmysqladmin  Ver 8.41 Distrib 5.1.2-alpha, for pc-linux-gnu on i686Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult ABThis software comes with ABSOLUTELY NO WARRANTY. This is free software,and you are welcome to modify and redistribute it under the GPL license Server version          5.1.2-alpha-MaxProtocol version        10Connection              Localhost via UNIX socketUNIX socket             /var/lib/mysql/mysql.sockUptime:                 14 days 5 hours 5 min 21 sec Threads: 1  Questions: 366  Slow queries: 0  Opens: 0  Flush tables: 1  Open tables: 19  Queries per second avg: 0.000 要想看還可以怎樣使用mysqladmin,用-- help選項(xiàng)調(diào)用它。

9.    驗(yàn)證可以關(guān)閉服務(wù)器:

10.        shell> bin/mysqladmin -u root shutdown11.驗(yàn)證是否可以重啟服務(wù)器?梢灾苯邮褂胢ysqld_safe或調(diào)用mysqld。例如:

12.        shell> bin/mysqld_safe --user=mysql --log &如果mysqld_safe失敗,參見2.9.2.3節(jié),“啟動(dòng)MySQL服務(wù)器以及其故障診斷和排除”。

13.進(jìn)行一些簡(jiǎn)單的測(cè)試,驗(yàn)證你可以從服務(wù)器查詢信息。輸出應(yīng)當(dāng)類似于:

14.        shell> bin/mysqlshow15.        +-----------+16.        | Databases |17.        +-----------+18.        | mysql     |19.        | test      |20.        +-----------+21.         22.        shell> bin/mysqlshow mysql23.        Database: mysql24.        +---------------------------+25.        |          Tables           |26.        +---------------------------+27.        | columns_priv              |28.        | db                        |29.        | func                      |30.        | help_category             |31.        | help_keyword              |32.        | help_relation             |33.        | help_topic                |34.        | host                      |35.        | proc                      |36.        | procs_priv                |37.        | tables_priv               |38.        | time_zone                 |39.        | time_zone_leap_second     |40.        | time_zone_name            |41.        | time_zone_transition      |42.        | time_zone_transition_type |43.        | user                      |44.        +---------------------------+45.         46.        shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql47.        +------+--------+------+48.        | host | db     | user |49.        +------+--------+------+50.        | %    | test   |      |51.        | %    | test_% |      |52.        +------+--------+------+53.在sql-bench目錄(在MySQL安裝目錄下)中有一個(gè)基準(zhǔn)套件,可以用來比較MySQL在不同平臺(tái)上的執(zhí)行情況。基準(zhǔn)套件在Perl中編寫。它使用Perl DBI模塊來為各種數(shù)據(jù)庫(kù)提供一個(gè)與數(shù)據(jù)庫(kù)無關(guān)的接口,并且還需要其它Perl模塊來運(yùn)行基準(zhǔn)套件。必須安裝以下模塊:

54.        DBI55.        DBD::mysql56.        Data:umper57.        Data::ShowTable可以從CPAN(http://www.cpan.org/)獲得這些模塊。請(qǐng)參見2.13.1節(jié),“在Unix中安裝Perl”。

sql-bench/Results目錄包含了在不同數(shù)據(jù)庫(kù)和平臺(tái)上的各種運(yùn)行結(jié)果。要想進(jìn)行測(cè)試,執(zhí)行命令:

shell> cd sql-benchshell> perl run-all-tests如果沒有sql-bench目錄,你可能使用RPM文件安裝了MySQL,沒有使用源碼RPM。(源碼RPM包括sql-bench benchmark目錄)。 此時(shí),必須先安裝基準(zhǔn)套件后才能使用。有一個(gè)單獨(dú)的mysql-bench-VERSION-i386.rpm基準(zhǔn)RPM文件,其中包含了基準(zhǔn)代碼和數(shù)據(jù)。

如果你有源碼分發(fā)版,其tests子目錄中也有一些測(cè)試可供運(yùn)行。例如,要運(yùn)行auto_increment.tst,從源碼分發(fā)版的頂級(jí)目錄執(zhí)行該命令:

shell> mysql -vvf test < ./tests/auto_increment.tst期望的結(jié)果被顯示在“ ./tests/auto_increment.res”文件中。

58.至此,你應(yīng)當(dāng)可以運(yùn)行服務(wù)器了。然而,初始MySQL賬戶均沒有密碼,因此應(yīng)當(dāng)使用2.9.3節(jié),“使初始MySQL賬戶安全”中的說明來指定密碼。

MySQL 5.1安裝過程在MySQL數(shù)據(jù)庫(kù)中創(chuàng)建時(shí)區(qū)表。但是,必須手動(dòng)裝載表。相關(guān)說明參見5.10.8節(jié),“MySQL服務(wù)器時(shí)區(qū)支持”。

論壇徽章:
0
34 [報(bào)告]
發(fā)表于 2008-04-15 11:51 |只看該作者
2.9.2.1. 與運(yùn)行mysql_install_db有關(guān)的問題
mysql_install_db 腳本的目的是生成新的MySQL授權(quán)表。它不覆蓋已有的MySQL授權(quán)表,并且它不影響任何其它數(shù)據(jù)。

如果你想要重新創(chuàng)建授權(quán)表,首先停止mysqld服務(wù)器(如果它正運(yùn)行)。然后重新命名數(shù)據(jù)目錄下的MySQL目錄并保存,然后運(yùn)行mysql_install_db。例如:

shell> mv mysql-data-directory/mysql mysql-data-directory/mysql-oldshell> mysql_install_db --user=mysql本節(jié)列出了運(yùn)行mysql_install_db時(shí)你可能遇到的問題:

·         mysql_install_db fails to install the grant tables

你會(huì)發(fā)現(xiàn)mysql_install_db不能安裝 授權(quán)表,顯示下面的消息后終止:

Starting mysqld daemon with databases from XXXXXXmysqld ended在這種情況下,你應(yīng)該很小心地檢驗(yàn)日志文件!日志文件應(yīng)該位于目錄“XXXXXX”,用錯(cuò)誤消息命名,并且應(yīng)該指出為什么mysqld沒啟動(dòng)。如果你不理解發(fā)生的事情,郵寄一份錯(cuò)誤報(bào)告,包含日志文件!參見1.7.1.3節(jié),“如何通報(bào)缺陷和問題”。

·         已經(jīng)有一個(gè)amysqld進(jìn)程在運(yùn)行

表示服務(wù)器在運(yùn)行,這種情況下可能已經(jīng)創(chuàng)建了授權(quán)表。如果如此,則不再需要運(yùn)行mysql_install_db,因?yàn)橹恍枰\(yùn)行一次(當(dāng)你首次安裝MySQL時(shí))。

·         當(dāng)一個(gè)服務(wù)器正運(yùn)行時(shí),安裝第二個(gè)服務(wù)器不工作

這只有在當(dāng)你已經(jīng)有已存在的MySQL安裝但是想要把新安裝放在一個(gè)不同的地方時(shí)才會(huì)發(fā)生。例如,你可能已經(jīng)有了一個(gè)產(chǎn)品安裝,但為了測(cè)試想要同時(shí)運(yùn)行2個(gè)安裝。通常當(dāng)你試著運(yùn)行第二個(gè)服務(wù)器時(shí),發(fā)生的問題是它試圖和第一個(gè)使用同樣的套接字和端口。在這種情況下,你將遇到錯(cuò)誤消息:

Can't start server: Bind on TCP/IP port:Address already in useCan't start server: Bind on unix socket...關(guān)于設(shè)置多個(gè)服務(wù)器的說明,參見5.12節(jié),“在同一臺(tái)機(jī)器上運(yùn)行多個(gè)MySQL服務(wù)器”。

·         你沒有“ /tmp ”的寫權(quán)限

如果你沒有寫權(quán)限在默認(rèn)位置(在“/tmp”里)創(chuàng)建一個(gè)Unix套接字文件,或沒有在“/tmp”創(chuàng)建臨時(shí)文件的許可,在運(yùn)行mysql_install_db或mysqld服務(wù)器時(shí),你將遇到一個(gè)錯(cuò)誤。

你可以在開始mysql_install_db或mysqld之前執(zhí)行以下命令指定一個(gè)不同的Unix套接字文件位置和臨時(shí)目錄:

shell> TMPDIR=/some_tmp_dir/shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sockshell> export TMPDIR MYSQL_UNIX_PORTsome_tmp_dir應(yīng)該是你有寫許可的某個(gè)目錄的全路徑。

然后,你應(yīng)當(dāng)能夠用這些命令運(yùn)行mysql_install_db并啟動(dòng)服務(wù)器:

shell> bin/mysql_install_db --user=mysqlshell> bin/mysqld_safe --user=mysql &如果mysql_install_db位于scripts目錄下,首先修改命令scripts/mysql_install_db。

參見A.4.5節(jié),“如何保護(hù)或更改MySQL套接字文件/tmp/mysql.sock”。請(qǐng)參見附錄F:環(huán)境變量。

2.9.2.2. 自動(dòng)啟動(dòng)和停止MySQL
通常你可以用以下方法啟動(dòng)mysqld服務(wù)器:

·         直接調(diào)用mysqld。該方法適合任何平臺(tái)。

·         作為Windows服務(wù)運(yùn)行MySQL服務(wù)器?梢栽谥С址⻊(wù)的Windows版本(例如 NT、2000、XP和2003)上實(shí)現(xiàn)。可以將服務(wù)設(shè)置為在Windows 啟動(dòng)時(shí)自動(dòng)啟動(dòng)服務(wù)器,或根據(jù)需要啟動(dòng)的手動(dòng)服務(wù)。相關(guān)說明參見2.3.12節(jié),“以Windows服務(wù)方式啟動(dòng)MySQL”。

·         調(diào)用mysqld_safe,可以為mysqld確定正確的選項(xiàng)然后使用這些選項(xiàng)來運(yùn)行。該腳本適用于基于BSD Unix的系統(tǒng)。請(qǐng)參見5.1.3節(jié),“mysqld_safe:MySQL服務(wù)器啟動(dòng)腳本”。

·         調(diào)用mysql.server。該腳本主要用于使用系統(tǒng)V-style運(yùn)行目錄的系統(tǒng)的啟動(dòng)和關(guān)閉,它通常安裝到mysql下。mysql.server腳本調(diào)用mysqld_safe來啟動(dòng)服務(wù)器。請(qǐng)參見5.1.4節(jié),“mysql.server:MySQL服務(wù)器啟動(dòng)腳本”。

·         你可以在Mac OS X上安裝一個(gè)單獨(dú)的MySQL Startup Item安裝包來使系統(tǒng)啟動(dòng)時(shí)自動(dòng)啟動(dòng)MySQL。Startup Item調(diào)用mysql.server來啟動(dòng)服務(wù)器。詳細(xì)介紹參見 2.5節(jié),“在Mac OS X上安裝MySQL”。

mysql.server和mysqld_safe腳本和Mac OS X Startup Item可以用來手動(dòng)啟動(dòng)服務(wù)器,或自動(dòng)啟動(dòng)系統(tǒng)。mysql.server和Startup Item還可以用來停止服務(wù)器。

mysql.server腳本可以被用來啟動(dòng)或停止服務(wù)器,通過用start或stop參數(shù)調(diào)用它:

shell> mysql.server startshell> mysql.server stop在mysql.server啟動(dòng)服務(wù)器之前,它把目錄改變到MySQL安裝目錄,然后調(diào)用safe_mysqld。如果你想要作為一些特定的用戶運(yùn)行服務(wù)器,在/etc/my.cnf選項(xiàng)文件的[mysqld]組增加相應(yīng)user選項(xiàng),如本節(jié)后面所示。(如果你有在一個(gè)非標(biāo)準(zhǔn)的地點(diǎn)安裝的二進(jìn)制分發(fā)版,你可能需要編輯mysql.server。修改它,運(yùn)行safe_mysqld前,cd到正確的目錄。注意如果你修改mysql.server,那么某個(gè)時(shí)候升級(jí)MySQL時(shí),你的修改版本將被覆蓋,因此你應(yīng)該做一個(gè)你可重新安裝的編輯過的版本的拷貝)。

mysql.server stop通過向服務(wù)器發(fā)出一個(gè)信號(hào)停止它。你可手動(dòng)執(zhí)行mysqladmin shutdown關(guān)閉服務(wù)器。

要想在服務(wù)器上自動(dòng)啟動(dòng)和停止MySQL,應(yīng)在“/etc/rc * 文件中適當(dāng)?shù)牡胤皆黾訂?dòng)、停止命令。

如果你使用Linux服務(wù)器RPM安裝軟件包(MySQL-server-VERSION.rpm),mysql.server腳本安裝在/etc/init.d目錄中,名為MySQL。你不需要手動(dòng)安裝它。關(guān)于Linux RPM軟件包的詳細(xì)信息參見2.4節(jié),“在Linux下安裝MySQL”。

一些供應(yīng)商提供的RPM軟件包安裝的啟動(dòng)腳本名字不同,例如mysqld。

如果從不自動(dòng)安裝mysql.server的源碼分發(fā)版或二進(jìn)制分發(fā)版格式來安裝MySQL,可以手動(dòng)安裝它?梢栽贛ySQL安裝目錄下或MySQL 源碼樹的support-files目錄中找到腳本。

要想手動(dòng)安裝mysql.server,用名稱mysql將它復(fù)制到/etc/init.d目錄,然后將它變?yōu)榭蓤?zhí)行文件。只需要將位置更改為mysql.serveris所在并執(zhí)行這些命令的相應(yīng)目錄:

shell> cp mysql.server /etc/init.d/mysqlshell> chmod +x /etc/init.d/mysql舊的Red Hat系統(tǒng)使用/etc/rc.d/init.d目錄,不使用/etc/init.d。相應(yīng)地調(diào)節(jié)前面的命令。也可以首先創(chuàng)建指向/etc/rc.d/init.d的符號(hào)連接/etc/init.d:

shell> cd /etcshell> ln -s rc.d/init.d .安裝腳本后,用來激活它以便在系統(tǒng)啟動(dòng)時(shí)運(yùn)行所需要的命令取決于你的操作系統(tǒng)。在Linux中,你可以使用chkconfig:

shell> chkconfig --addMySQL在一些Linux系統(tǒng)中,還需要下面的命令來完全激活MySQL腳本:

shell> chkconfig --level 345MySQL on在FreeBSD中,啟動(dòng)腳本通常應(yīng)當(dāng)位于/usr/local/etc/rc.d/。手冊(cè)的rc(頁(yè)內(nèi)說明只有該目錄腳本的基本名匹配*.sh shell文件名模式,腳本才會(huì)執(zhí)行。目錄內(nèi)的其它文件或目錄將被忽略掉。換句話說,在FreeBSD中,應(yīng)當(dāng)將mysql.server腳本安裝為 /usr/local/etc/rc.d/mysql.server.sh以便自動(dòng)啟動(dòng)。

前面設(shè)置的另一種情況是,一些操作系統(tǒng)啟動(dòng)時(shí)也使用/etc/rc.local或/etc/init.d/boot.local 來啟動(dòng)其它服務(wù)。要想使用該方法啟動(dòng)MySQL,你可以在相應(yīng)啟動(dòng)文件后面追加一條命令:

/bin/sh -c 'cd /usr/local/mysql; ./bin/mysqld_safe --user=mysql &'對(duì)于其它系統(tǒng),查閱操作系統(tǒng)的文檔來查看安裝啟動(dòng)腳本的方法。

你也可以在一個(gè)全局“/etc/my.cnf”文件中增加mysql.server的選項(xiàng)。一個(gè)典型的“/etc/my.cnf”文件可能看起來像這樣:

[mysqld]datadir=/usr/local/mysql/varsocket=/var/tmp/mysql.sockport=3306user=mysql [mysql.server]basedir=/usr/local/mysqlmysql.server腳本使用下列變量:basedir、datadir和pid-file。定義后,必須將它們放到選項(xiàng)文件中,不能放到命令行。mysql.server只識(shí)別start和stop命令行參數(shù)。

下面的表顯示了服務(wù)器和每個(gè)啟動(dòng)腳本從選項(xiàng)文件讀取哪個(gè)選項(xiàng)組:

腳本
選項(xiàng)組

mysqld
[mysqld], [server], [mysqld-major-version]

mysql.server
[mysqld], [mysql.server], [server]

mysqld_safe
[mysqld], [server], [mysqld_safe]


[mysqld-major-version]意味著名為[mysqld-5.0]的組,[mysqld-5.1]用于版本為5.0.x、5.1.x等的服務(wù)器。該特性可以用來指定只被給定發(fā)布系列的服務(wù)器讀取的選項(xiàng)。

為了向后兼容,mysql.server還讀取[mysql_server]組,mysqld_safe還讀取[safe_mysqld]組。然而,當(dāng)使用MySQL 5.1時(shí),你應(yīng)當(dāng)更新選項(xiàng)文件,使用[mysql.server]和[mysqld_safe]組。

參見4.3.2節(jié),“使用選項(xiàng)文件”。

論壇徽章:
0
35 [報(bào)告]
發(fā)表于 2008-04-15 11:52 |只看該作者
2.9.2.3. 啟動(dòng)MySQL服務(wù)器以及其故障診斷和排除
如果啟動(dòng)服務(wù)器時(shí)有問題,可以嘗試:

·         指定你使用的儲(chǔ)存引擎需要的任何特殊選項(xiàng)。

·         確保服務(wù)器知道從哪里找到數(shù)據(jù)目錄。

·         確保服務(wù)器可以使用數(shù)據(jù)目錄。數(shù)據(jù)目錄和內(nèi)容的所有權(quán)和允許必須設(shè)置成服務(wù)器可以訪問和修改它們。

·         檢查錯(cuò)誤日志查看服務(wù)器為何不啟動(dòng)。

·         驗(yàn)證服務(wù)器想要使用的網(wǎng)絡(luò)接口可用。

一些儲(chǔ)存引擎有一些選項(xiàng)可以控制其行為。你可以創(chuàng)建一個(gè)my.cnf文件并為計(jì)劃使用的引擎設(shè)置啟動(dòng)選項(xiàng)。如果你將要使用支持事務(wù)處理表 (InnoDB,BDB)的儲(chǔ)存引擎,應(yīng)確保啟動(dòng)服務(wù)器之前按照你的期望對(duì)它們進(jìn)行了配置:

·         如果你正使用InnoDB表,參閱InnoDB-specific啟動(dòng)選項(xiàng)。如果你未指定選項(xiàng),InnoDB使用默認(rèn)值作為配置選項(xiàng)。請(qǐng)參見15.2.3節(jié),“InnoDB配置”。

·         如果你正使用BDB (Berkeley DB)表,你應(yīng)當(dāng)熟悉不同的BDB-specific啟動(dòng)選項(xiàng)。請(qǐng)參見15.5.3節(jié),“BDB啟動(dòng)選項(xiàng)”。

當(dāng)mysqld服務(wù)器啟動(dòng)時(shí),它進(jìn)入數(shù)據(jù)目錄。在這里它可以找到數(shù)據(jù)庫(kù)并寫入日志文件。在Unix中,服務(wù)器還在數(shù)據(jù)目錄中寫pid(過程 ID)文件。

當(dāng)編譯服務(wù)器時(shí)確定數(shù)據(jù)目錄。這是服務(wù)器默認(rèn)尋找數(shù)據(jù)目錄的位置。如果數(shù)據(jù)目錄位于系統(tǒng)中的其它位置,服務(wù)器不能正確工作。用--verbose和--help選項(xiàng)調(diào)用mysqld你可以找出默認(rèn)路徑設(shè)定值。

如果默認(rèn)值與你的系統(tǒng)中的MySQL安裝布局不匹配,你可以在命令行中為mysqld 或mysqld_safe指定選項(xiàng)來覆蓋它們。你還可以在選項(xiàng)文件中列出選項(xiàng)。

要想明顯指定數(shù)據(jù)目錄的位置,使用--datadir選項(xiàng)。一般情況下,你可以告訴mysqld基本目錄的位置,MySQL安裝在該目錄下,并且它在該目錄中尋找數(shù)據(jù)目錄。你可以使用--basedir選項(xiàng)來實(shí)現(xiàn)。

要想檢查指定路徑選項(xiàng)的結(jié)果,用--verbose和--help選項(xiàng)調(diào)用mysqld。例如,如果你進(jìn)入mysqld的安裝目錄,然后運(yùn)行下面的命令,它顯示啟動(dòng)服務(wù)器的結(jié)果,基本目錄為/usr/local:

shell> ./mysqld --basedir=/usr/local --verbose --help你可以指定其它選項(xiàng),例如--datadir,但是請(qǐng)注意--verbose和--help必須為最后的選項(xiàng)。

一旦你確定了你想要的路徑設(shè)定值,用--verbose和-- help啟動(dòng)服務(wù)器。

如果mysqld正在運(yùn)行,執(zhí)行下列命令你可以找出它所使用的路徑設(shè)定值:

shell> mysqladmin variables或:

shell> mysqladmin -h host_name variableshost_name是MySQL服務(wù)器主機(jī)的名稱。

如果啟動(dòng)mysqld時(shí)遇到Errcode 13(意味著Permission denied),這意味著數(shù)據(jù)目錄或其內(nèi)容的訪問權(quán)限不允許服務(wù)器訪問。此時(shí),你需要更改所調(diào)用文件和目錄的權(quán)限,使服務(wù)器有權(quán)使用它們。你還可以用root啟動(dòng)服務(wù)器,但是這樣會(huì)造成安全問題,應(yīng)當(dāng)避免。

在Unix中,進(jìn)入數(shù)據(jù)目錄,檢查數(shù)據(jù)目錄和其內(nèi)容的所有權(quán),確保服務(wù)器可以訪問。例如,如果數(shù)據(jù)目錄是/usr/local/mysql/var,使用命令:

shell> ls -la /usr/local/mysql/var如果數(shù)據(jù)目錄或其文件或子目錄不屬于你運(yùn)行服務(wù)器使用的賬戶,將所有權(quán)改為該賬戶:

shell> chown –R mySQL /usr/local/mysql/varshell> chgrp –R mySQL /usr/local/mysql/var如果服務(wù)器不能正確啟動(dòng),檢查錯(cuò)誤日志文件,看看是否可以找到原因。日志文件位于數(shù)據(jù)目錄(在Windows中一般為C:\Program Files\MySQL\MySQL Server 5.1\data,Unix二進(jìn)制分發(fā)版為/usr/local/mysql/data,Unix源碼分發(fā)版為/usr/local/var)。查找數(shù)據(jù)目錄中的host_name.err和host_name.log文件,其中host_name是你的服務(wù)器主機(jī)名。然后檢查文件的最后幾行。在Unix中,可以使用tail來顯示:

shell> tail host_name.errshell> tail host_name.log錯(cuò)誤日志包含指示服務(wù)器不能啟動(dòng)的信息。例如,你可以看見日志中:

000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory000729 14:50:10  Can't init databases這意味著你沒有用--bdb-no-recover選項(xiàng)啟動(dòng)mysqld,Berkeley DB恢復(fù)數(shù)據(jù)庫(kù)時(shí)發(fā)現(xiàn)其日志文件有一些問題。要想繼續(xù),你應(yīng)當(dāng)將舊的Berkeley DB 日志文件從數(shù)據(jù)庫(kù)目錄移到其它地方,以后你可以在那兒檢查它們。BDB日志文件以log.0000000001開頭,按順序命名。

如果你運(yùn)行支持BDB 表的mysqld,mysqld啟動(dòng)時(shí)內(nèi)核崩潰,該可能是由于BDB 恢復(fù)日志的問題。此時(shí),你可以嘗試用--bdb-no-recover啟動(dòng)mysqld。如果有幫助,你應(yīng)當(dāng)從數(shù)據(jù)目錄移走所有BDB日志文件并嘗試不用--bdb-no-recover選項(xiàng)重新啟動(dòng)mysqld。

如果出現(xiàn)下面的錯(cuò)誤,說明其它程序(也許是另一個(gè)mysqld服務(wù)器)正使用mysqld正試圖使用的TCP/IP端口或Unix 套接字文件:

Can't start server: Bind on TCP/IP port: Address already in useCan't start server: Bind 在Unix中 socket...使用ps來確定是否另有一個(gè)mysqld服務(wù)器正在運(yùn)行。如果如此,關(guān)閉服務(wù)器重新啟動(dòng)mysqld。(如果另一個(gè)服務(wù)器正運(yùn)行,你的確想要運(yùn)行多個(gè)服務(wù)器,你可以在5.12節(jié),“在同一臺(tái)機(jī)器上運(yùn)行多個(gè)MySQL服務(wù)器”中發(fā)現(xiàn)相關(guān)信息)。

如果沒有其它服務(wù)器在運(yùn)行,嘗試執(zhí)行命令 telnet your-host-name tcp-ip-port-number。(默認(rèn)MySQL端口號(hào)是3306)。然后按兩次Enter(回車)鍵。如果出現(xiàn)telnet: Unable to connect to remote host: Connection refused錯(cuò)誤消息,其它程序正使用mysqld試圖使用的 TCP/IP端口。你需要跟蹤這是哪個(gè)程序并禁用它,或讓mysqld用--port選項(xiàng)幀聽其它端口。此時(shí),當(dāng)通過TCP/IP協(xié)議連接服務(wù)器時(shí),你還需要為客戶端程序指定端口號(hào)。

端口不能訪問的另一個(gè)原因可能是防火墻正運(yùn)行,阻擋了與它的連接。如果如此,修改防火墻設(shè)置允許對(duì)該端口的訪問。

如果服務(wù)器已經(jīng)啟動(dòng)但是你不能與它連接,你應(yīng)當(dāng)確保在/etc/hosts中有下面所示條目:

127.0.0.1       localhost該問題只發(fā)生在沒有工作線程庫(kù),并且MySQL必須配置為使用MIT-pthreads的系統(tǒng)。

如果你不能啟動(dòng)mysqld,你可以使用--debug選項(xiàng)嘗試編寫一個(gè)跟蹤文件來找到問題。請(qǐng)參見E.1.2節(jié),“創(chuàng)建跟蹤文件”。

關(guān)于在Windows安裝中排錯(cuò)的詳細(xì)信息,參見2.3.14節(jié),“在Windows環(huán)境下對(duì)MySQL安裝的故障診斷與排除”。

論壇徽章:
0
36 [報(bào)告]
發(fā)表于 2008-04-15 11:52 |只看該作者
2.9.3. 使初始MySQL賬戶安全
MySQL安裝過程包括設(shè)置含有授權(quán)表的MySQL數(shù)據(jù)庫(kù):

·         Windows分發(fā)版包含預(yù)初始化的授權(quán)表,可以自動(dòng)安裝。

·         在Unix中,用mysql_install_db程序來安裝 授權(quán)表?梢酝ㄟ^一些安裝方法來運(yùn)行該程序。否則你需要手動(dòng)執(zhí)行。詳細(xì)信息參見2.9.2節(jié),“Unix下安裝后的過程”。

授權(quán)表定義了初始MySQL用戶賬戶和訪問權(quán)限。按照以下步驟對(duì)這些賬戶進(jìn)行設(shè)置:

·         用用戶root 創(chuàng)建兩個(gè)賬戶。這些賬戶為超用戶賬戶,可以執(zhí)行任何操作。初始root賬戶的密碼為空,因此任何人可以用root賬戶不用任何密碼來連接MySQL服務(wù)器,并具有所有權(quán)限。

o        在Windows中,一個(gè)root賬戶用來從本機(jī)連接MySQL服務(wù)器,另一個(gè)允許從任何主機(jī)連接。

o        在Unix中,兩個(gè)root賬戶均用于從本機(jī)連接。必須從本機(jī)進(jìn)行連接,一個(gè)賬戶主機(jī)名應(yīng)指定為localhost,另一個(gè)賬戶為實(shí)際的主機(jī)名或IP號(hào)。

·         創(chuàng)建了兩個(gè)匿名用戶賬戶,每個(gè)賬戶的用戶名均為空。匿名賬戶沒有密碼,因此任何人可以使用匿名賬戶來連接MySQL服務(wù)器。

o        在Windows中,一個(gè)匿名賬戶用來從本機(jī)進(jìn)行連接。它具有所有權(quán)限,同root 賬戶一樣。另一個(gè)可以從任何主機(jī)上連接,具有test數(shù)據(jù)庫(kù)或其它以test開始的數(shù)據(jù)庫(kù)的所有權(quán)限。

o        在Unix中,兩個(gè)匿名賬戶均用于從本機(jī)連接。必須從本機(jī)進(jìn)行連接,一個(gè)賬戶主機(jī)名應(yīng)指定為localhost,另一個(gè)賬戶為實(shí)際的主機(jī)名或IP號(hào)。兩個(gè)賬戶具有test數(shù)據(jù)庫(kù)或其它以test開始的數(shù)據(jù)庫(kù)的所有權(quán)限。

如前面所述,所有初始賬戶均沒有密碼。這意味著在你執(zhí)行下述操作前,MySQL安裝未受保護(hù):

·         如果你想要防止客戶端不使用密碼用匿名用戶來連接,你應(yīng)當(dāng)為匿名賬戶指定密碼或刪掉匿名賬戶。

·         你應(yīng)當(dāng)為MySQL root賬戶指定密碼。

下面的說明描述了如何為初始MySQL賬戶設(shè)置密碼,先為匿名賬戶設(shè)置然后為root賬戶設(shè)置。在例子中用實(shí)際密碼替換“newpwd”。說明還包括如果你不想用匿名賬戶訪問,如何刪掉匿名賬戶。

你可能想要在以后設(shè)置密碼,因此不需要在進(jìn)一步的設(shè)置或測(cè)試中指定密碼。但是,一定要在實(shí)際生產(chǎn)作業(yè)、使用安裝前設(shè)置好密碼。

要想為匿名賬戶指定密碼,可以使用SET PASSWORD或UPDATE。在兩種情況中,一定要使用PASSWORD()函數(shù)為密碼加密。

在Windows中使用PASSWORD的方法:

shell> mysql -u rootmysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');在Unix中使用PASSWORD的方法:

shell> mysql -u rootmysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');用服務(wù)器主機(jī)名替換第二個(gè)SET PASSWORD語句中的host_name。這是指定的user表中的root non-localhost記錄的Host列名。如果你不知道是哪個(gè)主機(jī)名,在SET PASSWORD之前執(zhí)行下面的語句:

mysql> SELECT Host, User FROM mysql.user;查找在User列有root和在Host列沒有l(wèi)ocalhost的記錄。然后在第二個(gè)SET PASSWORD語句中使用該Host值。

為匿名賬戶指定密碼的另一種方法是使用UPDATE直接修改用戶表。用root連接服務(wù)器,運(yùn)行UPDATE語句為相應(yīng)user表記錄的Password列指定一個(gè)值。在Windows和Unix中的過程是相同的。下面的UPDATE語句同時(shí)為兩個(gè)匿名賬戶指定密碼:

shell> mysql -u rootmysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')    ->     WHERE User = '';mysql> FLUSH PRIVILEGES;在user表中直接使用UPDATE更新密碼后,必須讓服務(wù)器用FLUSH PRIVILEGES重新讀授權(quán)表。否則,重新啟動(dòng)服務(wù)器前,不會(huì)使用更改。

如果你寧愿刪除匿名賬戶,操作方法是:

shell> mysql -u rootmysql> DELETE FROM mysql.user WHERE User = '';mysql> FLUSH PRIVILEGES;可以在Windows和Unix中使用DELETE語句。在Windows中,如果你只想刪掉具有與root相同權(quán)限的匿名賬戶,方法為:

shell> mysql -u rootmysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';mysql> FLUSH PRIVILEGES;該賬戶允許匿名訪問,但是擁有全部的權(quán)限,因此刪掉它可以提高安全。

你可以用幾種方法為root賬戶指定密碼。以下介紹了三種方法:

·         使用SET PASSWORD語句

·         使用mysqladmin命令行客戶端程序

·         使用UPDATE語句

要想使用SET PASSWORD指定密碼,用root連接服務(wù)器并執(zhí)行兩個(gè)SET PASSWORD語句。一定要使用PASSWORD()函數(shù)來加密密碼。

在Windows中的語句:

shell> mysql -u rootmysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');在Unix中的語句:

shell> mysql -u rootmysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');用服務(wù)器主機(jī)名替換第二個(gè)SET PASSWORD語句中的host_name。這是你指定匿名賬戶密碼的主機(jī)名。

要想使用mysqladmin為root賬戶指定密碼,執(zhí)行下面的命令:

  shell> mysqladmin -u root password "newpwd"  shell> mysqladmin -u root -h host_name password "newpwd"上述命令適用于Windows和Unix。用服務(wù)器主機(jī)名替換第二個(gè)命令中的host_name。不一定需要將密碼用雙引號(hào)引起來,但是你如果密碼中包含空格或?qū)S糜诿罱忉尩钠渌址,則需要用雙引號(hào)引起來。

你還可以使用UPDATE直接修改user表。下面的UPDATE語句可以同時(shí)為兩個(gè)root賬戶指定密碼:

shell> mysql -u rootmysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')    ->     WHERE User = 'root';mysql> FLUSH PRIVILEGES;UPDATE語句適用于Windows和Unix。

設(shè)置完密碼后,當(dāng)你連接服務(wù)器時(shí)你必須提供相應(yīng)密碼。例如,如果你想要用mysqladmin 關(guān)閉服務(wù)器,可以使用下面的命令:

shell> mysqladmin -u root -p shutdownEnter password: (enter root password here)注釋:如果你設(shè)置了root密碼后忘記了密碼,從A.4.1節(jié),“如何復(fù)位根用戶密碼”中查閱重設(shè)密碼的方法。

你可以使用GRANT語句設(shè)置新賬戶。相關(guān)說明參見5.8.2節(jié),“向MySQL增加新用戶賬戶”。

論壇徽章:
0
37 [報(bào)告]
發(fā)表于 2008-04-15 11:53 |只看該作者

2.10. 升級(jí)MySQL

做為一般原則,我們建議從一個(gè)發(fā)布系列升級(jí)到另一個(gè)發(fā)布系列時(shí),你應(yīng)當(dāng)先升級(jí)到它的下一個(gè)系列而不要跳過。例如,如果你目前正運(yùn)行MySQL 3.23,想要升級(jí)到較新的系列,要升級(jí)到MySQL 4.0而不要升級(jí)到5.0或5.1。

下面的項(xiàng)列出了升級(jí)時(shí)的相關(guān)信息:

·         從MySQL 5.0升級(jí)到5.1前,請(qǐng)閱讀2.10.1節(jié),“從5.0版升級(jí)”和附錄D:MySQL變更史。其中提供了MySQL 5.1相對(duì)于MySQL 5.0的新特性或不同特性。如果你想要從MySQL 5.0以前的發(fā)布系列升級(jí),應(yīng)當(dāng)依次升級(jí)到下一個(gè)發(fā)布系列,直到達(dá)到MySQL 5.0,然后再升級(jí)到MySQL 5.1。關(guān)于從MySQL 5.0升級(jí)的信息,參見MySQL 5.0 參考手冊(cè);對(duì)于更早的發(fā)布,參見MySQL 4.1參考手冊(cè)。

·         在升級(jí)前應(yīng)先備份數(shù)據(jù)庫(kù)。

·         如果在Windows中運(yùn)行MySQL服務(wù)器,參見2.3.15節(jié),“在Windows下升級(jí)MySQL”。

·         從MySQL 5.0升級(jí)到5.1更改MySQL數(shù)據(jù)庫(kù)中的 授權(quán)表;增加了列和表以支持新功能。為了充分利用這些特性,應(yīng)確保授權(quán)表是最新的。升級(jí)授權(quán)表的過程參見2.10.2節(jié),“升級(jí)授權(quán)表”。在升級(jí)前,你可能想要使用mysqldump來轉(zhuǎn)儲(chǔ)表;升級(jí)后,可以使用mysql或mysqlimport重建、重裝 授權(quán)表來重載dump(備份)文件。

·         如果你正復(fù)制,關(guān)于升級(jí)復(fù)制設(shè)置的信息參見6.6節(jié),“升級(jí)復(fù)制設(shè)置”。

·         如果安裝包括mysqld-max服務(wù)器的MySQL-Max分發(fā)版,則后面要升級(jí)到非Max版的MySQL,mysqld_safe仍然試圖運(yùn)行舊的mysqld-max服務(wù)器。如果升級(jí),應(yīng)當(dāng)手動(dòng)刪掉舊的mysqld-max服務(wù)器以確保mysqld_safe運(yùn)行新的mysqld服務(wù)器。

只要你的MySQL版本屬于相同的發(fā)布系列,總是可以在不同的版本之間的相同架構(gòu)上移動(dòng)MySQL格式文件和數(shù)據(jù)文件。目前的產(chǎn)品發(fā)布系列是5.1。如果運(yùn)行MySQL時(shí)更改字符集,必須對(duì)所有MyISAM表運(yùn)行myisamchk -r -q --set-character-set=charset。否則,索引順序?qū)?huì)出錯(cuò),因?yàn)楦淖址矔?huì)更改排序。

如果你使用新版本時(shí)比較小心,在安裝新的MySQL前可以重新命名舊的mysqld。例如,如果你想要從MySQL 5.0.13升級(jí)到5.1.10, 將當(dāng)前的服務(wù)器從mysqld重新命名為mysqld-5.0.13。如果新的mysqld出現(xiàn)問題,只需要關(guān)閉并用舊的mysqld重新啟動(dòng)。

升級(jí)后,如果你遇到重新編譯的客戶端程序問題,例如Commands out of sync或不期望的內(nèi)核轉(zhuǎn)儲(chǔ),可能是編譯程序時(shí)使用了舊的頭文件或庫(kù)文件。出現(xiàn)這種情況,應(yīng)當(dāng)檢查mysql.h文件和libmysqlclient.a庫(kù)的日期,以驗(yàn)證它們是否來自新的MySQL分發(fā)版。如果不是,用新的頭文件和庫(kù)重新編譯程序。

如果出現(xiàn)問題,例如新mysqld服務(wù)器不啟動(dòng)或沒有密碼不能連接,驗(yàn)證是否使用了以前安裝的舊my.cnf文件?梢杂--print-defaults選項(xiàng)檢查(例如,mysqld --print-defaults)。如果顯示程序名之外的其它內(nèi)容,說明有一個(gè)活動(dòng)my.cnf文件影響了服務(wù)器或客戶端操作。

當(dāng)安裝新的MySQL發(fā)布時(shí),最好重建并重裝Perl DBD::mysql 模塊。同樣適用于其它MySQL接口,例如PHP mysql擴(kuò)展名和Python MySQLdb模塊。

2.10.1. 從5.0版升級(jí)
當(dāng)從5.0升級(jí)到5.0.10或更高版本時(shí)請(qǐng)注意必須運(yùn)行mysql_fix_privilege_tables(或在Windows中運(yùn)行mysql_fix_privilege_tables.sql)。否則,不能創(chuàng)建保存的過程。相關(guān)過程參見2.10.2節(jié),“升級(jí)授權(quán)表”。

2.10.2. 升級(jí)授權(quán)表
一些發(fā)布對(duì)授權(quán)表(MySQL數(shù)據(jù)庫(kù)中的表)的結(jié)構(gòu)進(jìn)行了更改以增加新的權(quán)限或特性。當(dāng)你更新到新版本 MySQL時(shí),要想確保授權(quán)表最新,應(yīng)當(dāng)運(yùn)行mysql_fix_privilege_tables腳本來更新 授權(quán)表。相關(guān)過程參見5.4節(jié),“mysql_fix_privilege_tables:升級(jí)MySQL系統(tǒng)表”。

如果你從MySQL 4.1或更早版本升級(jí),授權(quán)表升級(jí)過程為CREATE VIEW和SHOW VIEW權(quán)限增加了視圖相關(guān)的列。這些權(quán)限位于全局和數(shù)據(jù)庫(kù) 級(jí)。在這種情況下,MySQL 5.1版MySQL_fix_privilege_ tables將user表中的Create_priv值復(fù)制到Create_view_priv和 Show_view_priv列。

2.10.3. 將MySQL數(shù)據(jù)庫(kù)拷貝到另一臺(tái)機(jī)器
你可以在支持相同浮點(diǎn)格式的不同架構(gòu)之間為MyISAM表復(fù)制.frm、.MYI和.MYD文件。(MySQL關(guān)注所有字節(jié)交換問題)。請(qǐng)參見15.1節(jié),“MyISAM存儲(chǔ)引擎”。

如果你需要在不同的架構(gòu)之間轉(zhuǎn)移數(shù)據(jù)庫(kù),可以使用mysqldump創(chuàng)建含有SQL語句的文件。然后你可以將文件轉(zhuǎn)移到其它機(jī)器上,并將它輸入到MySQL客戶端。

使用mysqldump --help來看有哪些選項(xiàng)可用。如果你正將數(shù)據(jù)移動(dòng)到更新版本的MySQL,你應(yīng)當(dāng)使用mysqldump –opt來利用各種優(yōu)化性能來產(chǎn)生更小、可以更快處理的轉(zhuǎn)儲(chǔ)文件。

在兩臺(tái)機(jī)器之間移動(dòng)數(shù)據(jù)庫(kù)的最簡(jiǎn)單(盡管不是最快)的方法是在數(shù)據(jù)庫(kù)所在的機(jī)器上運(yùn)行下面的命令:

shell> mysqladmin -h 'other_hostname' create db_nameshell> mysqldump --opt db_name | mysql -h 'other_hostname' db_name如果你想要從遠(yuǎn)程機(jī)器通過慢速網(wǎng)絡(luò)復(fù)制數(shù)據(jù)庫(kù),可以使用:

shell> mysqladmin create db_nameshell> mysqldump -h 'other_hostname' --opt --compress db_name | mysql db_name還可以將結(jié)果保存到文件中,然后將文件轉(zhuǎn)移到目標(biāo)機(jī)器上并將文件裝載到數(shù)據(jù)庫(kù)中。例如,可以在源機(jī)器上使用下面的命令將數(shù)據(jù)庫(kù)備份到文件中:

shell> mysqldump --quick db_name | gzip > db_name.contents.gz(該例子中創(chuàng)建的文件是壓縮格式)。將含有數(shù)據(jù)庫(kù)內(nèi)容的文件到目標(biāo)機(jī)上并運(yùn)行命令:

shell> mysqladmin create db_nameshell> gunzip < db_name.contents.gz | mysql db_name還可以使用mysqldump和mysqlimport來轉(zhuǎn)移數(shù)據(jù)庫(kù)。對(duì)于大的表,比只是使用mysqldump要快得多。在下面的命令中,DUMPDIR代表用來保存mysqldump輸出的目錄全路徑名。

首先,創(chuàng)建保存輸出文件的目錄并備份數(shù)據(jù)庫(kù):

shell> mkdir DUMPDIRshell>mysqldump --tab=DUMPDIR db_name然后將DUMPDIR目錄中的文件轉(zhuǎn)移到目標(biāo)機(jī)上相應(yīng)的目錄中并將文件裝載到MySQL:

shell> mysqladmin create db_name           # create databaseshell> cat DUMPDIR/*.sql | mysql db_name   # create tables in databaseshell> mysqlimport db_name DUMPDIR/*.txt   # load data into tables不要忘記復(fù)制MySQL數(shù)據(jù)庫(kù),因?yàn)槭跈?quán)表保存在該數(shù)據(jù)庫(kù)中。你可能需要在新機(jī)器上用MySQL root用戶運(yùn)行命令,直到產(chǎn)生MySQL數(shù)據(jù)庫(kù)。

將mysql數(shù)據(jù)庫(kù)導(dǎo)入目標(biāo)機(jī)器后,執(zhí)行mysqladmin flush-privileges,以便服務(wù)器重載授權(quán)表信息。

論壇徽章:
0
38 [報(bào)告]
發(fā)表于 2008-04-15 11:55 |只看該作者

2.11. 降級(jí)MySQL

本節(jié)描述了舊版本MySQL比新版本工作得好的情況下,如何降級(jí)到舊的MySQL版本。

如果你在同一發(fā)布系列(例如,從 5.0.13 到5.0.12)內(nèi)降級(jí),一般規(guī)則是只需要在舊版本的頂部安裝新的二進(jìn)制。不需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何操作。但是,最好是先進(jìn)行備份。

下面的項(xiàng)列出了進(jìn)行降級(jí)時(shí)應(yīng)執(zhí)行的操作:

·         閱讀你將要降級(jí)的發(fā)布系列的升級(jí)部分,確定它沒有你需要的功能。2.10節(jié),“升級(jí)MySQL”。

·         如果該版本有降級(jí)部分,你也應(yīng)當(dāng)閱讀。

只要MySQL版本屬于相同的發(fā)布系列,你總是可以在不同的版本之間的相同架構(gòu)上移動(dòng)MySQL格式文件和數(shù)據(jù)文件。目前的產(chǎn)品發(fā)布系列是5.1。

如果你從一個(gè)發(fā)布系列降級(jí)到另一個(gè)發(fā)布系列,表儲(chǔ)存格式可能不兼容。在這種情況下,你可以在降級(jí)嵌使用mysqldump來轉(zhuǎn)儲(chǔ)表。降級(jí)后,使用mysql或mysqlimport重載轉(zhuǎn)儲(chǔ)文件來重新創(chuàng)建表。請(qǐng)參見2.10.3節(jié),“將MySQL數(shù)據(jù)庫(kù)拷貝到另一臺(tái)機(jī)器”。

表格式不向下兼容的一般跡象是降級(jí)時(shí)不能打開表。在這種情況下,使用下面的過程:

1.    停止你想要降級(jí)到的舊的MySQL服務(wù)器。

2.    重新啟動(dòng)將被降級(jí)的新的MySQL服務(wù)器。

3.    使用mysqldump創(chuàng)建一個(gè)dump(轉(zhuǎn)儲(chǔ))文件來轉(zhuǎn)儲(chǔ)不能被舊服務(wù)器訪問的所有表。

4.    停止新MySQL服務(wù)器,重新啟動(dòng)舊MySQL服務(wù)器。

將dump(轉(zhuǎn)儲(chǔ))文件重載入舊服務(wù)器。表應(yīng)當(dāng)可訪問。

論壇徽章:
0
39 [報(bào)告]
發(fā)表于 2008-04-15 11:56 |只看該作者

2.12. 具體操作系統(tǒng)相關(guān)的注意事項(xiàng)

2.12.1. Linux注意事項(xiàng)
本節(jié)討論發(fā)現(xiàn)的在Linux中出現(xiàn)的問題。前面幾節(jié)描述了一般操作系統(tǒng)相關(guān)的問題,使用二進(jìn)制或源碼分發(fā)版時(shí)可能出現(xiàn)的問題和安裝后的問題。后面幾節(jié)討論在具體Linux平臺(tái)上出現(xiàn)的問題。
請(qǐng)注意這些問題的大多數(shù)出現(xiàn)在舊的Linux 版本中。如果你運(yùn)行最新的版本,可能不會(huì)發(fā)現(xiàn)這些問題。

2.12.1.1. Linux操作系統(tǒng)注意事項(xiàng)
MySQL至少需要Linux 2.0版本。
警告:我們已經(jīng)發(fā)現(xiàn)在SMP系統(tǒng)中Linux 2.2.14 和MySQL會(huì)出現(xiàn)一些奇怪的問題。我們還收到來自一些MySQL用戶的報(bào)告說他們用內(nèi)核2.2.14使用MySQL時(shí)遇到了嚴(yán)重的穩(wěn)定性問題。如果你正使用該內(nèi)核,應(yīng)當(dāng)升級(jí)到2.2.19 (或更新版)或到2.4內(nèi)核。如果你有一個(gè)多CPU盒,應(yīng)當(dāng)考慮使用2.4,因?yàn)樗艽蟠蠹铀。你的系統(tǒng)將會(huì)更穩(wěn)定。

當(dāng)使用LinuxThreads時(shí),你應(yīng)當(dāng)至少可以看見有三個(gè)mysqld 進(jìn)程在運(yùn)行。這些實(shí)際上是線程。有一個(gè)線程是LinuxThreads管理器,一個(gè)線程處理連接,另一個(gè)線程處理告警和信號(hào)。

2.12.1.2. Linux二進(jìn)制分發(fā)版說明
MySQL的Linux-Intel二進(jìn)制和RPM發(fā)布配置為最高的可能速度。我們一直在嘗試使用可用的最快的穩(wěn)定的編譯器。
二進(jìn)制發(fā)布用-staticis連接,說明一般情況你不需要關(guān)心系統(tǒng)庫(kù)的版本。你也不需要安裝LinuxThreads。用-staticis連接的程序稍微大于動(dòng)態(tài)連接程序,但也稍微快一些(3-5%)。但是,靜態(tài)連接程序的一個(gè)問題是你不能使用用戶定義函數(shù)(UDF)。如果你將要寫或使用UDF(只適用于C或C++ 編程人員),你必須使用動(dòng)態(tài)鏈接自己編譯MySQL。

二進(jìn)制分發(fā)版的一個(gè)已知問題是在使用libc的舊的Linux系統(tǒng)(例如Red Hat 4.x或Slackware)上,你會(huì)遇到一些(非致命)主機(jī)名解析問題。如果系統(tǒng)使用libc沒有使用glibc2,你可能會(huì)遇到一些主機(jī)名解析和getpwnam()問題。這是因?yàn)間libc依靠一些外部庫(kù)來執(zhí)行主機(jī)名解析和getpwent(), 即使用-staticis編譯也如此。這些問題出現(xiàn)在兩個(gè)方面:

·         當(dāng)運(yùn)行mysql_install_db時(shí),你會(huì)看見下面的錯(cuò)誤消息:

·                Sorry, the host 'xxxx' could not be looked up你可以通過執(zhí)行mysql_install_db --force來解決該問題,并不在mysql_install_db中執(zhí)行resolveip測(cè)試。不利方面是 你不能在授權(quán)表中使用主機(jī)名:除了localhost,必須使用IP號(hào)。如果你正使用不支持—force的舊版本MySQL,必須使用文本編輯器手動(dòng)卸載mysql_install中的resolveip測(cè)試。

·         當(dāng)你嘗試用--user選項(xiàng)運(yùn)行mysqld時(shí)你還會(huì)看見下面的錯(cuò)誤:

·                getpwnam: No such file or directory要解決該問題,使用su命令啟動(dòng)mysqld,不要指定--user選項(xiàng)。這樣使系統(tǒng)自己更改mysqld進(jìn)程的用戶ID,mysqld不再需要這樣做。

另一個(gè)解決辦法可以解決兩個(gè)問題,即不使用二進(jìn)制分發(fā)版。獲得MySQL源碼分發(fā)版(RPM或tar.gz格式)并安裝。

在一些Linux 2.2版本中,當(dāng)客戶端通過TCP/IP建立大量與mysqld服務(wù)器的新連接時(shí),你可能會(huì)遇到錯(cuò)誤Resource temporarily unavailable。該問題是Linux在你關(guān)閉TCP/IP套接字的時(shí)間和系統(tǒng)實(shí)際釋放該套接字的時(shí)間之間有一個(gè)延遲。只有有限數(shù)目的TCP/IP時(shí)段有空間,因此如果客戶端試圖在短時(shí)間內(nèi)建立許多新TCP/IP連接時(shí),你會(huì)遇到源不可用錯(cuò)誤。例如,當(dāng)你通過TCP/IP運(yùn)行MySQL test-connect基準(zhǔn)測(cè)試時(shí)你會(huì)看見該錯(cuò)誤。

我們已經(jīng)多次向不同的 Linux 郵件列表詢問該問題,但是一直沒有找到合適的解決辦法。唯一知道的“解決辦法”是客戶端使用永久連接,或,如果你在同一機(jī)器上運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器和客戶端,使用Unix套接字文件來連接,不要使用TCP/IP連接。

2.12.1.3. Linux源碼分發(fā)版說明
下面關(guān)于glibc的注意事項(xiàng)只適用你自己構(gòu)建MySQL時(shí)。如果在x86機(jī)器上運(yùn)行Linux,在大多數(shù)情況下最好使用我們的二進(jìn)制。我們將二進(jìn)制連接到了我們能找到的打了最好補(bǔ)丁的glibc版本,并使用了最優(yōu)的編譯器選項(xiàng),盡力使它適合高負(fù)荷服務(wù)器。對(duì)于典型用戶,即使對(duì)于超過2GB限制的大量并行連接或表設(shè)置,在大多數(shù)情況下,我們的二進(jìn)制仍然是最佳選擇。閱讀下面的內(nèi)容后,如果你不清楚怎樣做,先試用我們的二進(jìn)制看它是否滿足你的需求。如果你發(fā)現(xiàn)它不夠完善,那么你可以嘗試你自己的構(gòu)建。在這種情況下,我們很希望能看到相關(guān)注釋,以便我們下次可以構(gòu)建更好的二進(jìn)制。
MySQL在Linux上使用 LinuxThreads 。如果你正在使用一個(gè)沒有g(shù)libc2的老的Linux版本,你必須在嘗試編譯MySQL前安裝LinuxThreads。你可以從 http://dev.mysql.com/downloads/os-linux.html獲得LinuxThreads。

注意:當(dāng)你執(zhí)行INSERT DELAYED時(shí),所用的包括2.1.1及以前的glibc版本在pthread_互斥_timedwait()處理上有一個(gè)致命錯(cuò)誤,如果你正在使用INSERT DELAYED,我們建議先升級(jí)glibc。

請(qǐng)注意Linux 內(nèi)核和LinuxThreads庫(kù)默認(rèn)情況下最多可以處理1,024個(gè)線程。如果你計(jì)劃使用超過1,000個(gè)并行連接,需要對(duì)LinuxThreads進(jìn)行一些更改,如下所示:

·         將sysdeps/unix/sysv/linux/bits/local_lim.h中的PTHREAD_THREADS_MAX 增加到4096,將LinuxThreads/internals.h 中的STACK_SIZE減少到256KB。路徑相對(duì)于glibc的根目錄。(請(qǐng)注意如果STACK_SIZE為默認(rèn)值2MB,MySQL有600-1000個(gè)連接時(shí)不穩(wěn)定)。

·         重新編譯LinuxThreads,生成新的libpthreads.a庫(kù),并重新連接MySQL。

可以從http://www.volano.com/linuxnotes.html 查閱關(guān)于LinuxThreads線程限制的詳細(xì)信息。

還有一個(gè)問題會(huì)嚴(yán)重影響MySQL的性能,特別是在SMP系統(tǒng)中。在glibc 2.1的LinuxThreads中,對(duì)于擁有很多只是短時(shí)間內(nèi)占有互斥體的線程的程序,不能很好地執(zhí)行互斥。結(jié)果出現(xiàn)荒謬的現(xiàn)象:在許多情況下,如果你使用未修改的LinuxThreads連接MySQL,從SMP中去掉卸載處理器實(shí)際上會(huì)提高M(jìn)ySQL的性能。我們提供了一個(gè)glibc 2.1.3的補(bǔ)丁來糾正該行為(http://www.mysql.com/Downloads/Linux/linuxthreads-2.1-patch )。

在glibc 2.2.2中,MySQL使用修改后的互斥,這樣甚至比打了補(bǔ)丁的glibc 2.1.3還要好得多。但是,需要注意的是在某些條件下,當(dāng)前glibc 2.2.2中的互斥代碼會(huì)高旋,影響了MySQL的性能。通過優(yōu)化mysqld進(jìn)程到最高優(yōu)先級(jí),可以降低在這種情況下出現(xiàn)這種問題的可能性。我們還可以通過補(bǔ)丁來糾正高旋問題,可以從http://www.mysql.com/Downloads/Linux/linuxthreads-2.2.2.patch下載。它集成高旋的糾正、線程最大數(shù)目和堆棧空間于一體。你需要用補(bǔ)丁patch -p0 </tmp/linuxthreads-2.2.2.patch在LinuxThreads目錄下使用。我們 希望在將來的glibc 2.2發(fā)布中能以某種形式將它包括進(jìn)來。在任何情況下,如果你連接glibc 2.2.2,仍然需要糾正STACK_SIZE和 PTHREAD_THREADS_MAX。我們希望在將來能將默認(rèn)值糾正到某種程度上可以接受的值,適合高負(fù)荷MySQL設(shè)置,因此用來產(chǎn)生你自己的構(gòu)建的  命令可以簡(jiǎn)化到到./configure; make; make install。

我們建議你使用這些補(bǔ)丁來構(gòu)建專用的libpthreads.a靜態(tài)版本,并只使用它同MySQL實(shí)現(xiàn)靜態(tài)鏈接。我們知道這些補(bǔ)丁對(duì)于MySQL很安全 并大大改善了它的性能,但是我們還不能斷言它在其它應(yīng)用程序上的效果如何。如果你需要將其它使用LinuxThreads的應(yīng)用程序同打了補(bǔ)丁的靜態(tài)版本的庫(kù)連接,或構(gòu)建一個(gè)打了補(bǔ)丁的共享版本,并將它安裝到系統(tǒng)中,你將自己承擔(dān)風(fēng)險(xiǎn)。

如果你在安裝MySQL的過程中遇到任何奇怪的問題,或一些常用實(shí)用工具被懸掛起來,很可能是庫(kù)或編譯器相關(guān)問題。在這種情況下,使用我們的二進(jìn)制來解決。

如果你連接你自己的MySQL客戶端程序,運(yùn)行時(shí)你會(huì)看見下面的錯(cuò)誤:

ld.so.1: fatal: libmysqlclient.so.#pen failed: No such file or directory使用下面的方法可以避免該問題:

·         用-Wl,r/full/path/to/libmysqlclient.so標(biāo)記連接客戶端,不要使用-Lpath)。

·         將libmysqclient.so復(fù)制到/usr/lib。

·         運(yùn)行客戶端程序前,將libmysqlclient.so所在目錄的路徑名增加到LD_RUN_PATH環(huán)境變量。

如果使用Fujitsu編譯器 (fcc/FCC),編譯MySQ時(shí)可能會(huì)出現(xiàn)一些問題,因?yàn)長(zhǎng)inux頭文件主要面向gcc。以下的configure行應(yīng)當(dāng)結(jié)合fcc/FCC使用:

CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE \    -DCONST=const -DNO_STRTOLL_PROTO" \CXX=FCC CXXFLAGS="-O -K fast -K lib \    -K omitfp -K preex --no_exceptions --no_rtti -D_GNU_SOURCE \    -DCONST=const -Dalloca=__builtin_alloca -DNO_STRTOLL_PROTO \    '-D_EXTERN_INLINE=static __inline'" \./configure \    --prefix=/usr/local/mysql --enable-assembler \    --with-mysqld-ldflags=-all-static --disable-shared \    --with-low-memory2.12.1.4. Linux后期安裝注意事項(xiàng)
在MySQL安裝目錄或MySQL源碼樹下的support-files目錄下可以找到mysql.server。你可以將它安裝為/etc/init.d/mysql,以便自動(dòng)啟動(dòng)和關(guān)閉MySQL。請(qǐng)參見2.9.2.2節(jié),“自動(dòng)啟動(dòng)和停止MySQL”。

如果MySQL不能打開足夠的文件或連接,可能是你沒有將Linux配置為處理足夠的文件。

在Linux 2.2及以上版本中,你可以檢查分配的文件的數(shù)目:

shell> cat /proc/sys/fs/file -maxshell> cat /proc/sys/fs/dquot-maxshell> cat /proc/sys/fs/super-max如果有超過16MB的內(nèi)存,應(yīng)當(dāng)在啟動(dòng)腳本中增加如下內(nèi)容(例如,在SuSE Linux中:/etc/init.d/boot.local):

echo 65536 > /proc/sys/fs/file-maxecho 8192 > /proc/sys/fs/dquot-maxecho 1024 > /proc/sys/fs/super-max還可以用root從命令行運(yùn)行echo命令,但是下一次重新啟動(dòng)計(jì)算機(jī)時(shí)這些設(shè)定值會(huì)丟掉。

另外,可以使用許多Linux分發(fā)版使用的sysctl工具設(shè)置啟動(dòng)參數(shù)(包括SuSE Linux 8.0和以后版本)。將下面的值放到文件 /etc/sysctl.conf中:

# Increase some values for MySQLfs.file-max = 65536fs.dquot-max = 8192fs.super-max = 1024你還應(yīng)將以下內(nèi)容加入/etc/my.cnf:

[mysqld_safe]open-files-limit=8192這樣服務(wù)器連接和打開文件的總數(shù)目可以達(dá)到8,192。

LinuxThreads的STACK_SIZE常數(shù)控制在尋址空間中線程堆棧的占用空間。它需要足夠大,以保證每個(gè)線程堆棧有足夠的空間,但是應(yīng)足夠小,防止某些線程的堆棧運(yùn)行全局mysqld數(shù)據(jù)。遺憾的是,根據(jù)我們的發(fā)現(xiàn),如果你用mmap()映射目前正使用的尋址,Linux成功運(yùn)行  后不會(huì)映射映射區(qū),將會(huì)清空整個(gè)地址頁(yè)上的數(shù)據(jù)而不會(huì)返回錯(cuò)誤信息。因此,mysqld或其它線程應(yīng)用程序的安全依靠創(chuàng)建線程的代碼的“紳士”行為。用戶必須采取措施以確保在任何時(shí)間運(yùn)行線程的數(shù)目相對(duì)線程堆棧應(yīng)足夠低,以防止全局堆內(nèi)存。使用mysqld時(shí),你應(yīng)當(dāng)為max_connections變量設(shè)置合理的值強(qiáng)制該行為。

如果你自己構(gòu)建MySQL,你可以為L(zhǎng)inuxThreads打補(bǔ)丁以便更好地使用堆棧。請(qǐng)參見2.12.1.3節(jié),“Linux源碼分發(fā)版說明”。如果你不想為L(zhǎng)inuxThreads打補(bǔ)丁,你應(yīng)當(dāng)將max_connections的值設(shè)置為不超過500。如果你有大的關(guān)鍵字緩沖區(qū)、大的堆內(nèi)存表,或其它使mysqld分配大量?jī)?nèi)存的東西,或如果你用2GB的補(bǔ)丁運(yùn)行2.2內(nèi)核,max_connections的值應(yīng)當(dāng)更低。如果你正使用我們的二進(jìn)制或RPM版本,可以安全地將max_connections設(shè)置為1500(假定沒有大的關(guān)鍵字緩沖區(qū)或有大量數(shù)據(jù)的堆內(nèi)存表。將LinuxThreads中的STACK_SIZE降低得越低,可以安全地創(chuàng)建越多的線程。我們推薦的值的范圍為128KB到256KB。

如果你正使用大量的并行連接,在2.2內(nèi)核中你可能會(huì)遇到一個(gè)“特性”,即通過對(duì)進(jìn)程的分支或克隆子進(jìn)程的行為進(jìn)行罰分,來試圖防止轟炸攻擊。這樣你增加并行客戶端的數(shù)量時(shí),MySQL不能正確響應(yīng)。在單CPU系統(tǒng)中,我們已經(jīng)發(fā)現(xiàn)該現(xiàn)象,即線程創(chuàng)建地很慢;連接MySQL的時(shí)間很長(zhǎng)(長(zhǎng)達(dá)1分鐘),并且關(guān)閉的時(shí)間也很長(zhǎng)。在多CPU系統(tǒng)中,我們已經(jīng)觀察到隨著客戶端數(shù)目的增加,查詢速度逐漸下降。在尋求解決辦法的過程中,我們收到了一個(gè)用戶的內(nèi)核補(bǔ)丁,他聲稱該補(bǔ)丁可以解決他的問題。從http://www.mysql.com/Downloads/Patches/linux-fork.patch可以下載該補(bǔ)丁。我們已經(jīng)在開發(fā)和生產(chǎn)系統(tǒng)上對(duì)該補(bǔ)丁進(jìn)行了廣泛的測(cè)試。它可以大大改善MySQL的性能,而不會(huì)造成任何問題,我們向仍然在2.2內(nèi)核運(yùn)行高負(fù)荷服務(wù)器的用戶推薦它。

在2.4內(nèi)核中已經(jīng)對(duì)該問題進(jìn)行了修復(fù),因此如果你不滿意當(dāng)前系統(tǒng)的性能,不要為2.2 內(nèi)核打補(bǔ)丁,在SMP系統(tǒng)中升級(jí)到2.4版要容易地多,升級(jí)不僅可以修復(fù)錯(cuò)誤,還可以使SMP更好地加速。

我們已經(jīng)在雙CPU機(jī)器上在2.4內(nèi)核中對(duì)MySQL進(jìn)行了測(cè)試,發(fā)現(xiàn)MySQL的比例要好得多。1,000名客戶查詢時(shí),還看不到速度有實(shí)質(zhì)上的下降,MySQL的比例因子(最大吞吐量與一個(gè)客戶端的吞吐量的比例)為180%。我們?cè)谒?CPU系統(tǒng)中也觀察到了類似的結(jié)果:當(dāng)客戶數(shù)目上升到1,000名時(shí)還沒有實(shí)質(zhì)上的減慢, 比例因子為300%。根據(jù)這些結(jié)果,對(duì)于使用2.2內(nèi)核的高負(fù)荷SMP服務(wù)器,我們絕對(duì)建議升級(jí)到 2.4內(nèi)核。

我們已經(jīng)發(fā)現(xiàn),在2.4內(nèi)核中應(yīng)使用可能的最高優(yōu)先級(jí)來運(yùn)行mysqld進(jìn)程,以獲得最佳性能。可以通過為mysqld_safe加renice -20 $$命令來實(shí)現(xiàn)。在四-CPU系統(tǒng)中的測(cè)試中,提高優(yōu)先級(jí)在400個(gè)客戶時(shí)會(huì)使吞吐量增加60%。

我們目前還想搜集關(guān)于MySQL在four-way和eight-way系統(tǒng)上用2.4內(nèi)核執(zhí)行的性能的更詳細(xì)信息。如果你訪問了這些系統(tǒng)并進(jìn)行了一些基準(zhǔn)測(cè)試,請(qǐng)將結(jié)果用email發(fā)送到<benchmarks@mysql.com>。我們將對(duì)它們進(jìn)行審查以包括進(jìn)手冊(cè)中。

如果用ps運(yùn)行mysqld服務(wù)器進(jìn)程時(shí)發(fā)現(xiàn)進(jìn)程死掉了,一半是MySQL中有缺陷或數(shù)據(jù)庫(kù)表崩潰了。請(qǐng)參見A.4.2節(jié),“如果MySQL依然崩潰,應(yīng)作些什么”。

如果mysqld死掉并給出SIGSEGV信號(hào),要想在Linux中對(duì)內(nèi)核進(jìn)行調(diào)試,你可以用--core-file選項(xiàng)啟動(dòng)mysqld。注意你還可能需要通過向mysqld_safe添加ulimit -c 1000000或用--core-file-size=1000000啟動(dòng)mysqld_safe來加大內(nèi)核文件的大小。請(qǐng)參見5.1.3節(jié),“mysqld_safe:MySQL服務(wù)器啟動(dòng)腳本”。

2.12.1.5. Linux x86注意事項(xiàng)
MySQL需要5.4.12或更新版本的libc。已知它可以在libc 5.4.46中工作。glibc 2.0.6和更新版本應(yīng)當(dāng)也可以工作。Red Hat的glibc RPM有一些問題,因此如果你遇到問題,應(yīng)看看是否有更新版。已知glibc 2.0.7-19和2.0.7-29 RPM可以工作。

如果你正使用Red Hat 8.0或更新的glibc 2.2.x庫(kù),你會(huì)看見mysqld執(zhí)行g(shù)ethostbyaddr()時(shí)會(huì)死掉。這是因?yàn)樾碌膅libc庫(kù)在執(zhí)行該調(diào)用時(shí)需要大于128KB的堆?臻g。要想修復(fù)該問題,用--thread-stack=192K選項(xiàng)啟動(dòng)mysqld。(在MySQL 4以前的版本中應(yīng)使用-O thread_stack=192K)。 在MySQL 4.0.10和以上版本中,該堆?臻g值即為默認(rèn)值,因此你不會(huì)看見該問題。

如果你正使用gcc 3.0和以上版本編譯MySQL,在編譯MySQL前你必須先安裝libstdc++v3庫(kù);如果不這樣做,在聯(lián)接過程中會(huì)遇到關(guān)于丟失__cxa_pure_virtual符號(hào)的錯(cuò)誤。

在一些舊的Linux分發(fā)版中,configure會(huì)生成如下錯(cuò)誤:

Syntax error in sched.h. Change _P to __P in the/usr/include/sched.h file.See the Installation chapter in the Reference Manual.只需要按照錯(cuò)誤消息的提示操作。對(duì)只有一條下劃線的_P名再增加一條下劃線,然后重新嘗試。

編譯時(shí)可能會(huì)出現(xiàn)警告。下面的警告可以忽略:

mysqld.cc -o objs-thread/mysqld.omysqld.cc: In function `void init_signals()':mysqld.cc:315: warning: assignment of negative value `-1' to`long unsigned int'mysqld.cc: In function `void * signal_hand(void *)':mysqld.cc:346: warning: assignment of negative value `-1' to`long unsigned int'如果mysqld啟動(dòng)時(shí)總是出現(xiàn)轉(zhuǎn)儲(chǔ)內(nèi)核, 問題可能是你使用了舊的/lib/libc.a。嘗試重新對(duì)其命名,然后刪掉sql/mysqld并重新執(zhí)行make install然后再次嘗試。已經(jīng)報(bào)導(dǎo)在部分Slackware安裝中出現(xiàn)了該問題。

當(dāng)鏈接mysqld時(shí)如果出現(xiàn)下面的錯(cuò)誤,說明libg++.a安裝不正確:

/usr/lib/libc.a(putc.o): In function `_IO_putc':putc.o(.text+0x0): multiple definiti在of `_IO_putc'你可以使用libg++.a運(yùn)行configure來避免該問題:

shell> CXX=gcc ./configure2.12.1.6. Linux SPARC注意事項(xiàng)
在部分執(zhí)行過程中,readdir_r()會(huì)中斷,F(xiàn)象是SHOW DATABASES語句總是返回空子集?梢栽谕瓿膳渲、進(jìn)行編譯前從config.h中刪掉HAVE_READDIR_R來修復(fù)。
2.12.1.7. Linux Alpha注意事項(xiàng)
我們已經(jīng)用我們的基準(zhǔn)和測(cè)試套件在Alpha中測(cè)試了MySQL 5.1,看起來工作得不錯(cuò)。

我們目前在配置Alpha EV6處理器的Compaq DS20機(jī)器上,在SuSE Linux 7.0中對(duì)AXP、內(nèi)核2.4.4-SMP、Compaq C編譯器(V6.2-505)和Compaq C++編譯器(V6.3-006)構(gòu)建MySQL二進(jìn)制軟件包。

你可以從 http://www.support.compaq.com/alpha-tools/ 找到上述編譯器。使用這些編譯器,得到的MySQL性能比gcc要好9-14%。

在Alpha版MySQL中,我們?cè)诰幾g選項(xiàng)中使用-arch generic標(biāo)記,可以確保二進(jìn)制在所有Alpha處理器中運(yùn)行。我們還采用靜態(tài)編譯以避免庫(kù)問題。configure命令應(yīng)為:

CC=ccc CFLAGS="-fast -arch generic" CXX=cxx \CXXFLAGS="-fast -arch generic -noexceptions -nortti" \./configure --prefix=/usr/local/mysql --disable-shared \    --with-extra-charsets=complex --enable-thread-safe-client \    --with-mysqld-ldflags=-non_shared --with-client-ldflags=-non_shared 如果想要使用egcs,可以使用下面的configure行:

CFLAGS="-O3 -fomit-frame-pointer" CXX=gcc \CXXFLAGS="-O3 -fomit-frame-pointer -felide-constructors \    -fno-exceptions -fno-rtti" \./configure --prefix=/usr/local/mysql --disable-shared已知的在Linux-Alpha中運(yùn)行MySQL的問題:

·         在gdb 4.18 中不能調(diào)試線程應(yīng)用程序。你應(yīng)當(dāng)使用gdb 5.1。

·         使用gcc時(shí)如果你嘗試靜態(tài)鏈接mysqld,啟動(dòng)時(shí)映像會(huì)導(dǎo)致轉(zhuǎn)儲(chǔ)內(nèi)核。換句話說,使用gcc時(shí)不要使用--with-mysqld-ldflags=-all-static。

2.12.1.8. Linux PowerPC注意事項(xiàng)
MySQL應(yīng)當(dāng)可以在使用最新glibc安裝軟件包(用glibc 2.0.7測(cè)試)的MkLinux上工作。
2.12.1.9. Linux MIPS注意事項(xiàng)
為了使MySQL在Qube2(Linux Mips)上工作,需要最新的glibc庫(kù)。已知glibc-2.0.7-29C2可以工作。還必須使用egcs C++編譯器(egcs 1.0.2-9、gcc 2.95.2或更新版)。
2.12.1.10. Linux IA-64注意事項(xiàng)
要想讓MySQL在Linux IA-64中編譯,我們用 gcc 2.96構(gòu)建時(shí)使用下面的configure命令:

CC=gcc \CFLAGS="-O3 -fno-omit-frame-pointer" \CXX=gcc \CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \    -fno-exceptions -fno-rtti" \    ./configure --prefix=/usr/local/mysql \    "--with-comment=Official MySQL binary" \    --with-extra-charsets=complex在IA-64中,MySQL客戶端二進(jìn)制使用共享庫(kù)。這意味著如果你將我們的二進(jìn)制分發(fā)版安裝到/usr/local/mysql之外的其它位置,需要將libmysqlclient.so安裝目錄路徑加到/etc/ld.so.conf文件或LD_LIBRARY_PATH環(huán)境變量中。

參見A.3.1節(jié),“與MySQL客戶端庫(kù)的鏈接問題”。

論壇徽章:
0
40 [報(bào)告]
發(fā)表于 2008-04-15 11:58 |只看該作者
2.12.2. Mac OS X注意事項(xiàng)
在Mac OS X中,tar不能處理長(zhǎng)文件名。如果你需要解包.tar.gz分發(fā)版,應(yīng)使用gnutar。
2.12.2.1. Mac OS X 10.x (Darwin)
MySQL應(yīng)當(dāng)可以在Mac OS X 10.x(Darwin)中工作,不會(huì)有重大問題。

已知的問題有:

·         連接時(shí)間(wait_timeout、interactive_timeout和net_read_timeout)值不理想。

這可能是線程庫(kù)中的信號(hào)處理問題,信號(hào)不能中斷掛起的讀命令,我們希望將來能對(duì)線程庫(kù)進(jìn)行更新以修復(fù)該問題。

在Darwin 6.3中用下面的configure行對(duì)Mac OS X二進(jìn)制進(jìn)行了編譯:

CC=gcc CFLAGS="-O3 -fno-omit-frame-pointer" CXX=gcc \CXXFLAGS="-O3 -fno-omit-frame-pointer -felide-constructors \    -fno-exceptions -fno-rtti" \    ./configure --prefix=/usr/local/mysql \    --with-extra-charsets=complex --enable-thread-safe-client \    --enable-local-infile --disable-shared參見2.5節(jié),“在Mac OS X上安裝MySQL”。

2.12.2.2. Mac OS X Server 1.2 (Rhapsody)
對(duì)于當(dāng)前版本的Mac OS X服務(wù)器,編譯MySQL之前不需要對(duì)操作系統(tǒng)進(jìn)行更改。在服務(wù)器平臺(tái)上的編譯與客戶端版本Mac OS X相同。

對(duì)于舊的版本(Mac OS X Server 1.2, a.k.a. Rhapsody),在配置MySQL之前必須先安裝pthread軟件包。

參見2.5節(jié),“在Mac OS X上安裝MySQL”。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP