多个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/n/130110.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
YQZN8YQZN8
上一篇 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

发表回复

登录后才能评论