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

标签 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) 操作系统

日志.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

我尝试了这段代码,它不起作用,请 friend 们提供任何帮助或建议

存储过程

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 ;

错误:SYTANX 错误靠近源“in”

最佳答案

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

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

  • 使用mysqldump转储数据库,以便您拥有“之前”的副本。确保包含表定义和“DROP IF EXISTS”语句。
  • 尝试加载“log.sql”
  • 如果发生错误,请加载“之前”的副本以使所有内容恢复原样。假设转储也没有遇到问题。

关于从 log.sql 重新转储 MYSQL 全部或全部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22914166/

相关文章:

mysql - MySQL 上传数据库列时出现多个错误

python - 使用 mysql.connection.cursor() 时,“MySQL”对象没有属性连接

java - Jenkins:如何通过 "source script"为 ant 任务设置环境变量

linux - 需要脚本帮助

python - 删除分隔符

php - 获取分组 Mysql 查询中的最后一个 id

php - SQL - 根据另一个表中的行数删除行

mysql表名长度限制? - 请测试默认的 mysql(2010 年询问 mysql <5.5)

shell - GVM/Grails shell 脚本错误?

php - 找不到命令 : PHP exec()