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

php – mysql结构复制从主设备到从设备,从设备数据完好无损

发布时间:2020-12-13 22:45:00 所属栏目:PHP教程 来源:网络整理
导读:这就是我想要实现的目标 我想设置一个只保存表的主数据库 结构,没有数据. 从属数据库将从主数据库中获取结构. 只有从站DB才会包含数据 任何结构更改(如alter table,drop table等) master应该更新到从属数据库而不会丢失数据 我怎样才能实现这一点,因为现在我
这就是我想要实现的目标

>我想设置一个只保存表的主数据库
结构,没有数据.
>从属数据库将从主数据库中获取结构.
只有从站DB才会包含数据
>任何结构更改(如alter table,drop table等)
master应该更新到从属数据库而不会丢失数据

我怎样才能实现这一点,因为现在我需要在每个数据库上手动运行查询,以保持结构同步,这不是一个好的选择.我想要自动化这个过程,所以任何人都可以帮助我.任何建议或链接到任何教程,这将允许我实现这一点非常感谢

解决方法

它不可能真的完成,但你可以通过你的方式破解.首先设置普通的奴隶.一旦同步,它们将具有与单个主机相同的架构.现在的诀窍是对传播到从站的主站进行查询,但不要在主站上留下数据.首先按照通常的方式进行查询,确保每个表都有一个自动增量键:

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(),用于消除查询.

(编辑:李大同)

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

    推荐文章
      热点阅读