最近的研發機器需要部署多個環境,包括數據庫。為了管理方便考慮將mysql數據庫進行隔離,即采用單機多實例部署的方式。
找了會資料發現用的人也不是太多,一般的生產環境為了充分發揮機器性能都是單機單實例運行,再進行一系列的配置調優..
找了會資料發現用的人也不是太多,一般的生產環境為了充分發揮機器性能都是單機單實例運行,再進行一系列的配置調優..
多實例的運行機制
通過mysqld_multi啟動多個mysqld實例進程,每個實例擁有獨立的配置、監聽端口、數據庫文件、臨時文件(日志、socket)等實現步驟
1 初始化數據目錄
mysql_install_db --datadir=/web/mysql/prd/data --user=mysql
mysql_install_db --datadir=/web/mysql/dev/data --user=mysql
2 配置多實例文件
multi.cnf:
#multi server [mysqld_multi] mysqld = /home/root/local/mysql/bin/mysqld_safe mysqladmin = /home/root/local/mysql/bin/mysqladmin #mysqld_multi log log = /web/mysql/multi.log #用戶名密碼,用以mysqld_multi操作時透傳給mysqladmin(初始化時一般為匿名訪問,注釋掉即可) #user=root #password= #dev server [mysqld3306] user = mysql port = 3306 socket = /web/mysql/dev/var/mysql.sock pid-file = /web/mysql/dev/var/mysqld.pid log-error = /web/mysql/dev/var/mysqld.log datadir = /web/mysql/dev/data max_connections = 200 default-storage-engine = innodb character_set_server = utf8mb4 #prd server [mysqld3307] user = mysql port = 3811 socket = /web/mysql/prd/var/mysql.sock pid-file = /web/mysql/prd/var/mysqld.pid log-error = /web/mysql/prd/var/mysqld.log datadir = /web/mysql/prd/data max_connections = 1000 default-storage-engine = innodb character_set_server = utf8mb4
3 啟動多實例
mysqld_multi --defaults-extra-file=multi.cnf start
4 管理多實例
檢查運行情況mysqld_multi --defaults-extra-file=multi.cnf report
當然也可以通過網絡端口檢查:
停止多實例:
netstat -ntlp tcp
tcp 0 0 :::3306 ::: * LISTEN 3919/mysqld
tcp 0 0 :::3307 ::: * LISTEN 15027/mysqld
mysqld_multi --defaults-extra-file=multi.cnf stop
修改密碼(針對某個實例):
mysqladmin -uroot -S /web/mysql/prd/var/mysql.sock password 123456
連接某個實例:
mysql -uroot -S /web/mysql/prd/var/mysql.sock -p
常見問題
mysqld_multi執行之后無法啟動實例,執行report發現實例沒有運行。
原因:mysql實例目錄缺少讀寫權限,將多實例的數據目錄設置為mysql:mysql的用戶組,並支持讀寫權限;
啟動實例之后無法停止,mysqld_multi stop不生效
原因: mysqld實例的數據庫管理員密碼與mysqld_multi透傳的管理員密碼不一致(見multi.conf),通過修改密碼可解決。
TIPS
msyqld_multi命令僅僅對配置文件做語法檢查,排查問題時需結合multi.log(見配置文件),以及具體實例的錯誤日志進行;
實例標號必須為整數,如msyqld3307中3307必須為數字標號;