MYSQL 从日志中转储.sql全部转储或全无



MYSQL 从日志中重新转储.sql全有或全无

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

如果此日志.sql文件在中间包含错误,则错误完成之前和错误之后未完成的事务。

但是我希望整个sql文件显示被重新转储,或者文件中的任何内容都不应该被重新转储,我正在使用MySQL数据库和Debian(6.0.1)操作系统

日志.sql

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

它的外壳脚本:

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 ;

错误:源"in"附近的 SYTANX 错误

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

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

  • 使用 mysqldump 转储数据库,以便您有一个"之前"的副本。 确保包括表定义和"DROP IF EXIST"语句。
  • 尝试加载"日志.sql"
  • 如果发生错误,请加载"之前"副本以将所有内容恢复原样。这假设转储也没有遇到问题。

相关内容

  • 没有找到相关文章

最新更新