mysql备份数据出错_mysql 用备份数据重建数据库出错了怎么办

假设重建一个几百GB大小的数据库,在差不多导完数据的时候,数据库出错了,数据库导入操作终止。

这个时候,你会选择重新花费十几个小时重导数据吗?

有些情况是不需要重头再做一次导入操作的,只要找到为什么导入操作终止,把问题解决完,就可以接着继续导……

比如:

导入的过程中出错

ERROR 1418 (HY000) at line 53: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

查到这是由于:FUNCTION  引起的

原因:

应该是开启了bin-log, 我们就必须指定我们的函数是否是

1 DETERMINISTIC 不确定的

2 NO SQL 没有SQl语句,当然也不会修改数据

3 READS SQL DATA 只是读取数据,当然也不会修改数据

4 MODIFIES SQL DATA 要修改数据

5 CONTAINS SQL 包含了SQL语句

其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。 如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。

解决的方法:

方法一:在FUNCTION 指定一个参数

方法二:我们可以通过设置如下的参数来关掉这个。

mysql> set global log_bin_trust_function_creators=1;

先定位到导入数据出错的位置,然后重新执行一下创建FUNCTION的操作。再接着导完剩下的数据……

如果数据文件中,有几个数据库,有些数据库导完了,而有些还未导,怎样选取未导的数据库接着继续?

或者在几百GB的数据文件中,只需导入中间的某个数据库,那怎么选取?

比如导入操作在未执行完就中断,所以可能还有数据库未导入。

(1). 查看每个数据库的开始行号

[mysql@test tmp]$ cat -n dump_***.sql |grep "32312 IF NOT EXISTS"

28  CREATE DATABASE /*!32312 IF NOT EXISTS*/ `db_monitor` /*!40100 DEFAULT CHARACTER SET latin1 */;

89  CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */;

743  CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET latin1 */;

776  CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dbdata` /*!40100 DEFAULT CHARACTER SET utf8 */;

161911  CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dbdata_other` /*!40100 DEFAULT CHARACTER SET latin1 */;

(2). 查看总的行号

[mysql@test tmp]$ wc -l dump_***.sql

162130 dump_***.sql

可知:dbdata导完了,只剩下dbdata_other库未导

(3). 将数据库dbdata_other导出

[mysql@test tmp]$ head -23 dump_***.sql > dbdata_other2011.sql

[mysql@test tmp]$ sed -n '161908,162130p' dump_***.sql >> dbdata_other2011.sql

导出后数据文件的大小:

-rw-r----- 1 mysql mysql 147G Nov  9 11:56 dump_***.sql

-rw-rw-r-- 1 mysql mysql 6.1M Nov 11 11:28 dbdata_other2011.sql

这样就不用为了6.1M的数据,而去导147G的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值