我的系統上已經有一個mysql了,再編譯一個mysql,最麻煩的地方不在於編譯,而是讓兩個共存。
前面的編譯環節和普通安裝沒有什麼區別,還是configure,make,make install。其中configure的時候,選擇一下安裝的位置,否則可能導致原來的檔案被覆蓋(使用–prefix選項)。我的破電腦make的時候花了不少時候(具體多少我也不清楚,開始編譯之後就去吃飯了),安裝好之後,按照mysql的手冊複製support-files/my-medium.cnf到安裝目錄裡面的var目錄下(沒有安裝資料庫的時候這個檔案夾不存在,自己在安裝根目錄下建立一個),然後修改裡面的用戶端通訊使用的socket檔案的名字sed -i -e ‘s/mysql.sock/mysql1.sock/’ /opt/mysql/var/my.cnf,這裡把socket檔案改成了mysql1.sock(原來的mysql預設的socket檔案是mysql.sock,不修改會導致兩個socket檔案衝突)。如果要同時通過網路監聽,可能還需要修改裡面的監聽連接埠,反正我只是當成作業示範一下,所以監聽連接埠就沒有修改。
後面的操作和手冊上一樣,偷懶了下,沒有匯出環境變數,所以要輸入絕對路徑。先改變了檔案夾的擁有者,然後就用mysql_install_db –user=mysql建立了資料庫(這裡要防止使用原來PATH下的mysql程式)。最後啟動mysql,mysqld_safe –user=mysql &(還是一樣,注意不要用原來mysql的程式)。
這時,新的mysql已經啟動,可以用mysql命令串連了(好像這裡還是要用新的那個),建立了個資料庫,測試了一下一切ok,沒有對以前的mysql有影響。
關鍵點就是mysql的設定檔my.cnf檔案要複製到mysql安裝目錄的var檔案夾下(mysql用來儲存資料庫檔案的檔案夾),這樣這個設定檔只對該伺服器有效,不會影響到系統中預設的/etc下的那個設定檔。為了防止兩個mysqld的監聽衝突,最好修改設定檔裡面的socket和監聽連接埠(如果通過網路連接)。
在ubuntu上配置出現問題了。ubuntu好像不會用新的設定檔替換全域設定檔(mysql讀取設定檔順序是/etc/my.cnf->資料庫安裝目錄/my.cnf->個人主目錄/.my.cnf)所以在建立資料庫(使用mysql_install_db)時,仍然需要指定my.cnf檔案路徑(使用–defaults-file選項)。在啟動資料庫時也同樣需要。使用mysql命令串連資料庫時,也需要指定串連的socket檔案,或者my.cnf檔案。
如果在安裝資料庫時出現unknown option ‘–skip-federated’,直接把自己的那份my.cnf檔案裡的skip-federated行注釋。