同一Linux下起兩臺Mysql Server

諸葛林發表於2018-09-09

開始

額,無事不浪,主要還是因為碰到的問題。有個朋友拿我的伺服器部署個專案,於是給他開了個賬號,管理員許可權就夠了。然而他把Mysql給佔了,我也要用咋辦,他的專案我也不好動,混用同一個Server的話也很煩,只能百度另起一個了

動動手

主要都是些小白操作

假設你安裝了Mysql了,傻瓜式yum/dnf/apt-get那種,然後起了Server,執行netstat -ntlp也能看到3306埠。就能用的那種,額,然後介紹下我這邊的環境

  • CentOS 7
  • Mysql 5.7

安裝過MongoDB的同學應該知道,需要自己指定data(資料檔案)和log(日誌)目錄;使用Chrome跨域版也要指定user-dir使用者資料目錄。So,有了這些經驗接下來就省事多了。

我們猜測一個新的Server應該離不開:

  • 安裝目錄
  • 存放資料檔案的目錄
  • 更詳細的配置?

搬磚

百度一些操作,大致知道這是初始化一個Server的

mysqld --initialize
複製程式碼

額,應該先建立一個資料夾,比如在/usr/local/mysql3307裡,然後再

mkdir data
複製程式碼

建立一個資料目錄。也需要一份配置my.cnf,可以參考下預設的/etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
複製程式碼

照葫蘆畫瓢我們vim my.cnf

[mysqld]
basedir=/var/local/mysql3307
datadir=/var/local/mysql3307/data
port=3307
server_id=4
character-set-server=utf8
socket=/var/lib/mysql/mysql3307.sock

symbolic-links=0

log-error=/var/log/mysqld3307.log
pid-file=/var/run/mysqld/mysqld3307.pid
複製程式碼

socket、log、pid這種直接後面加個3307,方便以後找。然後可以初始化了:

mysqld --defaults-file=/usr/local/mysql3307/my.cnf --initialize --user=root
複製程式碼

這裡initialize引數得放到defaults-file後面....

之後會在data目錄下看到一堆子檔案。再建立金鑰(不知道這個有啥用。。。)

mysqld_ssl_rsa_setup --defaults-file=/usr/local/mysql3307/my.cnf
複製程式碼

為了避免之後登陸無密碼錯誤,這裡我們再寫個檔案mysql-init,初始化密碼

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
複製程式碼

看參考文章裡時,會用mysqld_safe來啟動Mysql Server,然而等待我的卻是command not found,查到stackoverlfow上時說這個命令叫mysqld_save,但還是沒用,文件上是:

mysqld reads options from the [mysqld] and [server] groups. mysqld_safe reads options from the [mysqld], [server], [mysqld_safe], and [safe_mysqld] groups. mysql.server reads options from the [mysqld] and [mysql.server] groups.

大致上區別就是讀取my.cnf時會從對應的開頭拿配置,比如之前寫的就是[mysqld]。另外mysqld_safe可以後臺啟動Server,直接mysqld的話命令列一直停著,沒法兒用了。

說了這麼多,mysqld_safe還是沒有,於是我們可以這樣:

mysqld\
  --defaults-file=/usr/local/mysql3307/my.cnf\
  --init-file=/usr/local/mysql3307/mysql-init\
  --user=root\
  &
複製程式碼

就最後加個&結束。第一次啟動時init密碼,之後可以去掉init-file啟動

最後

連線Mysql與預設的有些區別,它需要指定socketport,像這樣:

# xx是.socket地址
mysql --socket=xx port=3307 -uroot -p
複製程式碼

一篇水文。。。

參考連結

  1. 資料庫----(linux下安裝多個mysql-5.7.19(tar.gz)教程)
  2. MySQL異常:ERROR 1045 (28000): Unknown error 1045

相關文章