用于导出的MySQL批处理文件调用刷新表

时间:2015-10-02 22:28:49

标签: mysql batch-file

我将批处理文件用于从server1到server2的复制数据库。

Step 1: call stored procedure for FLUSH TABLES table1,table2, ..., table1000 FOR EXPORT;
Step 2: copy files .ibd and .cfg to temp directory and archive this
Step 3: unlock tables;

问题是第一步 - 创建然后删除文件.cfg,但不调用解锁表。为什么?文件.cfg已创建并立即消失,我没有时间复制

.bat文件命令:

mysql -u %db_user% -p%db_password% %db_name% --default-character-set=utf8 < stored_proc_flush_tables.sql

file stored_proc_flush_tables.sql:

DROP PROCEDURE IF EXISTS  stored_proc_flush_tables;
DELIMITER //
CREATE PROCEDURE stored_proc_flush_tables
(   

)
BEGIN

DECLARE t_name BLOB;
DECLARE tmp_query BLOB;
DECLARE done_tables INT DEFAULT 0;
DECLARE cursor_tables CURSOR FOR 
    SELECT table_name FROM information_schema.tables WHERE table_schema=DB_NAME;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_tables = 1;

SET @table_name = '';
SET @tmp_query = '';

OPEN cursor_tables;

    tables_loop: LOOP
        FETCH cursor_tables INTO t_name;
        IF done_tables = 1 THEN
            LEAVE tables_loop;
        END IF;

        SET @tmp_query = CONCAT_WS('', @tmp_query, ',', t_name);

    END LOOP;
CLOSE cursor_tables;

SET @tmp_query = TRIM(LEADING ',' FROM @tmp_query);
SET @tmp_query = CONCAT_WS('', 'FLUSH TABLES', ' ', @tmp_query, ' ', 'FOR EXPORT');
PREPARE stmt FROM @tmp_query;
EXECUTE stmt;

END //
DELIMITER ;

call stored_proc_flush_tables();

文件.cfg已创建并立即消失,我没有时间复制它们

1 个答案:

答案 0 :(得分:0)

问题是你结束使用 FLUSH TABLES ... FOR EXPORT 的mysql会话 在尝试复制文件之前。

当mysql会话/连接结束时,所有锁解锁,* .cfg被删除,因为临时文件被删除。

所以你应该有程序使FLUSH ... FOR EXPORT并保持会话 打开然后复制文件,然后释放表锁(或结束会话)。