在以下binlog_format=ROW情况下,以下段落中的讨论将不适用: 因为在这种情况下,临时表不会被复制;这意味着,如果从站意外关闭,则从站上永远不会丢失任何临时表。本节的其余部分仅在使用基于语句或混合格式的复制时适用。对于涉及临时表的语句,可以使用基于语句的格式安全地记录这些语句,无论何时binlog_format是 STATEMENT或MIXED,从站上复制的临时表的丢失都会成为一个问题 。有关基于行的复制和临时表的更多信息,请参见临时表 的基于行的日志记录。
使用临时表时,安全关闭从站。 临时表将被复制,除非您停止从属服务器(不仅是从属线程),并且已复制了临时表,这些临时表已打开以供尚未在从属服务器上执行的更新使用。如果停止从服务器,则重新启动从服务器时,这些更新所需的临时表将不再可用。为避免此问题,请勿在从站打开临时表时关闭它。而是,使用以下过程:
发表STOP SLAVE SQL_THREAD声明。
使用SHOW STATUS检查的数值 Slave_open_temp_tables 变量。
如果该值不为0,请使用重新启动从SQL线程, START SLAVE SQL_THREAD并在以后重复此过程。
当值为0时,发出mysqladmin shutdown命令停止从服务器。
临时表和复制选项。 默认情况下,所有临时表都被复制;这种情况是否不存在任何匹配 --replicate-do-db, --replicate-do-table或 --replicate-wild-do-table 在效果选项。但是, --replicate-ignore-table和 --replicate-wild-ignore-table 选项适用于临时表。唯一的例外是,为了在会话结束时正确删除临时表,复制从属服务器始终复制一条 DROP TEMPORARY TABLE IF EXISTS语句,而不管通常适用于指定表的任何排除规则如何。
使用基于语句的复制或混合格式的复制时,建议的做法是指定一个前缀,以专用于命名您不想复制的临时表,然后使用一个 --replicate-wild-ignore-table 选项来匹配该前缀。例如,你可能会给开头的每一这样的表的名称norep(如norepmytable, norepyourtable等),然后使用 --replicate-wild-ignore-table=norep% ,以防止它们被复制。




