我需要改进不加载生产服务器的数据库的备份。我读到了一个很好的解决方案,那就是在从服务器上设置数据库复制和执行mysqldumps。
但对"replicate_do_db“的描述表明,更新不适用于跨数据库的查询。这里有一个问题--我有很多PHP应用程序(很少是非常老的),所以我不能保证它们不会使用这种查询。我不想有不同步的数据库.
还有别的选择吗?或者只对知名应用程序使用复制,而对其他应用只使用mydumper/mysqldump?
我知道Percona XtraBackup是存在的,但是我希望有.sql格式的备份。
发布于 2019-01-11 15:39:39
replicate_do_db告诉系统应该为哪些数据库复制SQL查询(我假设是SQLReplication而不是行复制)。
假设replicate_do_db = DB_1是这样工作的
mysql> use DB_1;
mysql> insert into Table_1 values (1,2,3);现在,这个insert语句将复制到从主机上。
mysql> use DB_2;
mysql> insert into DB_1.Table_1 values (2,3,4);这个insert语句不会被复制,因为您使用的是DB_2,它没有被复制,即使您碰巧在查询中指定了DB_1。
mysql> user DB_1;
mysql> insert into DB_2.Table_2 values (9,8,7);这个insert语句将被复制,所以如果从主机没有DB_2.Table_2,复制就会中断。
简而言之,这就是跨数据库查询的问题。注意,跨不同数据库的select语句不是问题,因为只有数据修改语句被复制,而不是数据查询语句。
据推测,如果主程序中有许多在应用程序中使用和更新的数据库,您将希望将这些更新全部复制到从主机上,因此您需要使用replicate_do_db指定所有这些数据库;我不认为这在您的情况下会像您描述的那样成为一个问题。
只需确保您对复制状态有某种程度的监视,以便如果复制确实中断,您将尽快意识到这个问题,并能够在复制的数据变得太老之前修复它。提示:从主机上的show slave status;并检查"Slave_IO_Running“和"Slave_SQL_Running”都是“是”。
我还每天晚上使用mk-table-checksum来比较主表和从表,以确定数据库表是相同的。
https://serverfault.com/questions/948617
复制相似问题