- 2.9.2.1. 與運行mysql_install_db有關的問題
- 2.9.2.2. 自動啟動和停止MySQL
- 2.9.2.3. 啟動MySQL服務器以及其故障診斷和排除
在Unix上安裝MySQL后,需要初始化 授權表、啟動服務器,并確保服務器工作正常。你還要讓服務器隨系統的啟動和停止自動啟動和停止。應當為授權表中的賬戶指定密碼。
在Unix中,由mysql_install_db設置 授權表。在某些安裝中,該程序自動運行:
· 如果你使用RPM分發版在Linux上安裝MySQL,服務器RPM運行mysql_install_db。
· 如果你使用PKG分發版在Mac OS X上安裝MySQL,安裝器運行mysql_install_db。
否則,你需要自己運行mysql_install_db。
下面的過程描述了如何初始化授權表 (如果還沒有初始化)并啟動服務器。還推薦了一些你可以用來測試服務器是否可以訪問以及是否工作正確的命令。關于自動啟動和停止服務器的信息,參見2.9.2.2節,“自動啟動和停止MySQL”。
你完成過程并讓服務器運行后,你應當為mysql_install_db創建的賬戶指定密碼。2.9.3節,“使初始MySQL賬戶安全”中列出了相關說明。
在本節的例子中,服務器用MySQL登錄賬戶的用戶ID運行。假定存在這樣的賬戶。如果不存在,要么創建賬戶,或用其它已有的用來運行服務器的登錄賬戶來替代。
1. 進入MySQL的頂級安裝目錄,此處為BASEDIR:
2. shell> cd BASEDIR
BASEDIR可能為/usr/local/mysql 或/usr/local。以下步驟假定你位于該目錄。
3. 根據需要,運行mysql_install_db 程序設置含有確定如何讓用戶連接服務器的權限的初始MySQL授權表。如果你使用的分發版類型不能運行程序,你需要執行該步驟。
典型,只有首次安裝MySQL時,才需要運行mysql_install_db,因此如果你升級已有的安裝你可以跳過該步驟,但mysql_install_db不會覆蓋已有的 授權表,因此可以在任何環境下安全運行。
要想初始化授權表,根據mysql_install_db是位于bin還是scripts目錄下,使用下面的一個命令:
shell> bin/mysql_install_db --user=mysql
shell> scripts/mysql_install_db --user=mysql
mysql_install_db腳本創建數據目錄、擁有所有數據庫權限的mysql數據庫和可以用來測試MySQL的test數據庫。腳本為root賬戶和匿名用戶賬戶創建 授權表條目。賬戶一開始沒有密碼。2.9.3節,“使初始MySQL賬戶安全”中描述了初始權限。簡單說,這些權限允許MySQL root用戶執行任何操作,允許任何人使用test名創建或使用數據庫或用test_啟動。
一定要確保由mysql登錄賬戶擁有數據庫目錄和文件,以便在以后運行時 服務器具有讀、寫訪問權限。為此,如果你用root用戶運行mysql_install_db,應當使用--user選項。否則,當以mysql登錄時,應當執行腳本,你可以省略命令中的--user選項。
mysql_install_db在mysql數據庫中創建幾個表,包括user、db、host、 tables_priv、columns_priv和func以及其它。5.7節,“MySQL訪問權限系統”中有完整的列表和描述。
如果你不想要test數據庫,啟動服務器后,可以用mysqladmin -u root drop test卸掉。
如果有mysql_install_db相關問題,參見2.9.2.1節,“與運行mysql_install_db有關的問題”。
有一些選擇運行mysql_install_db腳本,正如MySQL分發版中所提供的:
· 如果想讓初始權限與標準默認值不同,你可以在運行前修改mysql_install_db。然而,最好是在設置 授權表后使用GRANT和REVOKE來更改權限。換句話說,你可以運行mysql_install_db,然后通過MySQL root用戶使用mysql -u rootMySQL來連接服務器,以便發出GRANT和REVOKE命令。
如果你想要在幾個機器上用相同的權限安裝MySQL,可以將GRANT和REVOKE語句放入一個文件中,以腳本方式執行文件,運行mysql_install_db之后使用mysql。例如:
shell> bin/ mysql_install_db --user=mysql
shell> bin/mysql -u root < your_script_file
這樣,你就可以避免在每臺機器上手動發出命令。
· 完全可以重新創建授權表。如果你剛剛知道如何使用GRANT和REVOKE,并且運行mysql_install_db 之后進行了許多修改,想要關閉表重新啟動,你可能想要這樣操作。
要想重新創建授權表,從含有MySQL數據庫的目錄中移走所有 .frm、.MYI和 .MYD文件。(這是數據目錄下面的mysql目錄,當你運行mysqld --help 時,列為datadir值)。然后再次運行mysql_install_db 腳本。
· 可以使用--skip-grant-tables選項手動啟動mysqld,并使用mysql自己增加權限信息:
· shell> bin/mysqld_safe --user=mysql --skip-grant-tables &
· shell> bin/mysql mysql
手動從mysql執行mysql_install_db中的SQL命令。確保后面鑰運行mysqladmin flush-privileges或mysqladmin reload,讓服務器重載授權表。
請注意不使用mysql_install_db,不僅需要手動安裝授權表,還需要先創建。
4. 啟動MySQL服務器:
5. shell> bin/mysqld_safe --user=mysql &
一定要讓MySQL服務器使用非權限(non-root) 登錄賬戶運行。為此,如果你以系統root運行mysql_safe,應當使用--user選項。否則,你應當用mysql登錄到系統來執行腳本,這樣可以省略命令中的--user選項。
A.3.2節,“如何以普通用戶身份運行MySQL”中給出了非特權用戶運行MySQL的說明。
如果在執行該步前你忘記了創建授權表,當你啟動服務器時,在錯誤日志文件中將出現下面的消息:
mysqld: Can't find file: 'host.frm'
如果啟動服務器時遇到其它問題,查閱2.9.2.3節,“啟動MySQL服務器以及其故障診斷和排除”。
6. 使用mysqladmin驗證服務器在運行中。以下命令提供了簡單的測試,可檢查服務器是否已經啟動并能響應連接:
7. shell> bin/mysqladmin version
8. shell> bin/mysqladmin variables
mysqladmin version的輸出根據平臺和MySQL版本的不同而稍有變化,但是應當類似于:
shell> bin/mysqladmin version
mysqladmin Ver 8.41 Distrib 5.1.2-alpha, for pc-linux-gnu on i686
Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This 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-Max
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 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選項調用它。
9. 驗證可以關閉服務器:
10. shell> bin/mysqladmin -u root shutdown
11.驗證是否可以重啟服務器。可以直接使用mysqld_safe或調用mysqld。例如:
12. shell> bin/mysqld_safe --user=mysql --log &
如果mysqld_safe失敗,參見2.9.2.3節,“啟動MySQL服務器以及其故障診斷和排除”。
13.進行一些簡單的測試,驗證你可以從服務器查詢信息。輸出應當類似于:
14. shell> bin/mysqlshow
15. +-----------+
16. | Databases |
17. +-----------+
18. | mysql |
19. | test |
20. +-----------+
21.
22. shell> bin/mysqlshow mysql
23. Database: mysql
24. +---------------------------+
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" mysql
47. +------+--------+------+
48. | host | db | user |
49. +------+--------+------+
50. | % | test | |
51. | % | test_% | |
52. +------+--------+------+
53.在sql-bench目錄(在MySQL安裝目錄下)中有一個基準套件,可以用來比較MySQL在不同平臺上的執行情況。基準套件在Perl中編寫。它使用Perl DBI模塊來為各種數據庫提供一個與數據庫無關的接口,并且還需要其它Perl模塊來運行基準套件。必須安裝以下模塊:
54. DBI
55. DBD::mysql
56. Data::Dumper
57. Data::ShowTable
可以從CPAN(http://www.cpan.org/)獲得這些模塊。請參見2.13.1節,“在Unix中安裝Perl”。
sql-bench/Results目錄包含了在不同數據庫和平臺上的各種運行結果。要想進行測試,執行命令:
shell> cd sql-bench
shell> perl run-all-tests
如果沒有sql-bench目錄,你可能使用RPM文件安裝了MySQL,沒有使用源碼RPM。(源碼RPM包括sql-bench benchmark目錄)。 此時,必須先安裝基準套件后才能使用。有一個單獨的mysql-bench-VERSION-i386.rpm基準RPM文件,其中包含了基準代碼和數據。
如果你有源碼分發版,其tests子目錄中也有一些測試可供運行。例如,要運行auto_increment.tst,從源碼分發版的頂級目錄執行該命令:
shell> mysql -vvf test < ./tests/auto_increment.tst
期望的結果被顯示在“ ./tests/auto_increment.res”文件中。
58.至此,你應當可以運行服務器了。然而,初始MySQL賬戶均沒有密碼,因此應當使用2.9.3節,“使初始MySQL賬戶安全”中的說明來指定密碼。
MySQL 5.1安裝過程在MySQL數據庫中創建時區表。但是,必須手動裝載表。相關說明參見5.10.8節,“MySQL服務器時區支持”。