1. 程式人生 > >MySql多埠一臺主機多個例項

MySql多埠一臺主機多個例項

1、安裝MySQL 以ubuntu為例: #apt-get install mysql-server mysql-client 預設埠為3306 2、建立新例項 建立一個埠為3307的新例項, 第1步mysql安裝完成後,預設在/var/lib/mysql中有一個例項, 我們把新例項放在/var/lib/mysql2中, 先新建目錄並賦予mysql許可權: #cd /var/lib/ #mkdir mysql2 #chown mysql:mysql /var/lib/mysql2  再將mysql等系統資料庫安裝到例項準備執行的目錄。 #bin/mysql_install_db --user=mysql --datadir=/var/lib/mysql2  
這一步可能會報錯,如遇錯請看第6步 3、修改配置 #vi /etc/mysql/my.cnf 修改配置檔案 my.cnf,這也是最重要的一步。主要是重新設定每個例項的pid-file,socket,port等屬性,如下: [mysqld_multi]  
mysqld     = /usr/bin/mysqld_safe  
mysqladmin = /usr/bin/mysqladmin  
user = root  


# The MySQL server  
[mysqld1]  
user    =mysql  
pid-file   = /var/run/mysqld/mysqld.pid  
socket    = /var/run/mysqld/mysqld.sock
port    =  3306  
basedir = /usr
datadir   = /var/lib/mysql  
tmpdir = /tmp
log-bin = master-bin  
log-bin-index = master-bin.index  
server-id    = 1  


[mysqld2]  
user    = mysql  
pid-file   = /var/run/mysqld2/mysqld.pid  
socket    = /var/run/mysqld2/mysqld.sock
port    =  3307  
basedir = /usr
datadir   = /var/lib/mysql2  
tmpdir = /tmp
log-bin   = master-bin  
log-bin-index   = master-bin.index  
server-id   = 2 
4、啟動mysql服務 啟動:/usr/local/mysql/bin/mysqld_multi start 1,2 停止:/usr/local/mysql/bin/mysqld_multi stop 1,2 也可以啟動和停止其中的某個例項 /usr/local/mysql/bin/mysqld_multi start 2 /usr/local/mysql/bin/mysqld_multi stop 2 5、給新例項分配許可權
#mysql -u root -p //這一句 登入的是 3306的例項  #mysql -u root -p -S/var/run/mysqld2/mysqld.sock //這一句 登入的是 3307的例項 允許遠端訪問: grant all privileges on *.* to 'myuser'@'%' identified by 'mypassword' with grant option; flush privileges; 6、可能遇到的問題 (1)#bin/mysql_install_db --user=mysql --datadir=/var/lib/mysql2   執行出錯 140905 17:54:19 [Note] Plugin 'FEDERATED' is disabled. /usr/sbin/mysqld: Table 'mysql.plugin' doesn't exist 140905 17:54:19 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 140905 17:54:19 InnoDB: The InnoDB memory heap is disabled 140905 17:54:19 InnoDB: Mutexes and rw_locks use GCC atomic builtins 140905 17:54:19 InnoDB: Compressed tables use zlib 1.2.8 140905 17:54:19 InnoDB: Using Linux native AIO 140905 17:54:19 InnoDB: Initializing buffer pool, size = 100.0M 140905 17:54:19 InnoDB: Completed initialization of buffer pool 140905 17:54:19  InnoDB: Operating system error number 13 in a file operation. InnoDB: The error means mysqld does not have the access rights to InnoDB: the directory. InnoDB: File name ./ibdata1 InnoDB: File operation call: 'create'. InnoDB: Cannot continue operation. 這是“apparmor” MySQL profile security issue,解決方法是編輯/etc/apparmor.d/usr.sbin.mysqld,加入下面幾行: #Allow data dir access /var/lib/mysql2  r, /var/lib/mysql2/**  rwk, 加入之後記得重啟apparmor /etc/init.d/apparmor restart (2)啟動mysql後,發現只有3306起來了,3307沒有,/var/log/mysql/error.log中出現錯誤日誌: can't start server : Bind on unix socket: Permission denied do you already have another mysqld server running on socket: /var/run/mysqld2/mysqld.sock? 這個問題跟上面一樣,編輯/etc/apparmor.d/usr.sbin.mysqld,加入下面幾行: #Allow pid and socket file access /run/mysqld2/mysqld.pid rw, /run/mysqld2/mysqld.socket rw, 加入之後記得重啟apparmor /etc/init.d/apparmor restart (3)3306可以遠端訪問;3307只能本地訪問,不能遠端訪問,報 ERROR 1130 (HY000): Host '192.168.0.1' is not allowed to connect to this MySQL server 十有八九是你的3307遠端訪問許可權沒有分配到位,而給3306分配了兩次。 造成這種情況的原因是#mysql -u root -p 預設登入3306例項, 如果在一臺機子上起多個MySQL例項, 比如埠號為 3306, 3307, 3308 登入時候要選擇不同的 mysql.sock檔案 mysql -uroot -p123456 這一句 登入的是 3306的例項  mysql -uroot -p123456 -S/var/run/mysqld2/mysqld.sock 這一句 登入的是 3307的例項 這時候 用 -P 3307 這個選項是不管用的。 這個-P 的選項和 -h 應該是一起用的。 本機登入用的是這個sock檔案。 參考: