78144666 发表于 2018-9-28 13:56:33

mysql导入sql文件问题

  公司用的阿里云RDS数据库,有一个表,每天会产生几百万的程序日志。不到一个星期,空间就满了。
  所以需要每天清理一下表(truncate table),把当天的数据备份下来,下载到公司内网的备份服务器。
  脚本已经做好了,每天晚上执行一次。
  问题是用脚本导入的时候,出错了,无法导入。
  刚开始shell是用
  mysql -u root -proot -e "use dts;source /backup/dts_message_201404.sql"
  出现报错
  ERROR 1839 (HY000) at line 24 in file: 'dts_message_201504.sql': @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON.
  然后就退出了。
  但是mysql -u root -proot
  mysql> use dts;
  mysql> source /backup/dts_message_201404.sql;
  虽然有一个报错,但是还是可以继续导入的。
  后来脚本改成
  mysql -u root -proot dts < dts_message_20150424.sql
  还是报错
  ERROR 1839 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON.
  后来发现有一个参数-f,可以忽略错误,继续执行
  然后测试了一下,果然奏效,nice啊!
  脚本如下:
  #!/bin/bash
  time=`date -d today +%d`
  mysql -f -u root -proot dts < /backup/dts_message_201504$time.sql
  mysql -u root -proot -e "use dts;CREATE TABLE dts_message_201504$time (SELECT * FROM dts_message_201504);"
  然后做个任务,每天执行一下就好了。
  不用每天手动执行了。
  但是到了下个月的1号,就看不到前一天的数据
  所以脚本改了下
  #!/bin/bash
  time=`date -d "1 day ago" +"%m%d"`
  a=`date -d today +%d`
  if [ $a -eq 01 ];then
  timea=`date -d "-1 month" +"%m"`
  else
  timea=`date -d today +%m`
  fi
  /usr/local/mysql/bin/mysql -f -u root dts < /backup/dts_message_history_2015$time.sql
  /usr/local/mysql/bin/mysql -u root -e "use dts;CREATE TABLE dts_message_history_2015$time (SELECT * FROM dts_message_history_2015$timea);"
  sleep 1
  find /backup -ctime 5 -type f -name "*.sql" -exec rm {} \;

页: [1]
查看完整版本: mysql导入sql文件问题