加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

优点和设置MySQL复制

发布时间:2022-11-16 16:31:13 所属栏目:MySql教程 来源:未知
导读: 让我们来看看这个语句做了什么,以及它的选项。第一个选项跳过锁定表,所以如果它目前在生产环境中运行,它不会影响数据库性能。“单事务”选项在转储文件内容之前会发送一个START transac

让我们来看看这个语句做了什么,以及它的选项。第一个选项跳过锁定表,所以如果它目前在生产环境中运行,它不会影响数据库性能。“单事务”选项在转储文件内容之前会发送一个START transaction命令。如果你还记得,nnoDB存储引擎支持事务性语句,这有助于确保数据完整性。

“flush logs”选项在创建转储之前会刷新所有日志,所以在将信息转储到备份文件之前,没有未提交或未完成的数据事务。

“十六进制blob”选项在使用blob字段时使用十六进制表示法。Blob字段是用于图像或文件等二进制数据的大型存储字段。

最后一个“master data”选项将二进制日志文件信息写入转储,以便以后可以引用。在本例中,我们使用的值为2。

所有信息都导出到转储。SQL文件,包含您的数据库信息。如果数据异常大,那么您可能需要使用Gzip压缩日志文件。以防你忘了,下面的命令在将数据库模式和数据导出到SQL转储文件后压缩日志文件。

mysqldump——skip-lock-tables——single-transaction——flush-logs——hex-blob——master-data=2 -A | gzip > ~/dump.sql

在创建转储文件之后,您需要检查它的两项信息。在配置从服务器时,您需要这两条信息。用任何文本编辑器检查文件,并记下以下两个变量的值:

MASTER_LOG_FILE

MASTER_LOG_POS

这就是你需要在主服务器上做的所有事情。您需要将sql文件转储发送到从服务器,因为我们需要它进行从服务器配置。

在转到从服务器之前,可以查看一下主服务器的状态,以确保没有任何错误。在主数据库上运行以下语句:

显示主状态;

你将看到类似如下的输出:

文件位置Binlog_Do_DB Binlog_Ignore_DB . txt

----------------------------------------------------------------------------------------------------------

Mysql-bin。0000001 100 sampledatabase

位置值应该与前面注意到的MASTER_LOG_POS变量相同。这是复制服务器将开始提取数据的位置。

设置从服务器

你的转储。SQL文件在手,是时候设置从服务器了。下面的命令和配置应该在从机上完成。确保在使用这些设置步骤之前移动到从属服务器。

就像主服务器一样,你也需要配置从服务器的my.cnf文件,为从服务器配置正确的配置。

下面是一个从服务器的mysqld部分的例子。

(mysqld)

服务器id = 101

binlog-format =混合

log_bin = mysql-bin

relay-log = mysql-relay-bin

log-slave-updates = 1

只读= 1

您会注意到,这个文件与从服务器的配置不同。服务器ID也不一样。每个MySQL服务器都应该分配不同的ID。从服务器设置了相同的二进制日志设置,但数据是只读的。这是因为从机完全依赖于主服务器。你不希望用户在从服务器上插入记录时没有先在主服务器上插入数据。因为主服务器不会轮询从服务器的数据,所以在从服务器上插入数据会让你在一个服务器上获得数据,而不是在另一个服务器上。同步是单向的,所以数据应该只从主服务器流向服务器。

配置完服务器后,必须重新启动MySQL服务器,就像重新启动主服务器一样。T输入以下代码到shell命令中。

mysqld重启

现在是将数据和SQL模式导入复制服务器的时候了。如果在将文件转储到备份文件之前压缩了文件,那么首先需要将压缩文件中的信息提取到原始的.sql转储文件中。

您已经导出了sql server,但是现在您需要将语句导入从服务器的数据库。记住,mysqldump将数据导出为语句,所以所有语句运行起来可能需要一段时间。

要导入新的从数据库,在从MySQL服务器上运行以下命令:

Mysql -u root -p < ~/dump.sql

当然,这个命令假设转储文件与前面导出的sql文件在同一个用户目录中。

如果你先压缩文件,你首先需要提取信息。下面的语句向您展示了如何首先提取sql文件,然后导入转储。SQL文件到从数据库。

gunzip ~ / dump.sql.gz

Mysql -u root -p < ~/dump.sql

如果你使用Windows操作系统,你需要使用第三方工具来提取sql文件。该命令假设您运行的是基于Unix的系统。

现在你需要告诉MySQL从服务器使用它的主服务器日志文件,以及它将来如何连接到主服务器。你需要指定一些信息,就像主服务器一样,你还需要一个从服务器的用户帐户。下面的命令设置一个具有适当用户权限的服务器。

CHANGE MASTER TO MASTER_HOST='>',MASTER_USER='replicant',MASTER_PASSWORD='', MASTER_LOG_FILE='', MASTER_LOG_POS=;

开始的奴隶;

上面的命令与主服务器用户创建有点不同。第一个语句要求指定主服务器。当然,从服务器需要知道这些信息才能连接到正确的主服务器。您还需要指定主服务器的密码。

还记得前面记录的MASTER_LOG_FILE和MASTER_LOG_POS值吗?这些值与这条语句一起使用。

最后一条语句告诉MySQL服务器启动从服务。这类似于在配置完成后,当服务器准备好运行时启动服务器。

完成配置和导入后,可以通过运行以下语句检查本地的主、从配置:

显示从机状态\ g

这个命令可以在任何时候运行,以确保从数据库正在轮询主服务器的新信息。如果一切运行顺利,则会显示以下输出信息。

Last_Error

Slave_IO_State……等待master发送事件

Seconds_Behind_Master……2

Last_Error语句应该是空的。该值表示MySQL数据库在轮询主服务器时发现的最后一个错误。

Slave_IO_State的值应该设置为“waiting for master to send event”。这意味着从服务器在等待主服务器在二进制日志中有新的写事件。当没有更新时,就不会发送任何数据来保存网络和硬件资源。只有在进行更改时,数据才会被移动。记住MySQL 复制表,当你运行SELECT语句时没有数据更改,所以任何纯读语句都不会在从服务器上显示出来。如果你使用任何SHOW命令,它们也不会被记录下来,因为它们不会改变数据库上的任何信息。

Seconds_Behind_Master值是MySQL从用户落后于主服务器的秒数。在本例中,是2秒。如果你有一个繁忙的MySQL服务器数据库,你可能想要改变这个值。较小的服务器可以在较大的滞后时间下工作。减少对数据库的轮询将保持主数据库和网络资源的性能。然而,如果因为延迟时间增加而传输大量数据,这可能会损害网络资源和性能。您需要使用不同的值来确定哪个值最适合您的网络。

需要注意的是,所有这些步骤都可以在MySQL数据库服务器在生产环境中运行时完成,但在进行大型配置更改(如主从配置)之前,一定要对数据进行备份。mysqldump文件是您需要的备份,但如果您在运行其他应用程序数据的从服务器上添加复制,则应该在更改数据库配置之前进行备份。

MySQL复制常见错误及处理

在某些情况下,您可能会意外更改复制服务器中的数据。您不希望手动更改复制服务器中的数据。相反,您总是将数据推送到主服务器或编辑主服务器上的数据。然而,这种情况有时会发生,要么是不小心在错误的服务器上运行查询,要么是管理员没有意识到从数据库处于复制环境中。

如果发生这种情况,您必须首先通过事务日志或手动编辑数据删除数据更改。您可以重做这些步骤来重新创建复制的从数据库。无论您做什么选择,从数据库应该始终是主数据库的镜像副本,并且您不应该在从环境中手动更改数据。如果在主数据库崩溃时需要使用复制的数据作为支持备份,这可能会在服务器上造成错误,并破坏数据完整性。

在你修复了数据之后,你应该在从服务器上运行以下命令:

停止奴隶;

设置全局sql_slave_skip_counter = 1;

开始的奴隶;

这条语句首先停止MySQL服务器。然后它告诉从服务器跳过最新的主服务器事件。在本例中,我们跳过一个事件。然后,我们重新启动MySQL数据库,将其返回生产环境。

如果您发现从服务器在复制过程中收到了错误,这一步骤也很有用。出现这种情况的原因有很多。导致这个问题的几个原因是网络连接错误、格式错误的语句、损坏的语句或服务器上的崩溃。不过,你应该小心使用这条语句。如果跳过太多事件,就会错过对数据库数据的重要事务性更改。

有些数据库管理员在将数据从主服务器复制到mysqldump文件时锁定表。这将阻止MySQL数据库服务器向您的表写入任何数据。我们提供了一个不中断用户的解决方案,但如果你需要在复制数据时停止写语句,这并不总是一个选项。它经常被负责非常活跃的数据库服务器的数据库管理员使用。

当你锁定表时,你必须在之后解锁它们。如果你注意到写语句在主数据库上失败了,运行以下命令解锁SQL表。

打开表;

就是这样——这个语句解锁了你的表,所以你的主数据库可以继续作为生产服务器运行。

本文向您展示了如何复制数据。如果您有资源和时间来创建复制环境,那么在主数据库崩溃时,您可以极大地改进灾难恢复工作。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!