我用的是mysql5.0.37+linux
我mysql中的一个log表,一个多月的数据量到了1.6G大小
这样下去不是办法,有什么好的办法?
我想的办法有,定时做数据导出或数据删除,想用mysql自有的功能来实现,不知道可不可以?
不知道有没有更好的办法
再不解决数据库要爆炸了

解决方案 »

  1.   

    linux可以使用crontab做定时备份数据库,也可以单独备份log表
    备份后,删除log的数据,根据需要保留一周或一个月的数据还有一种办法就是把log表的数据根据时间备份到其他表,不过这种方法会使数据库的数据越来越大。
      

  2.   

    定时做数据导出或数据删除按照1楼的方法在LINUX或UNIX下用crontab设置一下每天执行一下# mysql -u xxx -pyyyyy mydb script.sql 或是在windows的控制面板中设置一个计划任务执行这个sqlscript.sql 
    ----------------
    select * from log where logtime <= CURDATE() - 7 INTO OUTFILE 'file_name';   备份到文件。
    delete from log where logtime <= CURDATE() - 7;  #仅保留一周
    commit;
    quit;
    然后把这个文件 在操作系统中用命令改名。
      

  3.   

    统计的log表 按日切表 
      

  4.   


    如果楼主的MYSQL版本更高一点,也可以用MYSQL的EVENT功能来解决,EVENT就是一个定时执行一段SQL代码的机制。不过现在看来,linux的crontab更可行一些。crontab也是定时执行,可以把脚本写为每次删除最前面50%的数据之类的。
      

  5.   

    不推荐使用mySQL 的 event,如果不推荐用Oracle中的job一样。 
    导出文件后入linux 的 shell script 把文件重命名为当天日期的就行了。 这些日志如果你需要保存总是要占地方的。 一般是在 数据库中保存 7 天记录,在本地磁盘保留 30天,在磁带上保存20年的。
      

  6.   

    哦,那mysql自身的备份机制没有linux的计划任务好吧?看来我还是先试试linux的计划任务看
    不知道一个1.6G的表,如果要导出,再删除,不知道要耗费多长时间?
    还有,导出的数据,可不可以用程序再打开查询?
      

  7.   


    INTO OUTFILE 'file_name'
    请在mySQL手册中查一下这个语法,你可以导出为你指定的格式。比如文本文件。
      

  8.   

    按日分表,按月分表都可以。MySQL在单表容量方面处理能力一般。建议分表。
      

  9.   

    这个语句可以执行,但是我执行了后,怎么找不到我的备份文件,我在win下和linux下都没有找到,怎么回事?并且我把file_name写在c:\data.txt也不行。
      

  10.   

    我终于知道了,WIN下要这样写:
    select * into outfile 'e:\\data\\25.txt' from device_monitor.operator;