MySQL5.7 多實例

来源:https://www.cnblogs.com/aiaitie/archive/2019/12/04/11980799.html
-Advertisement-
Play Games

文中使用mysql5.7 版本實現多實例,埠為3306和3307。 1、多實例本質在一臺機器上開啟多個不同的mysql服務埠(3306,3307),運行多個mysql服務進程,這些服務進程通過不同的socket監聽不同的服務埠來提供各自的服務; 多個實例共用一套mysql安裝程式,配置文件可以 ...


文中使用mysql5.7 版本實現多實例,埠為3306和3307。

1、多實例本質
在一臺機器上開啟多個不同的mysql服務埠(3306,3307),運行多個mysql服務進程,這些服務進程通過不同的socket監聽不同的服務埠來提供各自的服務;

多個實例共用一套mysql安裝程式,配置文件可以用同一個(但是最好不同,文中用不同配置文件),啟動程式可以用同一個(最好不同,文本用不同啟動腳本),數據文件是不同的(必須不同);

伺服器的硬體資源是公用的,邏輯上多實例是各自獨立的;

MySQL5.7 多實例

2、多實例作用
有效利用伺服器資源;節約伺服器資源;
但是多實例肯定會存在資源互相搶占問題,當某個服務實例併發很高或者有慢查詢時,會消耗整台伺服器更多的記憶體、CPU等,勢必導致其他實例運行也很慢。

3、多實例應用場景
資金比較緊張的公司;
併發訪問不是特別大的業務;

4、安裝多實例資料庫

1.創建相應的目錄

mkdir /mysql/{3306,3307}/{data,logs,conf,tmp} -p

// 目錄解釋
data  # 存放數據
logs  # 存放mysql日誌以及binlog日誌
conf  # 存放mysql配置文件
tmp   # 存放mysql socket文件

2.創建mysql用戶,登錄方式nologin,不創建家目錄

groupadd mysql -g 1002
useradd mysql -u 1002 -g 1002 -s /sbin/nologin -M

3.安裝一些依賴包

yum install ncurses-devel libaio-devel -y

4.上傳mysql 5.7至本機/application目錄

// 將mysql5.7 解壓並移動到/application/mysql-5.7.20 目錄下
mkdir -p /application/mysql-5.7.20 
tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz ./mysql-5.7.20
mv mysql-5.7.20-linux-glibc2.12-x86_64/* mysql-5.7.20/
rm -rf mysql-5.7.20-linux-glibc2.12-x86_64

// 軟連接
ln -s /application/mysql-5.7.20/ /application/mysql

// 將 /application/mysql/bin 目錄加入PATH環境變數
vim /etc/profile
export MYSQL_HOME=/application/mysql/bin
export PATH=$PATH:$MYSQL_HOME

5.每個實例配置my.cnf文件

3306實例

# vim /mysql/3306/conf/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/mysql/3306/data
tmpdir  = /mysql/3306/tmp
socket=/mysql/3306/tmp/mysql.sock
log-error=/mysql/3306/logs/mysql.log
port=3306
server_id=3306
max_connections = 1000
innodb_buffer_pool_size = 260M
skip_name_resolve

# 字元集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
nit_connect='SET NAMES utf8mb4'

# bin-log日誌
log-bin=/mysql/3306/data/mysql-bin
binlog_format=row

# 慢日誌
slow_query_log = 1
slow_query_log_file = /mysql/3306/logs/slow.log
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 5
long_query_time = 1

[mysql]
socket=/mysql/3306/tmp/mysql.sock

[mysqladmin]
socket=/mysql/3306/tmp/mysql.sock

3307實例

# vim /mysql/3307/conf/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/mysql/3307/data
tmpdir  = /mysql/3307/tmp
socket=/mysql/3307/tmp/mysql.sock
log-error=/mysql/3307/logs/mysql.log
port=3307
server_id=3307
max_connections = 1000
innodb_buffer_pool_size = 260M
skip_name_resolve

# 字元集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

# bin-log日誌
log-bin=/mysql/3307/data/mysql-bin
binlog_format=row

# 慢日誌
slow_query_log = 1
slow_query_log_file = /mysql/3307/logs/slow.log
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 5
long_query_time = 1

[mysql]
socket=/mysql/3307/tmp/mysql.sock

[mysqladmin]
socket=/mysql/3307/tmp/mysql.sock

6.使用mysqld命令初始化mysql資料庫文件

// 授權mysql用戶管理相應的mysql目錄
chown -R mysql:mysql /mysql/

// 初始化多實例
mysqld  --defaults-file=/mysql/3306/conf/my.cnf  --basedir=/application/mysql  --initialize-insecure --user=mysql

mysqld  --defaults-file=/mysql/3307/conf/my.cnf  --basedir=/application/mysql  --initialize-insecure --user=mysql

7.通過mysqld_safe命令啟動多實例mysql

mysqld_safe --defaults-file=/mysql/3306/conf/my.cnf &
mysqld_safe --defaults-file=/mysql/3307/conf/my.cnf &

8.檢查操作

// 查看進程是否存在
ps -ef | grep mysql | grep -v "grep"

// 查看埠是否存在
ss -lntup | grep -E "3306|3307" 

// 本地登錄(-S 指定不同實例的socket)
mysql -uroot -p -S /mysql/3306/tmp/mysql.sock

9.多實例啟動腳本

#!/bin/bash

PORT=3306
SOCK_FILE_LOCK=/mysql/${PORT}/tmp/mysql.sock.lock
# start
function func_start(){
if [ -f ${SOCK_FILE_LOCK} ];then
   echo "MySQL ${PORT} has started..."
   exit 1
else
   echo "MySQL ${PORT} is start..."
   mysqld_safe --defaults-file=/mysql/3306/conf/my.cnf >/dev/null &
   result=$?
   [ ${result}  -ne 0 ] && echo "MySQL ${PORT} start failed..." || echo "MySQL ${PORT} start success.."
fi
}

# stop
function func_stop(){
if [ -f ${SOCK_FILE_LOCK}  ];then
   echo "MySQL ${PORT} is stop..."
   kill $(cat /mysql/${PORT}/tmp/mysql.sock.lock)
   count=0
   while [ $count -ne 60 ]
    do
      ((count++))
      # echo $count
      sleep 1
      if [ ! -f ${SOCK_FILE_LOCK}  ];then
         echo "MySQL ${PORT} stop success..."
         break
      else
         echo "MySQL ${PORT} is stop..."
      fi
   done
else
   echo "MySQL ${PORT} don't start..."
   exit 1
fi
}

case $1 in
  start)
     func_start;;
  stop)
     func_stop;;
  restart)
     func_stop
     sleep 3
     func_start
     echo "MySQL ${PORT} restart success...";;
esac

只需要將PORT變數進行替換即可


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、到Navicat官網下載使用版本進行安裝,具體操作不再詳述。Navcat官網下載鏈接:http://www.navicat.com.cn/download/navicat-premium ; 2、到GitHub下載DoubleLabyrinth大神發佈的Navicat Keygen,具體操作不再 ...
  • 一 資料庫初識 1.1 什麼是資料庫 資料庫(DataBase,簡稱DB),簡而言之可視為電子化的文件櫃 存儲電子文件的處所,用戶可以對文件中的數據運行新增,截取,更新,刪除等操作. 所謂資料庫是以一定方式儲存在一起,能予多個用戶 共用,具有儘可能小的冗餘度,與應用程式彼此獨立的數據集合. 資料庫的 ...
  • 最近項目遇到根據關鍵字匹配度排序,要求關鍵字匹配相等排在第一,關鍵字匹配最左邊排第二,關鍵字匹配最右邊排第三,關鍵字匹配中間排最後;遇到這樣查詢排序場景,用MySQL如何實現?用搜索引擎Elasticsearch如何實現? 方法一:按照上面需求用聯合查詢,可以實現方案,但是當數據量很大時,聯合查詢效 ...
  • 本文探討如何使用 RocketMQ Binder 完成 Spring Cloud 應用消息的訂閱和發佈。 介紹 "RocketMQ" 是一款開源的分散式消息系統,基於高可用分散式集群技術,提供低延時的、高可靠的消息發佈與訂閱服務,廣泛應用於多個領域,包括非同步通信解耦、企業解決方案、金融支付、電信、電 ...
  • 由於程式bug,導致之前很多數據入庫後信息不全,好在有基礎信息表,可以通過基礎信息表更新缺失欄位信息 1、通過 inner join語法實現多關聯更新 update a set a.name = b.name from product_detail a inner join product_base ...
  • 在公司隨便找3台測試機搭個MHA,下麵這個問題折騰了三天,之前沒遇到過,查了OS版本發現一致,可能是不同人弄的OS吧,知道是cpan的問題就是搞不定,鬱悶。。。[root@test247 ~]# masterha_check_repl --conf=/etc/masterha/app1.cnfWed ...
  • 一、分散式資料庫存儲 在前面的章節;GreenPlum資料庫是分散式架構資料庫;表的數據分佈在segment節點。那麼表的數據根據什麼策略來分佈的? GreenPlum資料庫性能依賴於跨數據節點均勻分佈 二、分佈策略 在GreenPlum資料庫在創建表時可以指定分佈策略:哈希分佈(DISTRIBUT ...
  • 假如有這樣一張表: 腳本如下: DROP TABLE IF EXISTS `jl_site_operation`;CREATE TABLE `jl_site_operation` ( `id` int(11) NOT NULL AUTO_INCREMENT, `site_id` int(11) DE ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...