gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:34:41 26 4
gpt4 key购买 nike

我使用批处理文件将数据库从服务器 1 复制到服务器 2。

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

文件 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 创建后立即消失,我没有时间复制它们

最佳答案

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

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

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

关于用于导出的 MySQL 批处理文件调用刷新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32916764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com