国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL中文參考手冊5(安裝MySQL下)

2024-07-24 12:54:47
字體:
來源:轉載
供稿:網友

mysql中文參考手冊5(安裝mysql下)
轉載 譯者:晏子

〖返回〗〖轉發〗


譯者:晏子 ([email protected])主頁:http://linuxdb.yeah.net

4.12 win32 注意事項
這節描述在win32上安裝和使用mysql,這也在mysql win32分發所帶的“readme”文件中描述。 

4.12.1 在win32上安裝mysql
如果你沒有一個注冊的mysql版本,你應該首先下載共享軟件版本,從: 

mysql 3.21.29 

如果你準備從一些其他程序連接mysql,你也可能需要myodbc驅動程序。你可在mysql下載頁找到。 

安裝任何一個分發,在某個空目錄解壓縮它并且運行setup.exe程序。 

缺省地,mysql-win32被配置安裝在“c:mysql”。如果你想要在其它地方安裝mysql,在“c:mysql”安裝它,然后將安裝移到你想要的地方。如果你真的移走mysql,你必須通過提供選項給mysqld告訴mysqld那里的所有一切,使用c:mysqlinmysqld --help顯示所有的選項目!例如,如果你移動mysql分發到“d:programsmysql”,你必須用d:programsmysqlinmysqld --basedir d:programsmysql來啟動mysqld。

用登記的mysql版本,你也可以創建一個“c:my.cnf”文件來保存用于mysql服務器的任何缺省選項。拷貝文件“mysqlmy-example.cnf”到“c:my.cnf”并且編輯它來適用于你的安裝。注意你應該用"/"而不是""指定所有的路徑。如果你使用“”,你需要指定兩次(“”),因為在mysql中“”是轉義字符,見4.15.4 選項文件。 

4.12.2 在win95/win98上啟動mysql
mysql使用 tcp/ip 把一個客戶連接到一個服務器。(這將允許在你的網絡上任何機器連接你的mysql服務器)。因此,你必須在啟動mysql前在你的機器上安裝tcp/ip,你可以在你的windows cdrom上找到tcp/ip 。 

注意:如果你正在使用一個舊的win95版本(例如osr2),很有可能你有一個老的winsock包!mysql需要winsock 2!你可從微軟得到最新的winsock。win98有新的winsock 2庫作為缺省,這樣上述不適用于win98。 

你能使用2個不同的mysql服務器: 

mysqld  用完整調試和自動存儲器分配檢查編譯 
mysqld-opt  對pentium 處理器優化。  

上面兩個應該在任何 > = i386的intel處理器上工作  。 

為了啟動mysqld服務器,你應該啟動一個msdos窗口并鍵入: 

c:mysqlinmysqld
這將在一個沒有窗口的背景啟動mysqld。 

你可以這樣殺死mysql服務器,執行: 

c:mysqlinmysqladmin -u root shutdown
注意win95/win98不支持命名管道的創建。在win95/win98上,你只能使用命名管道連接運行在一個nt服務器上的遠程mysql。 

4.12.3 在nt上啟動mysql
win95/win98小節也適用于在nt上的mysql,有下列差別: 

為了是mysql用tcp/ip工作,你必須安裝服務包3(service pack 3)(或更新)! 

對于nt,服務器名字是mysqld-nt。通常你應該在 nt 上安裝mysql作為一種服務: 

c:mysqlinmysqld-nt --install
(你可以在 nt 上使用mysqld或mysqld-opt服務器,但是那些不能作為一種服務啟動或使用命名管道。)

你可以用下列命令啟動和停止mysql服務: 

net start mysql
net stop mysql

注意在這種情況下,你不能對mysqld-nt使用任何其他選項! 

如果你需要用任何選項啟動mysqld-nt,你也可以作為在nt上的一個獨立程序運行mysqld-nt!如果你在nt上沒有選項啟動mysqld-nt,mysqld-nt嘗試啟動自己作為一種有默認選項的服務。如果你停止了mysqld-nt,你必須用net start mysql啟動它。

服務用mysql名字被安裝,一旦安裝,它必須使用服務控制管理器(scm)實用程序啟動服務(在控制面板中找到)或使用net start mysql命令。如果需要任何選項,在你啟動mysql服務前必須作為scm實用程序的“啟動參數”指定它們。一旦運行,可使用mysqladmin或從scm實用程序或使用命令net stop mysql停止mysqld-nt。如果你使用scm停止mysqld-nt,scm有一條關于mysqld shutdown normally奇怪的消息,當作為一種服務運行時,mysqld-nt沒有控制臺的存取權限,所以沒有消息可以看見。 

在nt上你可以得到下列服務錯誤消息: 

permission denied (權限拒絕) 意味著它不能找到mysqld-nt.exe  
cannot register (不能登記) 意味著路徑是不正確的 

如果你作為一種服務安裝mysqld-nt有問題,嘗試用完整的路徑啟動它: 

c:mysqlinmysqld --install
如果這還不工作,你能通過在注冊表修正路徑使得mysqld-nt正確啟動! 

如果你不想作為一種服務啟動mysqld-nt,你可以如下啟動它: 

c:mysqlinmysqld-nt --standalone


c:mysqlinmysqld-nt --standalone --debug
最新的版本在“c:mysqld.trace”給你一個調試蹤跡。 

4.12.4 在 win32 上運行 mysql
mysql在所有win32平臺上支持tcp/ip和nt上命名管道。如果客戶安裝了tcp/ip,缺省是對nt上的本地連接使用命名管道而對所有其他情形使用tcp/ip,主機名指定使用哪個協議: 

主機名  協議  
空 (沒有) 在nt上,首先嘗試命名管道;如果它不工作,使用tcp/ip。在win95/win98上,使用tcp/ip。  
.  命名管道 
localhost tcp/ip到當前主機  
主機名 tcp/ip  

通過指定命名管道--pipe選項,你可以強制一個mysql客戶使用命名管道。使用--socket選項指定管道的名字。 

通過執行下列命令,你能測試mysql是否正在工作: 

c:mysqlinmysqlshow
c:mysqlinmysqlshow -u root mysql
c:mysqlinmysqladmin version status proc
c:mysqlinmysql test

如果在win95/win98上mysqld很慢地回答連接,可能你的dns有問題。在這種情況中下,用--skip-name-resolve啟動mysqld并且在mysql授權表中僅使用localhost和ip數字。在你連接運行在nt上一個mysqld-nt的mysql服務器時,使用--pipe指定命名管道使用的參數,你也能避開dns,對大多數mysql客戶是可行的。 

有2個版本的mysql命令行工具: 

mysql  用原生win32編譯,它提供很有有限的文本編輯能力。  
mysqlc  用cygnus gnu 編譯器和庫編譯,它提供readline編輯。  

如果你想使用mysqlc.exe,你必須拷貝“c:mysqllibcygwinb19.dll”到“windowssystem”(或類似的地方)。 

在win32上缺省的權限給所有本地用戶以所有數據庫的完全權限。為了使mysql更安全,你應該為每個用戶設置口令并刪除mysql.user中有host='localhost'和user=''的行。 

你也應該為root用戶增加一個口令:(下列例子通過刪除匿名用戶,允許任何人存取“測試”數據庫)

c:mysqlinmysql mysql
mysql> delete from user where host='localhost' and user='';
mysql> quit
c:mysqlinmysqladmin reload
c:mysqlinmysqladmin -u root password your_password

在你設置了口令以后,如果你想要關掉mysqld服務器, 你能使用這個命令做到: 

mysqladmin -- user=root -- password=your_password  shutdown
如果你正在使用在windows下的mysql共享軟件版本,上面的命令將以 parse error near 'set option password'的錯誤而失敗,這是因為,這是共享軟件版本,它基于mysql 3.21,沒有set password命令。 

對共享軟件版本,你能如下設置root用戶口令: 

c:mysqlinmysql mysql
mysql> update user set password=password('your password') where user='root';
mysql> quit
c:mysqlinmysqladmin reload

有注冊的mysql版本,你能很容易地用grant和revoke命令增加新用戶和更改權限,見7.26 grant和revoke句法。對windows 的共享軟件版本,必須使用insert、update和delete在mysql數據庫中的一個表來管理用戶和他們的權限,見6.13 存取拒絕(access denied)的錯誤原因。 

4.12.5 用ssh從win32連接一個遠程mysql
這是一個關于怎樣用ssh 得到一個安全的連接遠程mysql服務器的注意事項(david carlson)。 

   在你的windows機器上安裝ssh客戶 - 我使用了一個來自http://www.doc.ic.ac.uk/~ci2/ssh/的免費ssh客戶。其他有用的鏈接:http://www.npaci.edu/security/npaci_security_software.html和http://www.npaci.edu/security/samples/ssh32_windows/index.html. 
  
   啟動ssh。設置主機名字 = 你的mysql服務器名或ip地址,設置userid=你的用戶名登錄到你的服務器。
   點擊“local forwords”。設定local port: 3306, host: localhost, remote port: 3306
   保存一切,否則下次你將必須再做一遍。 
   用ssh登錄到你的服務器。 
   啟動一些odbc應用程序(例如access)。
   創造一個新文件并且用odbc驅動程序鏈接到mysql,就像你通常做的一樣,除了對服務器用用戶“localhost”。 
  


搞定。它對一個直接的因特網連接工作得很好。我有些問題,ssh與我的win95網絡和wingate有沖突 - 但是那將是張貼在其他軟件公司的用戶組的話題! 

4.12.6 mysql-win32與unix mysql比較
mysql- win32現在已經證明了自己很穩定。這個版本得mysql有與對應的unix版本同樣的特征,除了下面: 

win95和線程 
win95 為每個線程的創建損失大約200個字節的內存。因此,如果你進行許多連接,你不應該在win95運行mysqld很長時間,因為mysql的每個連接都創建一個新線程!winnt和win98不能容忍這個bug。 
阻塞式讀(blocking read) 
mysql為每個連接使用一個阻塞式讀取,這意味著: 
一個連接將不在8個小時后自動被斷開,就像mysql的unix版本所發生的。 
如果一個連接“掛起”,不殺死mysql就不可能打破它。 
mysqladmin kill在一個睡眠的連接上將不工作。 
只要有睡眠的連接,mysqladmin shutdown不能中途中斷。 
我們計劃在不久的將來修正它。 

udf函數 
暫時mysql-win32不支持用戶可定義函數。 
drop database 
你不能拋棄一個正在被某些線程使用的數據庫。 
從任務管理器殺死mysql 
在windows95上,你不能從任務管理器或用shutdown實用程序殺死mysql。你必須用mysqladmin shutdown關閉它。 
大小寫區分的名字 
文件名在win32上是忽略大小寫的,因此win32上的mysql數據庫和表的名字也是忽略大小寫的。唯一的限制是數據庫和表的名字必須在整個一個給定的語句中大小寫是一樣的,因為它用my_table和my_table都指向同一個表子,下列查詢將不工作: 
select * from my_table where my_table.col=1; 

“  ”目錄字符 
在win95上的路徑名組成由“”字符分隔,它在mysql中也是轉義字符。如果你正在使用load data infile或select ... into outfile,你必須用兩個“”字符或使用unix風格的文件名“/”字符: 
load data infile "c: mpskr.txt" into table skr;
select * from skr into outfile 'c:/tmp/skr.txt';

can't open named pipe錯誤 
如果你使用nt上的mysql-win32共享軟件版本,用最新的mysql客戶,你將得到下列錯誤: 
error 2017: can't open named pipe to host: . pipe...

這是因為nt上mysql正式版本缺省地使用命名管道。你能通過為新mysql客戶使用--host=localhost選項或創建一個包含下列信息的文件“c:my.cnf”來避免這個錯誤: 

[client]
host = localhost

access denied for user錯誤 
在訪問在同一機器上的一個mysql服務器時,如果你得到access denied for user: '[email protected]' to database 'mysql'的錯誤,這意味著mysql不能正確解釋你的主機名。為了修正它,你應該創建一個文件“windowshosts”,有下列信息: 
127.0.0.1  localhost
對于可能想要幫助我們做好win32版本的任何人,這里有的一些開放的問題: 

制作一個單用戶mysql.dll服務器。這應該包括一個標準mysql服務器的一切,除了線程創建外。這將使mysql在不需要一個真正的客戶機/服務器和不需要從其他主機存取服務器的應用程序時更容易使用。 
為mysql安裝增加一些漂亮的“start”和“shutdown”圖標。 
為mysql啟動選項創建造一個工具管理注冊表條目。注冊表條目的度缺已經被編碼進mysqld.cc,但是它應該重新編碼而更加面向“參數”,該工具應該也能更新“ my.cnf”文件,如果用戶比較喜歡使用它而不是注冊表。 
當用--install登記mysqld作為一種服務(在 nt 上 )時,如果你也可以在命令行上增加缺省選項,它將更好,目前解決辦法是更新“c:my.cnf”文件。 
當你掛起一個運行win95的膝上計算機時,當膝上計算機被恢復時,mysqld守護程序不接受新連接。我們不知道這是否 win95、tcp/ip或mysql的問題。 
能從任務管理器殺死mysqld將絕對是好事,目前,你必須使用mysqladmin shutdown。 
移植用在 mysql命令行工具的readline到win32。 
標準的gui版本mysql客戶(mysql、mysqlshow、mysqladmin和mysqldump) 將更好。 
如果在“net.c”中的套接字“讀”和“寫”函數是可中斷的,那將更好。這將有可能在win32上用mysqladmin kill殺死打開的線程。 
制作有關哪些windows程序能工作在mysql-win32/myodbc和必須做什么在能讓他們工作的文檔。 
mysqld總是在“c”處啟動而不在缺省地點,我們想讓mysqld使用當前地點用于排序順序。 
移植sqlclient到win32(幾乎完成)并加入更多的特征! 
把更多的選項加到mysql manager。 
在服務器和客戶之間改變通訊協議,使用windows內部通訊而不是套接字和tcp/ip。 
用.dll實現udf函數。 
增加宏以使用由win32提供的更快的對線程安全的增加/減少方法。 
其他win32特定問題在mysql-win32分發的“readme”文件中描述。 

4.13 os/2 注意事項
mysql使用太多的打開文件。因此,你應該增加類似下面的東西到你的“config.sys”文件: 

set emxopt=-c -n -h1024 
如果你不這樣做,你將可能碰到下列錯誤: 

file 'xxxx' not found (errcode: 24) 
當os/2 warp 3上使用mysql時,要求fixpack 29或以上。用os/2 wrap 4,要求fixpack 4或以上。這是pthreads庫的一個要求。mysql必須安裝在支持長文件名的一個分區上,如hpfs、fat32等等。 

“install.cmd”腳本必須從os/2'自己的“cmd.exe”運行并且不能工作在替代品如“4os2.exe”。 

“scripts/mysql-install-db”腳本已經被重新命名了:它現在調用“install.cmd”并且是一個 rexx 手跡,將安裝缺省的mysql安全配置并為mysql創建workplace shell 圖標。 

動態模塊支持通過編譯但沒有充分測試,動態模塊應該使用pthreads運行時刻庫編譯。 

gcc -zdll -zmt -zcrtdll=pthrdrtl -i../include -i../regex -i.. 
    -o example udf_example.cc -l../lib -lmysqlclient udf_example.def
mv example.dll example.udf

注意:由于os/2的限制,udf模塊名字的詞干不能超過8個字符。模塊被存儲在“/mysql2/udf”目錄;safe-mysqld.cmd腳本將把這個目錄放在beginlibpath環境變量中。當使用udf模塊時,指定的擴展名被忽略--它被假定為“.udf”。例如,在 unix上,共享模塊可能被命名為“example.so”并且你可以象這樣從它裝載函數: 

create function metaphon returns string soname "example.so";

正是os/2,模塊將被命名為“example.udf”,但是你不指定模塊擴展名: 
create function metaphon returns string soname "example"; 
4.14 tcx二進制代碼
作為一種服務,tcx提供一套mysql的二進制分發,它在tcx或在客戶友好地給與我們訪問他們機器的權限的站點上被編譯。 

這些分發用scripts/make_binary_distribution生成并且用下列編譯器和選項配置: 

sunos 4.1.4 2 sun4c with gcc 2.7.2.1 
cc=gcc cxx=gcc cxxflags=-o3 ./configure --prefix=/usr/local/mysql --disable-shared 
sunos 5.5.1 sun4u with egcs 1.0.3a 
cc=gcc cflags="-o6 -fomit-frame-pointer" cxx=gcc cxxflags="-o6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory 
sunos 5.6 sun4u with egcs 2.90.27 
cc=gcc cflags="-o6 -fomit-frame-pointer" cxx=gcc cxxflags="-o6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-low-memory 
sunos 5.6 i86pc with gcc 2.8.1 
cc=gcc cxx=gcc cxxflags=-o3 ./configure --prefix=/usr/local/mysql --with-low-memory 
linux 2.0.33 i386 with pgcc 2.90.29 (egcs 1.0.3a) 
cflags="-o6 -mpentium -mstack-align-double -fomit-frame-pointer" cxx=gcc cxxflags="-o6 -mpentium -mstack-align-double -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static 
sco 3.2v5.0.4 i386 with gcc 2.7-95q4 
cc=gcc cxx=gcc cxxflags=-o3 ./configure --prefix=/usr/local/mysql 
aix 2 4 with gcc 2.7.2.2 
cc=gcc cxx=gcc cxxflags=-o3 ./configure --prefix=/usr/local/mysql 
osf1 v4.0 564 alpha with gcc 2.8.1 
cc=gcc cflags=-o cxx=gcc cxxflags=-o3 ./configure --prefix=/usr/local/mysql --with-low-memory 
irix 6.3 ip32 with gcc 2.8.0 
cc=gcc cxx=gcc cxxflags=-o3 ./configure --prefix=/usr/local/mysql 
bsdi bsd/os 3.1 i386 with gcc 2.7.2.1 
cc=gcc cxx=gcc cxxflags=-o ./configure --prefix=/usr/local/mysql 
bsdi bsd/os 2.1 i386 with gcc 2.7.2 
cc=gcc cxx=gcc cxxflags=-o3 ./configure --prefix=/usr/local/mysql 
任何有比上述配置更優的選項的人總是能把他們寄給開發者郵件列表中。

mysql3.22以前的rpm分發是用戶貢獻的,自3.22開始,一些rpm是tcx 生成的。 

4.15 安裝后期的設置和測試
一旦你已經安裝了mysql(從一個二進制代碼或源代碼分發),你需要初始化授權表,啟動服務器并且保證服務器正確運行。你也可以希望安排服務器在你的系統開機和關機時自動地被啟動和停止。 

通常,對從源代碼分發的安裝,你象這樣安裝授權表并啟動服務器: 

shell> ./scripts/mysql_install_db
shell> cd mysql_installation_directory
shell> ./bin/safe_mysqld &

對二進制分發,這樣做: 

shell> cd mysql_installation_directory
shell> ./bin/mysql_install_db
shell> ./bin/safe_mysqld &

測試在mysql發行的頂級目錄是最容易進行的。對二進制分發,這是你的安裝目錄(典型地類似“/usr/local/mysql”)。對源代碼分發,這是你的mysql源代碼樹的主目錄。 

在本小節和以后的小節中,下列命令中,bindir是到程序如mysqladmin和safe_mysqld被安裝地點的路徑。對二進制分發,是在分發內的“bin”目錄。對源代碼分發,bindir可能是“/usr/local/bin”,除非在你運行configure時指定了一個“ /usr/local”以外的安裝目錄。execdir是mysqld服務器安裝的地點,對二進制分發,這與bindir一樣。對源代碼分發,execdir可能是“/usr/local/libexec”。 

測試詳細在下面描述: 

如果必要,啟動mysqld服務器并且建立初始mysql授權表,包含決定用戶如何被允許連接服務器的權限。這通常用mysql_install_db腳本做: 
shell> scripts/mysql_install_db

典型地,mysql_install_db僅在你第一次安裝mysql時需要運行,因此,如果你正在升級現有的安裝,你可以跳過這一步。(然而,mysql_install_db的使用相當安全,并且將不更新已經存在的任何表,因此如果你是不能肯定做什么,你總是可以運行mysql_install_db。) mysql_install_db在mysql數據庫里創建6個表(user、db、host、tables_priv、columns_priv和func),初始權限的描述在6.10 設置初始mysql權限給出。簡單地說,這些權限允許mysql root用戶做任何事情,并且允許任何人創建立或使用一個名字以'test'或'test_'開始的數據庫。如果你不設置權限表,當你啟動服務器時,下列錯誤將在日志文件出現: 

mysqld: can't find file: 'host.frm' 

如果你不是通過明顯地執行./bin/safe_mysqld來啟動mysql,上述錯誤可能也發生在mysql二進制代碼分發!你可能需要作為root運行mysql_install_db,然而,如果你喜歡, 如果用戶能在數據庫目錄讀并且寫文件,你可以作為一個非特權(非--root)用戶運行mysql服務器。作為一個非特權用戶運行mysql的指令在18.8 怎樣作為一個一般用戶運行 mysql中給出。如果你有mysql_install_db的問題,見4.15.1 運行mysql_install_db的問題。因為mysql_install_db在mysql發行中,還有一些其他方法運行它: 

你可能想在運行mysql_install_db前編輯它,改變被安裝到授權表中的初始權限。如果你想要在有相同權限的很多機器安裝mysql,這很有用。在這種情況下,你可能應該只需要增加幾個額外的insert語句到mysql.user和mysql.db表中! 
如果你想要在安裝授權表后改變什么,你可以運行mysql_install_db,然后使用mysql -u root mysql作為mysql root用戶連接授權表,發出sql語句直接修改授權表。 
在已經創建了授權表后,有可能全部再次創建。如果你已經安裝了表但是隨后又想要在編輯mysql_install_db以后再創建,你可能想要這樣做。 
關于這些選項的更多信息,見6.10 建立初始mysql權限。 

象這樣啟動mysql服務器: 
shell> cd mysql_installation_directory
shell> bin/safe_mysqld &

如果你啟動服務器的問題,見4.15.2 啟動mysql服務器的問題. 

使用mysqladmin證實服務器正在運行。下列命令提供簡單的測試來檢查服務器啟動和連接的應答: 
shell> bindir/mysqladmin version 
shell> bindir/mysqladmin variables

從mysqladmin version的輸出根據你的平臺和mysql版本略有不同,但是應該類似如下顯示: 
shell> bindir/mysqladmin version
mysqladmin  ver 6.3 distrib 3.22.9-beta, for pc-linux-gnu on i686
tcx datakonsult ab, by monty

server version          3.22.9-beta
protocol version        10
connection              localhost via unix socket
tcp port                3306
unix socket             /tmp/mysql.sock
uptime:                 16 sec

running threads: 1  questions: 20  reloads: 2  open tables: 3

為了感覺你能用bindir/mysqladmin做其他事情,用--help選項調用它。 

證實你能關掉服務器: 
shell> bindir/mysqladmin -u root shutdown

證實你能重啟服務器。使用safe_mysqld或直接調用mysqld進行,例如: 
shell> bindir/safe_mysqld --log &

如果safe_mysqld失敗,從mysql安裝目錄嘗試運行它(如果你已經不在那里)。如果還不工作,見4.15.2 啟動mysql服務器的問題。 

運行一些簡單的測試證實服務器正在工作。輸出應該類似于下面所顯示的: 
shell> bindir/mysqlshow
+-----------+
| databases |
+-----------+
| mysql     |
+-----------+

shell> bindir/mysqlshow mysql
database: mysql
+--------------+
|    tables    |
+--------------+
| columns_priv |
| db           |
| func         |
| host         |
| tables_priv  |
| user         |
+--------------+

shell> bindir/mysql -e "select host,db,user from db" mysql
+------+--------+------+
| host | db     | user |
+------+--------+------+
| %    | test   |      |
| %    | test_% |      |
+------+--------+------+

在“sql-bench”目錄(在mysql安裝目錄下)下還有基準測試套件,你能用來比較在不同的平臺上mysql表現如何。“ sql-bench/results”目錄包含對不同的數據庫和平臺許多運行結果。為了運行所有的測試,執行這些命令: 


shell> cd sql-bench
shell> run-all-tests

如果你沒有“sql-bench”目錄,你可能在對二進制分發使用一個rpm(源代碼分發的rpm包括基準目錄)。在這種情況下,在你能使用它以前,你必須首先安裝基準套件。從mysql 3.22開始,有名為“mysql-bench-version-i386.rpm”的基準rpm包,它們包含基準代碼和數據。如果你有源代碼分發,你也可以在“tests”子目錄下運行測試。例如,運行“auto_increment.tst”,這樣做: 

shell> bindir/mysql -vvf test < ./tests/auto_increment.tst

期望的結果被顯示在“ ./tests/auto_increment.res”文件中。 

4.15.1 運行mysql_install_db的問題
這節列出在你運行mysql_install_db時,你可能遇見的問題: 

mysql_install_db不安裝授權表 
在顯示下列消息以后,你可以發現mysql_install_db不能安裝授權表并終止: 
starting mysqld daemon with databases from xxxxxx
mysql daemon ended

在這種情況下,你應該很小心地檢驗日志文件!日志文件應該位于目錄“xxxxxx”,用錯誤消息命名,并且應該指出為什么mysqld沒啟動。如果你不理解發生的事情,當你使用mysqlbug郵寄一份錯誤報告時,包含日志文件!見2.3 怎樣報告錯誤或問題。 

已經有一個mysqld守護程序在運行 
在這種情況下,你可能根本不必運行mysql_install_db。當你第一次安裝mysql時,你必須只運行mysql_install_db一次。 
當一個守護進程正在運行時,安裝第二個mysqld守護進程不工作 
這只有在當你已經有已存在的mysql安裝但是想要把新安裝放在一個不同的地方時才會發生(例如,為了測試或者也許你簡單地想要同時運行2個安裝)。通常當你試著運行第二個服務器時,發生的問題是它試圖和舊一個使用同樣的套接字和端口。在這種情況下,你將得到錯誤消息:can't start server: bind on tcp/ip port: address already in use或can't start server : bind on unix socket...你能用一個不同的套接字和端口啟動新的服務器,如下: 
shell> mysql_unix_port=/tmp/mysqld-new.sock
shell> mysql_tcp_port=3307
shell> export mysql_unix_port mysql_tcp_port
shell> scripts/mysql_install_db
shell> bin/safe_mysqld &

在這以后,你應該編輯你的服務器引導腳本手跡用不同的套接字和端口啟動兩個守護進程。例如,它能調用safe_mysqld兩次,但是對每次調用使用不同的--socket、--port和--basedir選項。 

你沒有“ /tmp ”的寫權限 
如果你沒有寫權限在缺省地方(在“/tmp”里)創建一個套接字文件,或沒有在“/tmp”創建臨時文件的許可,在運行mysql_install_db或當啟動或使用mysqld時,你將得到一個錯誤。你可以如下地指定一個不同的套接字和臨時目錄: 
shell> tmpdir=/some_tmp_dir/ 
shell> mysql_unix_port=/some_tmp_dir/mysqld.sock 
shell> export tmpdir mysql_unix_port

“some_tmp_dir”應該是你有寫許可的某個目錄的路徑。在這以后,你應該能運行mysql_install_db并且這些命令啟動服務器: 

shell> scripts/mysql_install_db
shell> bindir/safe_mysqld &

mysqld立刻崩潰 
如果你正在運行redhat 5.0,有一個比2.0.7-5舊的glibc版本,你應該保證你安裝了glibc所有補丁!在mysql郵件檔案中有很多關于它的信息。郵件檔案的鏈接可在聯機mysql文檔頁得到。也可見4.11.5 linux 注意事項(所有linux版本)。你也可以手工啟動mysqld,使用--skip-grant選項并且增加使用mysql本身的權限信息: 
shell> bindir/safe_mysqld --skip-grant &
shell> bindir/mysql -u root mysql

從mysql,手工執行在mysql_install_db里面的sql命令。保證你隨后運行mysqladmin reload告訴服務器再裝入授權表。 

4.15.2 啟動mysql服務器的問題
通常,你用3個方法之一啟動mysqld服務器: 

通過調用mysql.server。這個腳本主要用于系統啟動和關閉,更全面的描述在4.15.3 自動啟動和停止mysql。 
通過調用safe_mysqld,它試圖為mysqld決定正確的選項并然后用那些選擇運行它。 
通過直接調用mysqld。 
無論你使用哪個方法啟動服務器,如果它沒有正確啟動,檢查日志文件看你是否能發現為什么。日志文件位于數據目錄(對二進制分發一般是“/usr/local/mysql/data”,對源代碼分發是“/usr/local/var”)。用“host_name.err”和“host_name.log”形式的名字在數據目錄下查找文件,這里host_name是你服務器主機的名字,然后檢查這些文件的最后幾行: 

shell> tail host_name.err
shell> tail host_name.log

當mysqld守護進程啟動時,它把目錄改變到數據目錄。這是它期望寫日志文件和pid(進程id)文件的地方,和它期望在那兒找到數據庫。 

數據目錄地點是在分發編譯時定死的。然而,如果mysqld期望它在你的系統上其他某個地方找到數據目錄,它將工作不正常。如果你有不正確路徑的問題,你可使用--help選項調用mysqld,找到mysqld允許什么選項和缺省路徑設置是什么。你能通過指定正確的路徑作為mysqld命令行參數來覆蓋缺省值。(這些選擇也能用于safe_mysqld。)

通常你應該只需要告訴mysqld基本目錄,在它下面安裝mysql。你可以用--basedir選項做到,你也能使用--help檢查改變路徑選項的效果(注意,--help必須是mysqld命令的最后選項)。例如: 

shell> execdir/mysqld --basedir=/usr/local --help

一旦你確定你想要的路徑設置,不用--help選項啟動服務器。 

如果你得到下列錯誤,它意味著mysqld正在試圖使用某些其他程序(或其他mysqld服務器)已經正在使用tcp/ip端口或套接字: 

can't start server: bind on tcp/ip port: address already in use
  或
can't start server : bind on unix socket...

使用ps保證你沒有另外一個mysqld服務器正在運行。如果你不能發現其他運行的服務器,你可以嘗試執行命令telnet your-host-name tcp-ip-port-number并且按幾次return鍵,如果你沒有得到一個錯誤消息,像telnet: unable to connect to remote host: connection refused,某個東西正在使用mysqld正在試圖使用的tcp/ip端口,見4.15.1 運行mysql_install_db的問題和19.3 在同一臺機器上運行多個mysql服務器。 

safe_mysqld腳本被編寫以便能正常地啟動一個從mysql源代碼或二進制代碼版本安裝的服務器,就算這些在稍微不同的地點安裝服務器。safe_mysqld希望這些條件之一是真的: 

服務器和數據庫能在相對safe_mysqld被調用的目錄下找到。safe_mysqld在它的工作目錄下面找“bin”和“data”目錄(對二進制分發)或“libexec”和“var”目錄(對源代碼分發)。如果你從你的mysql安裝目錄(例如,對二進制分發為“/usr/local/mysql”)執行safe_mysqld,這個條件應該滿足。 
如果服務器和數據庫不能在相對其工作目錄找到,safe_mysqld試圖通過絕對路徑找到他們。典型的地點是“ /usr/local/libexec”和“/usr/local/var”。實際的地點在構造來自分發的safe_mysqld時確定,如果mysql安裝在一個標準的地點,他們應該是正確的。 
因為safe_mysqld將試圖在相對它自己的工作目錄下找到服務器和數據庫,你可以在任何地方安裝mysql的二進制分發,只要你從mysql安裝目錄啟動safe_mysqld即可: 

shell> cd mysql_installation_directory
shell> bin/safe_mysqld &

如果safe_mysqld失敗,甚至在從mysql安裝目錄調用時,你可以修改它以便使用到mysqld路徑并且對你的系統的路徑選項是正確的。注意,如果在將來你升級mysql,你的safe_mysqld修改版本將被覆蓋,因此你應該做一個你能重新安裝的編輯過的版本的拷貝。 

如果mysqld當前正在運行,通過執行這個命令,你能發現它正在使用什么路徑設置: 

shell> mysqladmin variables



shell> mysqladmin -h 'your-host-name' variables

如果safe_mysqld啟動服務器但是你不能與它連接,你應該保證你在“/etc/hosts”里面有一個條目,看起來像這樣: 

127.0.0.1  localhost
這個問題僅發生在沒有一個能工作的線程庫的系統上并且對該系統mysql必須配置為使用mit-pthreads。 

4.15.3 自動啟動和停止mysql
mysql.server腳本可以被用來啟動或停止服務器,通過用start或stop參數調用它: 

shell> mysql.server start
shell> mysql.server stop

mysql.server可在mysql安裝目錄下的“share/mysql”目錄里找到,或在mysql源代碼樹的“support-files”目錄下找到。 

在mysql.server啟動服務器之前,它把目錄改變到mysql安裝目錄,然后調用safe_mysqld。如果你有在一個非標準的地點安裝的二進制分發,你可能需要編輯mysql.server。修改它,運行safe_mysqld前,cd到正確的目錄。如果你想要作為一些特定的用戶運行服務器,你可以改變mysql_daemon_user=root行使用其他用戶,你也能修改mysql.server把其他選項傳給safe_mysqld。 

mysql.server stop通過向服務器發出一個信號停止它。你可手工執行mysqladmin shutdown關閉服務器。 

當你開始使用mysql作為生產應用時,你可能想要增加這些啟動并且停止命令到在你的“/etc/rc * 文件中適當的地方。注意如果你修改mysql.server,那么如果某個時候你升級mysql時,你的修改版本將被覆蓋,因此你應該做一個你可重新安裝的編輯過的版本的拷貝。 

如果你的系統使用“/etc/rc.local”啟動外部腳本,你應該添加下列到其中: 

/bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld &' 
你也可以在一個全局“/etc/my.cnf”文件中增加mysql.server的選項。一個典型的“/etc/my.cnf”文件可能看起來像這樣: 

mysqld]
datadir=/usr/local/mysql/var
socket=/tmp/mysqld.sock
port=3306

[mysql.server]
user=mysql
basedir=/usr/local/mysql

mysql.server腳本使用下列變量:user、datadir、basedir、bindir和pid-file。 
見4.15.4 選項文件。 

4.15.4 選項文件
mysql3.22 可以從選項文件中為服務器和客戶讀取缺省啟動選項。 

在unix上,mysql從下列文件讀取缺省選擇: 


文件名  用途  
/etc/my.cnf  全局選項 
datadir/my.cnf  服務器特定的選項目 
~/.my.cnf  用戶特定的選項 

datadir是mysql的數據目錄(典型地對二進制安裝是“/usr/local/mysql/data”或對源代碼安裝是“/usr/local/var”)。注意:這是在配置時間指定的目錄,不是mysqld啟動時用--datadir指定的目錄!(--datadir在服務器尋找選項文件的地方無效,因為它以前尋找他們,它處理任何命令行參數。)

mysql在win32上從下列文件讀取缺省選項: 

文件名  用途 
windows-system-directorymy.ini  
c:my.cnf  全局選項 
c:mysqldatamy.cnf  服務器特定的選項 

注意,在win32上你應該用/而不是指定所有的路徑,如果你使用,你需要指定兩個,因為在mysql里面是轉義字符。 

mysql試圖以上述所列的順序讀取選項文件。如果存在多個選項文件,在一個后面文件讀取的選項優先于在先前讀取的一個文件中指定的同一個選項,在命令行上指定的選項優先于在任何選項文件指定了的選項。有些選擇能使用環境變量指定,在命令行或在選項文件指定的選項優先于環境變量。 

下列程序支持選項文件:mysql、mysqladmin、mysqld、mysqldump、mysqlimport、mysql.server、myisamchk和myisampack。 

你能使用選項文件指定一個程序支持的任意長的選項!用--help選項運行程序可得到的可用選項的表。 

一個選項文件可以包含下列形式的行: 

#comment 
注釋行以“#”或“;”開始,空行被忽略。 
[group] 
group是你想為其設置選項的程序或組的名字。在一個組行后,任何option或set-variable行應用于命名的組,直到選擇文件結束或其他組的給出。 
option 
這等價于在命令行上的--option。 
option=value 
這等價于在命令行上的--option=value。 
set-variable = variable=value 
這等價于在命令行上的--set-variable variable=value。該語法必須被用來設置一個mysqld變量。 
client組允許你指定適用于所有mysql客戶的選項(不是mysqld)。這是理想的組來指定你用來與服務器連接的口令。(但是保證只是選項文件本身是可讀的和可寫的。)

注意,對域選項和值,所有頭部和尾部空白自動被刪除。你可以在的值串中使用轉義順序“”、“ ”、“
”、“
”、“”和“s”(“s”==空白)。 

這是一個典型的全局選項文件: 

[client] 
port=3306 
socket=/tmp/mysql.sock 
[mysqld] 
port=3306 
socket=/tmp/mysql.sock 
set-variable = key_buffer=16m 
set-variable = max_allowed_packet=1m 

[mysqldump] 
quick 

這是典型的用戶選項文件: 

[client]
# the following password will be sent to all standard mysql clients
password=my_password

[mysql]
no-auto-rehash

如果你有一個源代碼分發,你將在“support-files”目錄下找到一個名為“my-example.cnf”樣品配置文件。如果你有二進制分發,在“dir/share/mysql”目錄下查找,在此dir是mysql安裝目錄的路徑(一般是“/usr/local/mysql”)。你可以拷貝“my-example.cnf”到你的主目錄(重新命名拷貝為“.my.cnf”)來試驗。 

為了告訴一個mysql程序不讀任何選項文件,在命令行上指定--no-defaults作為第一個選項。這必須是第一個選項,否則它將無效!如果你想檢查使用哪個選項,你可以給出--print-defaults選項作為第一個選項。 

如果你想要強制使用一個特定配置文件,你可以使用選項--defaults-file=full-path-to-default-file。如果你這樣做,只有指定的文件將被讀取。 

開發者注意:選項文件的處理簡單地通過處理所有在任何命令行前參數的匹配選項來實現(即,在適當的組里的選項),這對使用多次指定的一個選項的最后實例的程序工作的很好。如果你有這樣一個處理多重指定選項但不讀選項文件的舊程序, 你只需要增加2行給與它那種能力。檢查任何標準的mysql客戶的源代碼看怎樣做。 

4.16 升級/降級mysql時有什么特別的事情要做?
只要你有mysql同一個的基礎版本,你總可以在同樣的體系結構上的不同版本之間的移動mysql表格(form)和數據文件。當前的基礎版本是3。如果你通過重新編譯mysql改變字符集(也可以改變排序順序),你必須在所有的表上運行myisamchk -r -q,否則你的索引不能正確被排序。 

如果你偏執于或擔心新版本,你總能重新命名的舊mysqld為類似于mysqld-'old-version-number'。那么如果你的新mysqld做一些意外的事情,你可以簡單地關掉它并重啟你的舊mysqld! 

當你做一個升級時,當然你也應該備份你的舊數據庫。有時有點偏執狂是好的! 

在升級后,如果你重新編譯客戶程遇到問題,像commands out of sync或意外的核心傾倒,在編譯你的程序時,你可能使用了一個舊的頭文件或庫文件。在這種情況下,你應該檢查你的“mysql.h”文件和“libmysqlclient.a”庫文件的日期以證實他們來自新的mysql發行。如果不是,請重新編譯你的程序! 

如果你有些問題,新的mysqld服務器不想啟動或你不能沒有口令連接,檢查你確實沒有來自你的舊安裝的一些舊的“my.cnf”文件!你可以用program-name --print-defaults檢查。如果這輸出任何非程序名字的任何東西,你有一個活躍my.cnf文件將可以影響一些事情! 

無論何時你安裝一個新版本的mysql,重新構造并重新安裝msql-mysql-modules分發是一個好主意,特別是在升級mysql后,如果你注意到諸如你的所有dbi腳本傾倒核心癥狀。 


4.16.1 從一個3.22版本升級到3.23
mysql 3.23支持新myisam類型和舊isam類型的表。你不必須變換你的舊式表給3.23使用。缺省地,所有的新表將用類型myisam創建(除非你使用--default-table-type=isam選項啟動mysqld)。你可以用alter table或perl腳本mysql_convert_table_format將一個isam表轉換成一個myisa表。 

3.22和3.21客戶將毫無問題地與一個3.23服務器一起工作。 

當升級到3.23時,下面列出你必須注意的事情: 

inner和delayed現在是保留字。 
float(x)現在是一個真正的浮點類型。 
當聲明decimal(length,dec)時,長度參數不再包括一個符號或小數點位置。 
一個time字符串必須是下列現有格式之一:[[[days] [h]h:]mm:]ss[.fraction]或[[[[[h]h]h]h]mm]ss[.fraction]。 
現在,like使用'='同樣的字符比較規則比較字符串。如果你要求舊的行為,你可以用cxxflags=-dlike_cmp_toupper標志編以mysql。 
regexp現在對正常(不是二進制的)字符串是忽略大小寫的。 
在你檢查/修復表時,對myisam表(.myi),你應該使用myisamchk,而對isam(.ism)表使用isamchk。 
如果你想要你的mysqldumps在mysql3.22和3.23之間兼容,你應該不使用mysqldump的--opt或--full選項。 
檢查所有對date_format()的調用,保證在在每個格式字符前有一個“%”。 
mysql_fetch_fields_direct現在是函數(它以前是一個宏)并且它返回一個指向mysql_field的指針而不是一個mysql_field。 
mysql_num_fields()可以不再被用在一個mysql*對象上(它現在是一個函數,拿mysql_res*作為一個參數)。相反你現在應該使用mysql_field_count()。 
在mysql3.22,select distinct ...的輸出幾乎總是被排序的。在3.23上,你必須使用group by或order by獲得排序的輸出。 
如果沒有匹配的行,sum()現在返回null,而不是 0。這是遵照ansi sql。 
新的限制詞:case、then、when、else和end。 

4.16.2 從一個3.21版本升級到3.22
沒有影響相容性的東西在3.21和3.22之間已改變。唯一的缺陷是用date類類型創建的新表將使用新方法存儲日期。你不能從一個mysqld舊版本存取這些新字段。 

在安裝mysql3.22 以后,你應該啟動新的服務器并且然后運行mysql_fix_privilege_tables腳本。這將增加你使用grant命令所需的新權限。如果你忘記了這個,當你試著使用alter table, create index或drop index時,你將得到access denied。如果你的mysql根用戶要求一個口令,你應該把它作為一個參數給mysql_fix_privilege_tables。 

mysql_real_connect()的c api接口改變了。如果你有一個舊的客戶程序調用該函數,你必須放一個0作為新db參數(或為了快速連接重新編碼發送的db單元的客戶)。你在mysql_real_connect()前也必須調用mysql_init()!做這個改變允許新的mysql_options()函數在mysql處理程序結構中保存選項。 

4.16.3 從一個3.20版本升級到3.21
如果你正在運行一個比3.20.28舊的版本并且想要換到3.21.x,你需要做下列事情: 

你能用safe_mysqld --old-protocol啟動mysqld3.21服務器從3.20分發的客戶使用它。在這種情況下,新客戶函數mysql_errno()將不返回任何服務器錯誤,而僅僅是cr_unknown_error(但是它為客戶錯誤服務)并且服務器使用舊的passwd() 檢查而非新的一個。 

如果你在而不是對mysqld使用--old-protocol選項,你將需要做下列改變: 

所有的客戶代碼必須重新編譯。如果你正在使用odbc,你必須得到新的myodbc 2.x驅動程序。 
腳本scripts/add_long_password必須運行以便變換在mysql.user表中的password字段為char(16)。 
所有在mysql.user中的口令必須被重新賦值(為了得到62位而非31位口令)。 
表格式沒變化,因此你不必須變換任何表。 
mysql3.20.28和以上版本可以處理新的user表格式而不影響客戶。如果你有一個比3.20.28早的mysql版本,如果你變換user表,口令將不再與之工作。因此為了安全,你首先應該升級到至少3.20.28并且然后升級到3.21.x。

新的客戶代碼可與一個3.20.x 版的mysqld服務器一起工作,因此如果你遇到3.21.x的問題,你可以使用舊的3.20.x服務器而無須重新編譯客戶。 

如果你對mysqld不使用--old-protocol選項,舊的客戶將發出錯誤消息: 

error: protocol mismatch. server version = 10 client version = 9

新的perl dbi/dbd接口也支持舊的mysqlperl接口。如果你使用mysqlperl,你必須做的唯一改變是改變到connect()函數的參數。新參數是:host、database、user、password(user和password參數改變了位置)。見20.5.2 dbi接口。 

下列變化可能影響到舊的應用程序的查詢: 

現在having必須在任何order by子句前被指定。 
locate()參數被交換了。 
有一些新的保留字。最著名是date、time和timestamp。 

4.16.4 升級到其他體系結構
如果你正在使用mysql3.23,你能在不同的支持同樣浮點格式的體系結構之間拷貝.frm、.myi和.myd。(mysql考慮了任何字節交換的問題)。 

mysql isam數據“ *.isd”和索引文件“ *.ism”文件是依賴于系統結構并在某些情況下依賴于os。如果你想要移動你的應用程序到有與你當前系統不同的體系結構或os的其他機器上,你不應該試圖通過簡單地拷貝文件到另外的機器上來移動一個數據庫,相反使用mysqldump。 

缺省地,mysqldump將創建一個滿是sql語句的文件,然后你可以把文件轉移到其他機器上并且把它作為mysql客戶的輸入。 

試一試mysqldump --help看可得到什么選項。如果你正在移動數據到一個更新的mysql版本,你應該用得到的更新的版本使用mysqldump --opt得到一個快速、緊湊的倒出(dump)。 

最容易(盡管不是最快)的在2臺機器之間移動一個數據庫的方法是在數據庫所在的機器上運行下列命令: 

shell> mysqladmin -h 'other hostname' create db_name
shell> mysqldump --opt db_name 
        | mysql -h 'other hostname' db_name

如果你想要在一個慢的網絡上從一臺遠程機器上拷貝一個數據庫,你可以使用: 

shell> mysqladmin create db_name 
shell> mysqldump -h 'other hostname' --opt --compress db_name  
| mysql db_name

你也可以在一個文件中存儲結果, 然后把文件轉移到目標機器并且在那里裝載文件到數據庫。例如,你能象這樣在源機器上傾倒一個數據庫到一個文件: 

shell> mysqldump --quick db_name | gzip > db_name.contents.gz 

(本例創建的文件被壓縮) 轉移包含數據庫內容的文件到目標機器,并且在那里運行這些命令: 

shell> mysqladmin create db_name
shell> gunzip < db_name.contents.gz | mysql db_name

你也可以使用mysqldump和mysqlimport完成數據庫轉移。對大數據庫表,這比簡單地使用mysqldump更快。在下列命令中,dumpdir代表你用來存儲來自mysqldump的輸出的目錄的完整的路徑。 

首先,為輸出文件和傾倒數據庫創建目錄: 

shell> mkdir dumpdir
shell> mysqldump --tab=dumpdir db_name

然后轉移在dumpdir目錄下的文件到目標機器的一些相應目錄并且在那里裝載文件到mysql: 

shell> mysqladmin create db_name           # create database
shell> cat dumpdir/*.sql | mysql db_name   # create tables in database
shell> mysqlimport db_name dumpdir/*.txt   # load data into tables

另外,別忘記拷貝mysql數據庫,因為那是授權表(user、db、host)被存儲的地方。你可能必須作為mysql root用戶在新機器上運行命令,直到你讓mysql數據庫到位。 

當你在新機器上導入mysql數據庫后,執行mysqladmin flush-privileges以便服務器再次裝入授權表信息。 




責任編輯:eight(2001-06-06 21:48)
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 松原市| 苏州市| 类乌齐县| 沐川县| 郸城县| 伊金霍洛旗| 酒泉市| 武平县| 蓬安县| 湟中县| 玛沁县| 伊川县| 临西县| 肥东县| 北碚区| 西乌珠穆沁旗| 武冈市| 株洲市| 丹东市| 永善县| 延寿县| 舞钢市| 南岸区| 汕头市| 太谷县| 西乌珠穆沁旗| 荥经县| 桐梓县| 犍为县| 全椒县| 新巴尔虎右旗| 永修县| 乌兰察布市| 松原市| 西充县| 思茅市| 绥阳县| 沅陵县| 石渠县| 兴业县| 兖州市|