怎么才能完整复制MySQL数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么才能完整复制MySQL数据库相关的知识,希望对你有一定的参考价值。
有两种办法。1、在B机器上装mysql。
将A机器上的mysql/data下的你的数据库目录整个拷贝下来。
将B机器上的mysql服务停止。
找到B机器上的mysql/data目录,将你拷贝的目录粘贴进去,然后启动mysql服务就可以了。
2、使用SQL语句备份和恢复
你可以使用SELECT INTO OUTFILE语句备份数据,并用LOAD DATA INFILE语句恢复数据。这种方法只能导出数据的内容,不包括表的结构,如果表的结构文件损坏,你必须要先恢复原来的表的结构。
语法:
SELECT * INTO OUTFILE ¦ DUMPFILE ’file_name’ FROM tbl_name
LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ’file_name.txt’ [REPLACE ¦ IGNORE]
INTO TABLE tbl_name
SELECT ... INTO OUTFILE ’file_name’
在dos命令提示符下使用mysqldump命令进行备份.
如下:
C:\Documents and Settings\Administrator>mysqldump yinshi >c:\\backup.txt -uroot
-p12142022 参考技术A group_replication_member_expel_timeout 指定组复制组成员在产生怀疑之后,从组中排除怀疑失败的成员之前等待的时间(以秒为单位)。在产生怀疑之前的最初 5 秒检测时间不计入该时间。直到并包括 MySQL 8.0.20 在内,group_replication_member_expel_timeout 默认值均为 0,这意味着没有等待时间,并且在 5 秒钟的检测时间结束后,可疑成员应立即被驱逐。从 MySQL 8.0.21 开始,该值默认为 5,这意味着在 5 秒钟的检测时间后如果该节点还是不正常,那会在等 5 秒钟,如果可疑成员还是不正常,超过这个时间将被驱逐。
为验证该参数对集群影响,我们通过实验模拟不同时长的网络延迟,然后调整group_replication_member_expel_timeout 值观察该参数值对集群驱逐故障节点的影响。
mysql结构复制从master到slave,slave数据完整
【中文标题】mysql结构复制从master到slave,slave数据完整【英文标题】:mysql structural replication from master to slave with slave data intact 【发布时间】:2012-09-02 11:28:51 【问题描述】:这是我想要实现的目标
-
我想建立一个只保存表的主数据库
结构,没有数据。
从属数据库将采用主数据库的结构。
只有从数据库会包含数据
任何结构更改(例如更改表、删除表等)
master 应该更新到 slave 数据库而不丢失数据
如何实现这一点,因为现在我需要在每个数据库上手动运行查询,以保持结构同步,这不是一个好的选择。我想自动化这个过程,以便任何可以帮助我的人。非常感谢任何可以让我实现这一目标的建议或任何教程的链接
【问题讨论】:
删除表而不丢失数据?真的吗? 丢失的数据部分是针对 alter 命令而不是 drop.. 如果我想删除表,我不想保存数据 【参考方案1】:这实际上无法完成,但您可以通过某种方式破解。首先设置普通的从站。同步后,它们将具有与单个主控相同的架构。现在的诀窍是在主服务器上进行查询,这些查询传播到从服务器,但不要在主服务器上留下数据。首先像往常一样进行查询,确保每个表都有一个自动增量键:
INSERT INTO tbl (col1, col2, col3) VALUES (val1, val2, val3);
SELECT LAST_INSERT_ID();
当您进行查询时,记录时间,并将最后一个插入 id 保存在应用程序级别的队列中。间歇性地在从属服务器上进行查询(例如,10 秒,具体取决于您的负载):
SHOW SLAVE STATUS;
并从当前系统时间中减去 Seconds_Behind_Master 值(调用此时间 t1)。现在遍历旧查询队列,只要该元素上的时间大于 t1,就删除第一个元素。每次删除队列中的元素时,您都希望从主设备中删除该记录,但将其保留在从设备上(您已经知道它是因为自从您进行所述查询以来它们已经更新)。所以现在清除主数据库(在给定时间将有大约 10 秒的数据)而不清除从属数据库:
SET sql_log_bin=0;
DELETE FROM tbl WHERE autoincrement_key=last_insert_id;
SET sql_log_bin=1;
其中 last_insert_id 是存储的 LAST_INSERT_ID() 以供查询清除。
【讨论】:
感谢您的回复,一定会尝试并告诉您进展如何以上是关于怎么才能完整复制MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章