mysql 多实例5.6_5.6 在一台机器上运行多个mysql 实例

参考官方文档:

在某些情况下,您可能希望在单台机器上运行多个MySQL实例。 您可能想要测试新的MySQL版本,同时保持现有生产环境不受干扰。 或者你可能想让不同的用户访问他们自己管理的不同mysqld服务器。 (例如,您可能是服务提供商,希望为不同的客户提供独立的MySQL安装。)

每个实例可以使用不同的MySQL服务器二进制文件,也可以对多个实例使用相同的二进制文件,也可以使用这两种方法的任意组合。 例如,您可以从MySQL 5.6运行服务器,从MySQL 5.7运行服务器,以查看不同版本如何处理给定的工作负载。 或者您可以运行当前生产版本的多个实例,每个实例管理一组不同的数据库。

无论您是否使用不同的服务器二进制文件,您运行的每个实例都必须为多个操作参数配置唯一值。 这消除了实例之间冲突的可能性。 可以在命令行,选项文件或设置环境变量中设置参数。 要查看给定实例使用的值,请连接到它并执行SHOW VARIABLES语句。

由MySQL实例管理的主要资源是数据目录。 每个实例应使用不同的数据目录,其位置是使用--datadir = dir_name选项指定的。

除了使用不同的数据目录之外,其他几个选项对于每个服务器实例的值必须不同:

--port控制TCP / IP连接的端口号。 或者,如果主机有多个网络地址,则可以使用--bind-address使每个服务器侦听不同的地址。

--socket控制Unix上的Unix套接字文件路径或Windows上的命名管道名称。 在Windows上,必须为配置为允许命名管道连接的服务器指定不同的管道名称。

该选项仅在Windows上使用。 它指定Windows服务器使用的共享内存名称,以允许客户端使用共享内存进行连接。 有必要为配置为允许共享内存连接的服务器指定不同的共享内存名称。

该选项指示服务器写入其进程ID的文件的路径名。

如果使用以下日志文件选项,则每个服务器的值必须不同:

为了获得更好的性能,您可以为每个服务器以不同的方式指定以下选项,以在多个物理磁盘之间分配负载:

拥有不同的临时目录也使得更容易确定哪个MySQL服务器创建了任何给定的临时文件。

如果您在不同位置安装了多个MySQL,则可以使用--basedir = dir_name选项为每个安装指定base目录。 这会导致每个实例自动使用不同的数据目录,日志文件和PID文件,因为每个参数的默认值都与base目录有关。 在这种情况下,您需要指定的唯一其他选项是--socket和--port选项。 假设您使用tar文件二进制分发安装不同版本的MySQL。 它们安装在不同的位置,因此您可以使用相应base目录下的命令bin/mysqld_safe为每个安装启动服务器。 mysqld_safe确定传递给mysqld的正确的--basedir选项,并且你只需要指定mysqld_safe的--socket和--port选项

如以下部分所述,可以通过指定适当的命令选项或通过设置环境变量来启动其他服务器。 但是,如果您需要更持久地运行多个服务器,则使用选项文件为每个服务器指定必须是唯一的选项值会更方便。 --defaults-file选项对此很有用。

5.6.1 设置多个数据目录

机器上的每个MySQL实例都应该有自己的数据目录。 该位置是使用--datadir = dir_name选项指定的。

为新实例设置数据目录有不同的方法:

创建一个新的数据目录。

复制现有的数据目录。

以下讨论提供了关于每种方法的更多细节。

警告

通常,您不应该有两台在相同数据库中更新数据的服务器。如果您的操作系统不支持无故障系统锁定,这可能会导致不愉快的意外。如果(尽管出现此警告)您使用相同的数据目录运行多个服务器并且启用了日志记录,则必须使用适当的选项来指定每个服务器独有的日志文件名。否则,服务器会尝试登录到相同的文件。

即使遵守了上述注意事项,这种设置仅适用于MyISAM和MERGE表格,而不适用于任何其他存储引擎。此外,这种针对在服务器之间共享数据目录的警告始终适用于NFS环境。允许多个MySQL服务器通过NFS访问公共数据目录是一个非常糟糕的主意。主要问题是NFS是速度瓶颈。 NFS的另一个风险是您必须设法确保两台或更多台服务器不会互相干扰。通常NFS文件锁定是由lockd守护进程处理的,但目前没有任何平台在任何情况下都可以100%可靠地执行锁定。

--仿ORACLE RAC 在此处是不好用的。不建议这样玩。

创建新的数据目录

使用这种方法,数据目录将处于与首次安装MySQL时有相同的状态。 它将具有默认的MySQL帐户集合并且没有用户数据。

在Unix上,初始化数据目录。 请参见第2.10节“安装后安装和测试”。

在Windows上,数据目录包含在MySQL发行版中:

适用于Windows的MySQL Zip存档分发包含未修改的数据目录。 您可以将这种分配解压缩到临时位置,然后将其数据目录复制到您设置新实例的位置。

Windows MSI软件包安装程序会创建并设置安装的服务器将使用的数据目录,但也会在安装目录下创建一个名为data的pristine“模板”数据目录。 在使用MSI包执行安装后,可以复制模板数据目录以设置其他MySQL实例。

拷贝一个现有的数据目录

使用这种方法,数据目录中的任何MySQL帐户或用户数据都会转移到新的数据目录中。

使用数据目录停止现有的MySQL实例。 这必须是干净的关闭,以便实例将任何挂起的更改刷新到磁盘。

将数据目录复制到新数据目录应该位于的位置。

复制现有实例使用的my.cnf或my.ini选项文件。 这是新实例的基础。

修改新的选项文件,以便引用原始数据目录的任何路径名引用新的数据目录。 另外,修改每个实例必须唯一的其他选项,例如TCP / IP端口号和日志文件。 有关每个实例必须唯一的参数列表,请参见第5.6节“在一台计算机上运行多个MySQL实例”。

启动新实例,告诉它使用新的选项文件。

5.6.2 在Unix 上运行多个MYSQL 实例

注意:

这里的讨论使用mysqld_safe来启动多个MySQL实例。 对于使用RPM分发的MySQL安装,服务器启动和关闭由Linux平台上的systemd进行管理。 在这些平台上,mysqld_safe未安装,因为它不是必需的。

一种方法是在Unix上运行多个MySQL实例,以编译具有不同默认TCP / IP端口和Unix套接字文件的不同服务器,以便每个服务器在不同的网络接口上侦听。 为每个安装编译在不同的基本目录中也会自动生成单独的编译数据目录,日志文件和每个服务器的PID文件位置。

假设现有的5.6服务器配置为默认的TCP / IP端口号(3306)和Unix套接字文件(/tmp/mysql.sock)。 要将新的5.7.23服务器配置为具有不同的操作参数,请使用如下所示的CMake命令:

shell> cmake . -DMYSQL_TCP_PORT=port_number \ -DMYSQL_UNIX_ADDR=file_name \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.23

这里,port_number和file_name必须与默认的TCP / IP端口号和Unix套接字文件路径名不同,并且CMAKE_INSTALL_PREFIX值应指定与现有MySQL安装位置不同的安装目录。

如果你有一个MySQL服务器监听给定的端口号,你可以使用下面的命令找出它用于几个重要的可配置变量的操作参数,包括基本目录和Unix套接字文件名:

shell> mysqladmin --host=host_name --port=port_number variables

通过该命令显示的信息,您可以知道配置其他服务器时不应使用哪些选项值。

如果将localhost指定为主机名,则mysqladmin默认使用Unix套接字文件连接而不是TCP / IP。 要明确指定连接协议,请使用--protocol = {TCP | SOCKET | PIPE | MEMORY}选项。

你不需要编译一个新的MySQL服务器,只需要启动一个不同的Unix套接字文件和TCP / IP端口号即可。 也可以使用相同的服务器二进制文件,并在运行时使用不同的参数值启动它的每次调用。 一种方法是使用命令行选项:

shell> mysqld_safe --socket=file_name --port=port_number

要启动第二台服务器,请提供不同的--socket和--port选项值,并将--datadir = dir_name选项传递给mysqld_safe,以便服务器使用不同的数据目录。

或者,将每个服务器的选项放入不同的选项文件,然后使用指定相应选项文件的路径的--defaults-file选项启动每个服务器。 例如,如果两个服务器实例的选项文件名为/usr/local/mysql/my.cnf和/usr/local/mysql/my.cnf2,请启动服务器,如下所示:command:

shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf

shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2

实现类似效果的另一种方法是使用环境变量来设置Unix套接字文件名和TCP / IP端口号:

shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock

shell> MYSQL_TCP_PORT=3307

shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT

shell> mysql_install_db --user=mysql

shell> mysqld_safe --datadir=/path/to/datadir &

这是启动第二台服务器用于测试的快速方法。 这种方法的好处在于,环境变量设置适用于您从同一个shell调用的任何客户端程序。 因此,这些客户端的连接会自动导向第二台服务器。

在Unix上,mysqld_multi脚本提供了启动多个服务器的另一种方式。

5.6.4 在多个服务器环境下使用 客户端程序

要将客户端程序连接到正在侦听编译到客户端的不同网络接口的MySQL服务器,可以使用以下方法之一:

使用--host = host_name --port = port_number启动客户端,使用TCP / IP连接到远程服务器,使用--host = 127.0.0.1 --port = port_number使用TCP / IP连接到本地服务器,或者 使用--host = localhost --socket = file_name连接到使用Unix套接字文件或Windows命名管道的本地服务器。

用--protocol = TCP启动客户端使用TCP / IP进行连接,--protocol = SOCKET使用Unix套接字文件进行连接,--protocol = PIPE使用命名管道进行连接,或--protocol = MEMORY进行连接 共享内存。 对于TCP / IP连接,您可能还需要指定--host和--port选项。 对于其他类型的连接,您可能需要指定--socket选项来指定Unix套接字文件或Windows命名管道名称,或者指定共享内存名称的-shared-memory-base-name选项。 共享内存连接仅在Windows上受支持。

在Unix上,在启动客户端之前,将MYSQL_UNIX_PORT和MYSQL_TCP_PORT环境变量设置为指向Unix套接字文件和TCP / IP端口号。 如果您通常使用特定的套接字文件或端口号,则可以将命令设置为将这些环境变量设置到.login文件中,以便它们在您每次登录时应用

在选项文件的[client]组中指定默认的Unix套接字文件和TCP / IP端口号。 例如,您可以在Windows上使用C:\ my.cnf,或在Unix上的主目录中使用.my.cnf文件。

在C程序中,您可以在mysql_real_connect()调用中指定套接字文件或端口号参数。 你也可以通过调用mysql_options()来让程序读取选项文件

如果您使用Perl DBD :: mysql模块,则可以从MySQL选项文件读取选项。 例如:

$dsn = "DBI:mysql:test;mysql_read_default_group=client;" . "mysql_read_default_file=/usr/local/mysql/data/my.cnf"; $dbh = DBI->connect($dsn, $user, $password);

其他编程接口可以提供用于读取选项文件的类似功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值