1. 程式人生 > 實用技巧 >MySQL多例項部署

MySQL多例項部署

MySQL多例項搭建

MySQL多例項搭建
一、什麼是MySQL多例項
二、MySQL多例項優劣勢
三、如何部署MySQL多例項
1. 使用mysqld_multi搭建
1.1 環境規劃
1.2 建立使用者組以及相關目錄和授權
1.3 安裝需要的包
1.4 修改系統限制引數
1.5 修改核心引數
1.6 解壓安裝包並建立連結
1.7 改寫配置檔案
1.8 進行初始化
1.9 檢視資料庫是否初始化成功
1.10 設定啟動
1.11 使用mysql_multi進行多例項管理
四、需要注意的問題toc

一、什麼是MySQL多例項

  MySQL的多例項就是在一臺機器上開啟多個不同的服務埠,執行多個MySQL服務程序,使用不同的socket來監聽這多個不同的埠以此提供服務,這一點和Oracle的多例項類似。這些MySQL的例項共用相同的MySQL但是使用的引數檔案是不一樣的,相應的資料檔案也不同。提供服務的時候從邏輯上看各自獨立,各自獲取的硬體資源可以靈活設定。

二、MySQL多例項優劣勢

  • 有效的利用伺服器資源。當單個伺服器的資源有剩餘的時候可以將多餘的資源有效的利用起來,而且還實現了資源的邏輯隔離。
  • 節約經濟消耗。例如需要多個數據庫來搭建主從,但是又只有一臺伺服器。
  • 當單個數據庫併發很高或計算資源需求很高時。整個例項會消耗大量系統的CPU,IO等資源。這樣其他例項的可利用資源就會變少產生問題。無法實現例項資源的絕對隔離

三、如何部署MySQL多例項

   部署的方式有兩種:1. 使用mysqld_multi工具,用單獨的配置檔案實現多例項配置複雜但是管理方便。

2.設定多個配置檔案啟動,這樣啟動不同程序實現多例項。原理簡單,但是不易管理。

1. 使用mysqld_multi搭建

1.1 環境規劃
系統版本 資料庫版本 主機名
CentOS Linux release 7.6.1810 (Core) mysql-5.7.30-linux-glibc2.12-x86_64 mysqlmulti 3306,3307,3308

MySQL安裝包下載:

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz

系統初始化完成,selinux關閉,防火牆關閉,主機名設定等

1.2 建立使用者組以及相關目錄和授權
[root@mysqlmulti ~]# groupadd mysql
[root@mysqlmulti ~]# useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
[root@mysqlmulti ~]# mkdir -p /data/mysql/mysql_3306/{data,logs,tmp}
[root@mysqlmulti ~]# mkdir -p /data/mysql/mysql_3307/{data,logs,tmp}
[root@mysqlmulti ~]# mkdir -p /data/mysql/mysql_3308/{data,logs,tmp}
[root@mysqlmulti ~]# chown -R mysql.mysql /data/
1.3 安裝需要的包
[root@mysqlmulti ~]# yum -y install make gcc-c++ cmake bison-devel ncurses-devel  readline-devel  libaio-devel perl libaio wget lrzsz vim libnuma* bzip2 xz
1.4 修改系統限制引數
[root@mysqlmulti ~]# vim /etc/security/limits.conf 
#追加以下內容
*           soft   nofile       20480
*           hard   nofile       65535
*           soft   nproc        20480
*           hard   nproc        65535
1.5 修改核心引數
[root@mysqlmulti ~]# sysctl -p
vm.swappiness = 0
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.core.wmem_default = 87380
net.core.wmem_max = 16777216
net.core.rmem_default = 87380
net.core.rmem_max = 16777216
1.6 解壓安裝包並建立連結
[root@mysqlmulti ~]# tar -xJf mysql-8.0.15-linux-glibc2.12-x86_64.tar.xz -C /opt/
[root@mysqlmulti ~]# ln -s /opt/mysql-8.0.15-linux-glibc2.12-x86_64 /usr/local/mysql
1.7 改寫配置檔案
[root@mysqlmulti ~]# cat /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /data/mysql/mysqld_multi.log


[mysqld]
basedir = /usr/local/mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#3306資料庫
[mysqld3306]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/data/mysql/mysql_3306/data
port=3306
server_id=3306
socket=/tmp/mysql_3306.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql_3306/log/slow.log
log-error = /data/mysql/mysql_3306/log/error.log
binlog_format = mixed
log-bin = /data/mysql/mysql_3306/log/mysql3306_bin
 #3307資料庫
 [mysqld3307]
 mysqld=mysqld
 mysqladmin=mysqladmin
 datadir=/data/mysql/mysql_3307/data
 port=3307
 server_id=3307
 socket=/tmp/mysql_3307.sock
 log-output=file
 slow_query_log = 1
 long_query_time = 1
 slow_query_log_file = /data/mysql/mysql_3307/log/slow.log
 log-error = /data/mysql/mysql_3307/log/error.log
 binlog_format = mixed
 log-bin = /data/mysql/mysql_3307/log/mysql3307_bin
  #3308資料庫
  [mysqld3308]
  mysqld=mysqld
  mysqladmin=mysqladmin
  datadir=/data/mysql/mysql_3308/data
  port=3308
  server_id=3308
  socket=/tmp/mysql_3308.sock
  log-output=file
  slow_query_log = 1
  long_query_time = 1
  slow_query_log_file = /data/mysql/mysql_3308/log/slow.log
  log-error = /data/mysql/mysql_3308/log/error.log
  binlog_format = mixed
  log-bin = /data/mysql/mysql_3308/log/mysql3308_bin
1.8 進行初始化
[root@mysqlmulti bin]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql/mysql_3306/data  --initialize-insecure  --user=mysql &
2020-08-06T09:07:57.185748Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.15) initializing of server has completed
[root@mysqlmulti bin]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql/mysql_3307/data  --initialize-insecure  --user=mysql &
2020-08-06T09:15:04.283372Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.15) initializing of server has completed
[root@mysqlmulti bin]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql/mysql_3308/data  --initialize-insecure  --user=mysql &
2020-08-06T09:15:51.033914Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.15) initializing of server has completed
1.9 檢視資料庫是否初始化成功

3306資料庫

[root@mysqlmulti data]# pwd
/data/mysql/mysql_3306/data
[root@mysqlmulti data]# ls
auto.cnf    client-cert.pem  ibdata1      #innodb_temp  performance_schema  server-cert.pem  undo_001
ca-key.pem  client-key.pem   ib_logfile0  mysql         private_key.pem     server-key.pem   undo_002
ca.pem      ib_buffer_pool   ib_logfile1  mysql.ibd     public_key.pem      sys

3307資料庫

[root@mysqlmulti data]# pwd
/data/mysql/mysql_3307/data
[root@mysqlmulti data]# ls
auto.cnf    client-cert.pem  ibdata1      #innodb_temp  performance_schema  server-cert.pem  undo_001
ca-key.pem  client-key.pem   ib_logfile0  mysql         private_key.pem     server-key.pem   undo_002
ca.pem      ib_buffer_pool   ib_logfile1  mysql.ibd     public_key.pem      sys

3308資料庫

[root@mysqlmulti data]# pwd
/data/mysql/mysql_3308/data
[root@mysqlmulti data]# ls
auto.cnf    client-cert.pem  ibdata1      #innodb_temp  performance_schema  server-cert.pem  undo_001
ca-key.pem  client-key.pem   ib_logfile0  mysql         private_key.pem     server-key.pem   undo_002
ca.pem      ib_buffer_pool   ib_logfile1  mysql.ibd     public_key.pem      sys
1.10 設定啟動
[root@mysqlmulti ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
1.11 使用mysql_multi進行多例項管理
[root@mysqlmulti ~]# /usr/local/mysql/bin/mysqld_multi start ##啟動全部例項
[root@mysqlmulti ~]# /usr/local/mysql/bin/mysqld_multi report ##檢視全部例項狀態
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is running

四、需要注意的問題

  • 配置檔案安裝路徑不能相同
  • 資料庫目錄不能相同
  • 啟動指令碼不能同名
  • 埠不能相同
  • socket檔案的生成路徑不能相同


來自為知筆記(Wiz)