我将批处理文件用于从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已创建并立即消失,我没有时间复制它们
答案 0 :(得分:0)
问题是你结束使用 FLUSH TABLES ... FOR EXPORT 的mysql会话 在尝试复制文件之前。
当mysql会话/连接结束时,所有锁解锁,* .cfg被删除,因为临时文件被删除。
所以你应该有程序使FLUSH ... FOR EXPORT并保持会话 打开然后复制文件,然后释放表锁(或结束会话)。