技術乾貨 | 利用systemd管理MySQL單機多例項

萬里資料庫發表於2021-10-29

有時候,我們需要在單機環境下跑多例項。在以前,一般是習慣用mysqld_multi來跑多例項。不過從CentOS 7開始引入systemd作為新的系統管理器後,用它來管理多例項也是很方便的。


 本文我們以 RPM/YUM方式安裝後的MySQL為例,介紹如何用systemd管理多例項


以RPM/YUM方式安裝完後,會生成systemd服務檔案 /usr/lib/systemd/system/mysqld.service,可以看到其中有兩行:


ExecStartPre=/usr/bin/mysqld_pre_systemd
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS

在編輯 /usr/bin/mysqld_pre_systemd 時能看到有  --defaults-group-suffix 選項,它就是用於構建多例項的了。接下來,只需要簡單的照貓畫虎就行。


複製MySQL服務檔案 /usr/lib/systemd/system/mysqld.service 到一個新檔案,例如 /usr/lib/systemd/system/greatsql@.service,加上一個 @ 符號,只需修改上述提到的2行內容,其他內容照舊即可:


# vim /usr/lib/systemd/system/greatsql@.service
...
ExecStartPre=/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64/bin/mysqld_pre_systemd %I
ExecStart=/usr/local/GreatSQL-8.0.25-15-Linux-glibc2.28-x86_64/bin/mysqld --defaults-group-suffix=@%I $MYSQLD_OPTS
...


在這裡我改成GreatSQL的二進位制路徑,如果缺少 mysqld_pre_systemd 檔案,可以從 /usr/bin/mysqld_pre_systemd 複製一份,然後做些微調即可,詳細可參考 。


接下來編輯修改 /etc/my.cnf 配置檔案,在原來的基礎上增加多例項相關的幾個片段即可,例如:


[mysqld@mgr01]
datadir=/data/GreatSQL/mgr01
socket=/data/GreatSQL/mgr01/mysql.sock
port=3306
server_id=103306
log-error=/data/GreatSQL/mgr01/error.log
group_replication_local_address= "127.0.0.1:33061"
[mysqld@mgr02]
datadir=/data/GreatSQL/mgr02
socket=/data/GreatSQL/mgr02/mysql.sock
port=3307
server_id=103307
log-error=/data/GreatSQL/mgr02/error.log
group_replication_local_address= "127.0.0.1:33071"#

更多例項照此方法繼續複製即可


然後執行命令  systemctl daemon-reload 重新載入systemd服務,即可識別到這些新增加的服務列表了:


# systemctl -l
...
greatsql@mgr01.service 
greatsql@mgr02.service
 greatsql@mgr03.service 
......


 現在可以直接執行類似下面的命令啟停多例項服務:


# systemctl start greatsql@mgr01


這樣一來,就可以在單機環境下很方便地管理多例項服務了。


Enjoy GreatSQL :)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997641/viewspace-2839725/,如需轉載,請註明出處,否則將追究法律責任。

相關文章