MySQL 單機多例項

2021-09-14 02:43:13 字數 3476 閱讀 9276

關於mysql 單機多例項的優缺點等介紹具體可以知乎一下或參考mysql單機多例項配置

實現單機多例項可以通過docker輕鬆做到,這裡主要是分享使用自帶工具mysqld_multi的過程及兩個坑點

系統: ubuntu 16.04lts (xenial)

版本: percorna server 5.7.21-20

安裝: 官網教程

新建乙個檔案 /etc/mysql/multi_server.cnf

[mysqld_multi]

# 如果mysql服務不是通過mysqld_safe啟動的,這個要注釋掉

#mysqld = /usr/bin/mysqld_safe

mysqladmin = /usr/bin/mysqladmin

user = multi_admin

password = 123456

[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

[mysqld2]

user = mysql

pid-file=/var/run/mysqld/mysql.pid2

socket=/var/run/mysqld/mysqld.sock2

port = 3307

basedir = /usr

datadir = /var/lib/mysql2

檢視例項執行

mysqld_multi --defaults-file=/etc/mysql/multi_server.cnf report

啟動服務

mysqld_multi --defaults-file=/etc/mysql/multi_server.cnf start

因為一般情況,第乙個已經是我們安裝好,而且root使用者也設定好的,所以不太可能出問題.

mysql2可能出現的問題:

fatal error: tried to start mysqld under group [mysqld2], but no data directory was found or could be created. data directory used: /var/lib/mysql2
mysql5.7 新增例項的命令列如下

mysqld --datadir=/var/lib/mysql2 --initialize --initialize-insecure ...

官網鏈結

再看/usr/bin/mysqld_multi 指令碼343行上下

print "\n\ninstalling new database in $datadir\n\n";

$install_cmd="/usr/bin/mysqld ";

$install_cmd.="--initialize ";

$install_cmd.="--user=mysql ";

$install_cmd.="--datadir=$datadir";

咋一看好像沒什麼問題,實際上,用命令列執行

which mysqld

得到的結果

/usr/sbin/mysqld

接上面,如果就這樣啟動的話,mysql2 例項會隨機給root使用者建乙個隨機密碼,導致後續客戶端無法登入該例項.如果需要找回密碼,只能通過error_log

這時,同樣需要修改指令碼,在指令碼中加上引數"--initialize-insecure",注意引數間的空格.

建立連線之後,再執行

mysql> alter user 'root'@'localhost' identified by 'new_password';
給root使用者加許可權

grant all privileges on

. to root@'%' identified by "123456";

flush privileges;

在各個例項給mysqld_multi管理使用者multi_admin 加上shutdown許可權

grant shutdown on

. to multi_admin@localhost identified by 'password';

如果通過mysqld_multi stop 無法有效關閉例項,可以通過mysqladmin 直接shutdown

後續如果因為操作不當導致例項無法啟動,可以通過命令檢視錯誤日誌

tail -30 /var/log/mysql/error.log
常見問題

2018-02-22t02:02:28.227868z 0 [error] /usr/sbin/mysqld: can't create/write to file '/var/run/mysqld/mysql.pid3' (errcode: 13 - permission denied)

2018-02-22t02:02:28.227889z 0 [error] can't start server: can't create pid file: permission denied

這時,可以看到/var/run/mysqld 資料夾如下,把檔案都刪除,再重啟一下就可以了

-rw-r--r-- 1 root root 0 feb 22 02:01 mysqld.pid

-rw-r--r-- 1 root root 0 feb 21 15:35 mysqld.pid2

srwxrwxrwx 1 mysql mysql 0 feb 22 02:02 mysqld.sock=

srwxrwxrwx 1 mysql mysql 0 feb 22 02:02 mysqld.sock2=

-rw------- 1 mysql mysql 6 feb 22 02:02 mysqld.sock2.lock

srwxrwxrwx 1 mysql mysql 0 feb 22 02:02 mysqld.sock3=

-rw------- 1 mysql mysql 6 feb 22 02:02 mysqld.sock3.lock

-rw------- 1 mysql mysql 6 feb 22 02:02 mysqld.sock.lock

-rw-r--r-- 1 root root 0 feb 22 02:01 mysql.pid2

-rw-r--r-- 1 root root 0 feb 22 02:01 mysql.pid3

mysql單機多例項 MYSQL單機多例項

一 建立安裝目錄 mkdir usr local mysql s 5.6.32 mkdir usr local mysql m 5.6.32 wget tar zxv f mysql 5.6.32.tar.gz 二 編譯命令 1 主編引數 cmake dcmake install prefix da...

mysql單機多例項

在資料庫伺服器上,可以架構多個mysql伺服器,進行單機多例項的讀寫分離 可以通過mysqld multi來進行多例項的管理,mysqld multi是用perl寫的指令碼,原理是通過mysql admin來進行多個資料庫的操作 多例項的配置檔案也有點不同,可以看作是多個mysql配置的集合 mys...

mysql實踐 單機多例項

最近在學習mycat原始碼,有單台雲主機上要跑多個例項的需求,參考了以下的文章 4.修改my.cnf vim usr local mysql etc my.cnf 注釋以下內容 client password your password port 3306 socket tmp mysql.sock...