MySql多埠一臺主機多個例項
阿新 • • 發佈:2019-02-18
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檔案。
參考:
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、給新例項分配許可權