多個mysql數據庫實例(mysql 多個實例)

本文目錄一覽:

mysql如何創建多個實例,求步驟,謝謝,急求

大多情況下,需要可靠而有效地克隆 MySQL 實例數據。這包括 MySQL 高可用的解決方案,其中需要在將實例加入組複製集群之前配置實例,或者在經典複製模型中將其添加為 Slave。

為複製拓撲而創建 MySQL 副本一直很麻煩。涉及的步驟很多,首先要備份 MySQL 服務器,通過網絡將備份傳輸到我們想要添加到複製集的新 MySQL 節點,然後在該節點上恢復備份並手動啟動 MySQL 服務器。為了高可用,最好還要將其正確設置備份的 GTID,並啟動並運行群集。涉及的手動步驟數量過多不利於高可用。CLONE 插件解決了這個問題並簡化了副本配置。使您可以使用 MySQL 客戶端(和 SQL 命令)來配置新節點並在發生時觀察克隆進度。無需手動處理多個步驟並維護自己的基礎架構來配置新的 MySQL 節點。

MySQL 8.0.17 引入了 CLONE SQL 語句,使當前的 MySQL 服務器成為另一個運行在不同節點的 MySQL 服務器的“克隆”。我們將執行 clone 語句的服務器實例稱為“受體”。克隆的源服務器實例稱為“供體”。供體克隆以一致的快照存儲在 InnoDB 存儲引擎中的所有數據和元數據,以替換受體中的數據。

成功執行 CLONE SQL 語句後,將自動重新啟動受體服務器。重新啟動涉及恢復克隆的快照數據,就像用老方法複製數據一樣。恢復完成後,受體就是供體的克隆版,隨時可以使用!

這裡有一些關於克隆過程的重要注意事項。

不克隆 MySQL 配置參數,並且受體保留所有原始配置參數,如克隆之前。這樣做是因為許多配置可能特定於節點(例如 PORT),因此保留它們似乎是一個不錯的選擇。另一方面,一些存儲配置確實需要在供體和受體之間匹配(例如 innodbpagesize),如果這樣的配置參數不匹配,CLONE 將報告錯誤。

CLONE 插件不會克隆二進制日誌。

CLONE 插件目前僅支持 InnoDB 存儲引擎。在其他存儲引擎(如 MyISAM 和 CSV)中創建的表將被克隆為空表。克隆基礎架構的設計允許克隆 MySQL 支持的任何存儲引擎。但是,只有 InnoDB 序列化和反序列化方法已經實現並經過測試。

克隆會阻止供體中的所有並發 DDL。

需要注意的事實是受體放棄所有數據以及任何二進制日誌,以便成為供體實例的克隆。在執行 CLONE 之前,如果認為有必要,需要備份當前受體數據。

如何在同一台機器上安裝多個MySQL的實例

這種架構一般用在以下三類場景

1. 備份多台 Server 的數據到一台如果按照數據切分方向來講,那就是垂直切分。比如圖 2,業務 A、B、C、D 是之前拆分好的業務,現在需要把這些拆分好的業務匯總起來備份,那這種需求也很適用於多源複製架構。實現方法我大概描述下:業務 A、B、C、D 分別位於 4 台 Server,每台 Server 分別有一個數據庫來隔離前端的業務數據,那這樣,在從庫就能把四台業務的數據全部匯總起來,而不需要做額外的操作。那沒有多源複製之前,要實現這類需求,只能在匯總機器上搭建多個 MySQL 實例,那這樣勢必會涉及到跨庫關聯的問題,不但性能急劇下降,管理多個實例也沒有單台來的容易。

2. 用來聚合前端多個 Server 的分片數據。

同樣,按照數據切分方向來講,屬於水平切分。比如圖 3,按照年份拆分好的數據,要做一個匯總數據展現,那這種架構也非常合適。實現方法稍微複雜些:比如所有 Server 共享同一數據庫和表,一般為了開發極端透明,前端配置有分庫分表的中間件,比如愛可生的 DBLE。

3. 匯總併合並多個 Server 的數據

第三類和第一種場景類似。不一樣的是不僅僅是數據需要匯總到目標端,還得合併這些數據,這就比第一種來的相對複雜些。比如圖 4,那這樣的需求,是不是也適合多源複製呢?答案是 YES。那具體怎麼做呢?

如何在一台主機上創建MySQL多實例

可以使用mysql_multi在一台主機上啟動多實例數據庫,用一個配置文件即可,要指定以下內容(不同實例的配置,根據自己的實際情況配置):

[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld_safe #根據自己的mysql目錄配置

mysqladmin = /usr/local/mysql/bin/mysqladmin

[mysqld1]

port = 3306

socket = /tmp/mysql3306.sock

basedir=/usr/local/mysql

datadir=/mysqldata/data3306

[mysqld2]

port = 3307

socket = /tmp/mysql3307.sock

basedir=/usr/local/mysql

datadir=/mysqldata/data3307

之後再初始化數據庫的目錄:

cd /usr/local/mysql/;./scripts/mysql_install_db –datadir=/mysqldata/data3307/ –user=mysql

cd /usr/local/mysql/;./scripts/mysql_install_db –datadir=/mysqldata/data3306/ –user=mysql

再啟動多實例:

/usr/local/mysql/bin/mysqld_multi start 1-2

如何登陸:

本地登陸指定套接字文件即可

mysql -S /tmp/mysql3306.sock

如果自己還玩兒不會加這個群問371561513

PHP同時連接多個mysql數據庫示例代碼

這篇文章主要介紹了PHP同時連接多個mysql數據庫的具體實現,需要的朋友可以參考下

實例:

代碼如下:

?php

$conn1

=

mysql_connect(“127.0.0.1”,

“root”,”root”,”db1″);

mysql_select_db(“db1”,

$conn1);

$conn2

=

mysql_connect(“127.0.0.1”,

“root”,”root”,”db2″);

mysql_select_db(“db2”,

$conn2);

$sql

=

“select

*

from

ip”;

$query

=

mysql_query($sql);

if($row

=

mysql_fetch_array($query))

echo

$row[0].”n”;

$sql

=

“select

*

from

web

“;

$query

=

mysql_query($sql);

if($row

=

mysql_fetch_array($query))

echo

$row[0];

?

這段代碼存在問題,在程序執行時會報錯:PHP

Warning:

mysql_fetch_array()

expects

parameter

1

to

be

resource,

boolean

given

in

….

原因分析:

程序開始建立兩個數據庫鏈接,函數mysql_query()原型:

resource

mysql_query

(

string

$query

[,

resource

$link_identifier

]

)

向與指定的連接標識符關聯的服務器中的當前活動數據庫發送一條查詢。如果沒有指定

link_identifier,則使用上一個打開的連接。如果沒有打開的連接,本函數會嘗試無參數調用

mysql_connect()

函數來建立一個連接並使用之。查詢結果會被緩存。

在本例中由於沒有指定link_identifier,所以,在執行第一條sql時,默認使用的是上一個打開的鏈接,即$conn2,而實際上第一條sql語句應該使用的是$conn1,所以導致報錯,所以為了能夠鏈接多個mysql數據庫,可以使用如下方法:

方法1:在mysql_query函數中指定所用連接,即:

代碼如下:

?php

$conn1

=

mysql_connect(“127.0.0.1”,

“root”,”root”,”db1″);

mysql_select_db(“Muma”,

$conn1);

$conn2

=

mysql_connect(“127.0.0.1”,

“root”,”root”,”db2″);

mysql_select_db(“product”,

$conn2);

$sql

=

“select

*

from

ip”;

$query

=

mysql_query($sql,$conn1);

//添加連接$conn1

if($row

=

mysql_fetch_array($query))

echo

$row[0].”n”;

$sql

=

“select

*

from

web

“;

$query

=

mysql_query($sql,

$conn2);

if($row

=

mysql_fetch_array($query))

echo

$row[0];

?

方法2:在sql語句中關聯所用數據庫,此時可以省略mysql_query的第二個參數,即:

代碼如下:

?php

$conn1

=

mysql_connect(“127.0.0.1”,

“root”,”root”,”db1″);

mysql_select_db(“db1”,

$conn1);

$conn2

=

mysql_connect(“127.0.0.1”,

“root”,”root”,”db2″);

mysql_select_db(“db2”,

$conn2);

$sql

=

“select

*

from

db1.ip”;

//關聯數據庫

$query

=

mysql_query($sql);

if($row

=

mysql_fetch_array($query))

echo

$row[0].”n”;

$sql

=

“select

*

from

db2.web

“;

$query

=

mysql_query($sql);

if($row

=

mysql_fetch_array($query))

echo

$row[0];

?

原創文章,作者:YQZN8,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130110.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YQZN8的頭像YQZN8
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • 為什麼Python不能編譯?——從多個方面淺析原因和解決方法

    Python作為很多開發人員、數據科學家和計算機學習者的首選編程語言之一,受到了廣泛關注和應用。但與之伴隨的問題之一是Python不能編譯,這給基於編譯的開發和部署方式帶來不少麻煩…

    編程 2025-04-29
  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python生成隨機數的應用和實例

    本文將向您介紹如何使用Python生成50個60到100之間的隨機數,並將列舉使用隨機數的幾個實際應用場景。 一、生成隨機數的代碼示例 import random # 生成50個6…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • Python合併多個相同表頭文件

    對於需要合併多個相同表頭文件的情況,我們可以使用Python來實現快速的合併。 一、讀取CSV文件 使用Python中的csv庫讀取CSV文件。 import csv with o…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • 從多個方面用法介紹yes,but let me review and configure level of access

    yes,but let me review and configure level of access是指在授權過程中,需要進行確認和配置級別控制的全能編程開發工程師。 一、授權確…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29

發表回復

登錄後才能評論