mysql_install_db 腳本的目的是生成新的MySQL授權表。它不覆蓋已有的MySQL授權表,并且它不影響任何其它數據。
如果你想要重新創建授權表,首先停止mysqld服務器(如果它正運行)。然后重新命名數據目錄下的MySQL目錄并保存,然后運行mysql_install_db。例如:
shell> mv mysql-data-directory/mysql mysql-data-directory/mysql-old
shell> mysql_install_db --user=mysql
本節列出了運行mysql_install_db時你可能遇到的問題:
· mysql_install_db fails to install the grant tables
你會發現mysql_install_db不能安裝 授權表,顯示下面的消息后終止:
Starting mysqld daemon with databases from XXXXXX
mysqld ended
在這種情況下,你應該很小心地檢驗日志文件!日志文件應該位于目錄“XXXXXX”,用錯誤消息命名,并且應該指出為什么mysqld沒啟動。如果你不理解發生的事情,郵寄一份錯誤報告,包含日志文件!
· 已經有一個amysqld進程在運行
表示服務器在運行,這種情況下可能已經創建了授權表。如果如此,則不再需要運行mysql_install_db,因為只需要運行一次(當你首次安裝MySQL時)。
· 當一個服務器正運行時,安裝第二個服務器不工作
這只有在當你已經有已存在的MySQL安裝但是想要把新安裝放在一個不同的地方時才會發生。例如,你可能已經有了一個產品安裝,但為了測試想要同時運行2個安裝。通常當你試著運行第二個服務器時,發生的問題是它試圖和第一個使用同樣的套接字和端口。在這種情況下,你將遇到錯誤消息:
Can't start server: Bind on TCP/IP port:
Address already in use
Can't start server: Bind on unix socket...
· 你沒有“ /tmp ”的寫權限
如果你沒有寫權限在默認位置(在“/tmp”里)創建一個Unix套接字文件,或沒有在“/tmp”創建臨時文件的許可,在運行mysql_install_db或mysqld服務器時,你將遇到一個錯誤。
你可以在開始mysql_install_db或mysqld之前執行以下命令指定一個不同的Unix套接字文件位置和臨時目錄:
shell> TMPDIR=/some_tmp_dir/
shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysql.sock
shell> export TMPDIR MYSQL_UNIX_PORT
some_tmp_dir應該是你有寫許可的某個目錄的全路徑。
然后,你應當能夠用這些命令運行mysql_install_db并啟動服務器:
shell> bin/mysql_install_db --user=mysql
shell> bin/mysqld_safe --user=mysql &
如果mysql_install_db位于scripts目錄下,首先修改命令scripts/mysql_install_db。