在一臺服務器上安裝多個Mysql,每個帳號可以有,也可以沒有。而且一個帳號可以安裝多個Mysql。但帳號沒有root權限,不能使用軟件包來安裝(需要root權限)
方法:
- 在http://www.mysql.com/downloads/mysql/5.1.html#downloads上面下載Mysql5.1版本 (高於5.1的版本需要別的工具來安裝,不建議,因爲大多數host不會預先安裝上的)
- 進入mysql-version目錄下
- ./configure --prefix=$HOME/usr/local/mysql (prefix選項是指你要安裝到的路徑)//主要就是這個選項:其他可以暫時不管,這個選項可以保證能正常啓動了(configure中可能出現一個con't rm 某文件的的提示,不用管)
- make
- make install (過程中會出現一小段停頓,be patient!)
- 到這步,就已經完成了Mysql安裝的第一部分。接着
- 一般來說,如果我們是第一個安裝Mysql的用戶,我們可以在/etc/my.cnf下配置Mysql。但是,因爲目前服務器上已經有多個Mysql實例了,而且,我們沒有root權限,因此,我們只能在自己目錄下配置my.cnf。將mysql提供給我們的經典配置文件拷貝到自己的目錄下,運行命令:
-
cd $HOME/usr/local/mysql/
cp share/mysql/my-huge.cnf my.cnf -
修改my.cnf文件。一般來說,我們要修改端口號和socket【Socket是Mysql服務器用來與外來程序交互的socket文件,每一個Mysql服務器只能有一個】
修改的範例如下:
[client]
port = 7780
socket = /home/liaoqiqi/tmp/mysql.sock (sock文件和server的sock是一個文件,這個mysql.sock應該是mysql的主機和客戶機在同一host上的時候,使用unix domain socket做爲通訊協議的載體,它比tcp快。好像是個管道文件,這裏端口號一樣沒問題,因爲本機通訊走的是管道,不知道具體怎麼實現的,但可以另外指定)
[mysqld]
port = 7780
socket = /home/liaoqiqi/tmp/mysql.sock -
Mysql有兩種連接方式:(1),TCP/IP(2),socket對mysql.sock來說,其作用是程序與mysqlserver處於同一臺機器,發起本地連接時可用。例如你無須定義連接host的具體IP得,只要爲空或localhost就可以。在此種情況下,即使你改變mysql的外部port也是一樣可能正常連接。因爲你在my.ini中或my.cnf中改變端口後,mysql.sock是隨每一次 mysql server啓動生成的。已經根據你在更改完my.cnf後重啓mysql時重新生成了一次,信息已跟着變更。socket文件是unix下進程間通信用的,mysql.sock就是客戶端連接與mysql間通信用的socket文件,只能本機使用,遠程連接要通過tcp/ip了
-
basedir=/安裝的路徑/mysql
datadir=/安裝的路徑/mysql/var - 在上面的兩步操作中,我們已經配置好了我們自己的Mysql的配置文件,包括它的端口號和Socket。下面,我們來安裝本地數據庫。
-
安裝Mysql默認的本地數據庫及表格
cd $HOME/usr/local/mysql/bin
./mysql_install_db --defaults-file=~/usr/local/mysql/my.cnf //需要安裝數據庫,否則啓動server會失敗,因爲server要讀取數據庫中內容,注--user 選項指定Server的啓動者,所有文件系統的文件屬於該用戶(注:和Mysql的數據庫權限不同,兩個機制是獨立的,--defaults-file參數要放到所有參數之前,否則可能會報錯) -
安裝了數據庫默認的一些表後,現在,我們可以啓動Mysql服務了:
cd $HOME/usr/local/mysql/
nohup ./mysqld_safe --defaults-file=~/usr/local/mysql/my.cnf & 少了連個選項:可以添加在:--log-error,--pid-file=分別指定系統運行日誌(非事務日誌)和進程號文件(在my.cnf中的[mysqld_safe]的塊中加,defaults-file必須通過命令行指定,不能寫到配置文件裏),注,log-err不指定文件的話爲.err(可以讀取該文件看到底哪裏有問題),--pid-file要預先創建?兩個選項也可以添加在my.cnf中嗎? -
在成功啓動Mysql服務後,我們可以用Mysql客戶端來連接它了。但是,我們要先初始化密碼。
$HOME/usr/local/mysql/bin/mysqladmin –uroot password 123456 //否則數據庫中沒有root 用戶,也沒有人擁有權限) -uroot=-u root
然後,我們可以用客戶端來連接它了:
$HOME/usr/local/mysql/bin/mysql -P 7780 –uroot -p -
接着,我們可以新建一個用戶,併爲他授予權限。如:
create user dnweb identified by '123456'
grant all privileges on *.* TO 'dnweb'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; "%"號 要在引號內。
flush privileges; -
停止Mysql服務的方法:
mysqladmin -uroot -p shutdown -S /home/liaoqiqi/tmp/mysql.sock
進階閱讀:爲Mysql提供擴展,安裝Python-Mysql:
- 請安裝MySQL-python-1.2.3.tar.gz
-
將它配置在Linux環境中:
修改~/.bash_profile文件,將$HOME/usr/local/mysql/lib/mysql/添加到 $LD_LIBRARY_PATH 環境變量中。
source ~/.bash_profile
Reference
- 請問如何查看mysql 的端口號? mysql> show variables like'port'
- 可能的錯誤:_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
- 可能的錯誤:[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
- 可能的錯誤:error while loading shared libraries: libmysqlclient.so.15: cannot open shared object file: No such file or directory.
-
關閉mysql服務的正確方法
./mysqladmin -uroot -p shutdown
- 查看mysql所對應的socket的位置:netstat -ln | grep mysql
- 官方的Mysql客戶端連服務器端出錯問題解析 5.4.7. Causes of Access-Denied Errors
轉載請註明: 轉載自Knight.Liao's Tale
本文鏈接地址: 非root權限安裝Mysql