从log.sql全部或全无MYSQL redump

时间:2014-04-07 11:29:53

标签: mysql shell

从log.sql全部或全部重新转储MYSQL

mysql -h "$databaseHost" -u "$username" --password="$password" "$databaseName" < /path/to/project/log.sql

如果这个log.sql文件在中间包含错误,那么在错误完成之前和错误之后的事务都没有完成..

但我希望整个sql文件显示为重新转储或者文件中没有任何内容应该重新转储我使用的是MySQL数据库和Debian(6.0.1)O.S

log.sql

start transaction;
insert into demo_table values('abc');
insert just for to create an error;
insert into demo_table values('xyz');
commit;

它的shell脚本:

rollBack () {
 if [ $mysql_error -eq 1 ]; then    
 mysql -h "$databaseHost" -u "$username" --password="$password" "$databaseName" -e    "rollback;";
 exit 0;
 fi  

 }

  mysql -h "$databaseHost" -u "$username" --password="$password" "$databaseName" < /path/to/project/log.sql|| if [ "$?" -ne 0 ]; then mysql_error=1; rollBack; fi

我尝试了这段代码,但没有任何帮助或建议请朋友们

存储过程

DELIMITER $$
CREATE PROCEDURE sp_exec_dumpfile(
        IN in_file VARCHAR(1024)
 )
BEGIN

 DECLARE EXIT HANDLER FOR SQLEXCEPTION 
 BEGIN 
  ROLLBACK;
 END ;

  START TRANSACTION;

   SOURCE in_file;

   COMMIT;
   END $$
   DELIMITER ;

错误:'/ p>中的SYTANX错误来源'

1 个答案:

答案 0 :(得分:1)

您遇到了什么问题?如果您发现rollback命令不起作用,那么您应检查您的表类型 - 上次检查时,MyISAM表不支持事务,您必须使用InnoDB表。

如果数据量足够小,您可以:

  • 使用mysqldump转储数据库,以便在&#34;之前#34;复制。确保包括表定义和&#34; DROP IF EXISTS&#34;语句。
  • 尝试加载&#34; log.sql&#34;
  • 如果发生错误,请在&#34;之前加载&#34;复制以恢复原样。这假设转储也不会遇到问题。