问题是这样,需要对mysql数据库中的一张表做备份操作,数据库在linux上,考虑用crontab对表定时备份,这张表是利用存储过程生成的,因此需要写一个shell脚本,调用mysql的这个存储过程,并且在shell中对生成的表做备份操作。
   也不知道问题描述清楚了没,各位有没可以参考的脚本。

解决方案 »

  1.   

    应该是mysql -e "SQL语句" 
    具体可帮助mysql --help
      

  2.   

    应该是在语言环境中调用MYSQL的储存过程吧
      

  3.   

    把你的存储过程及备份之类的东东做成一个sql文件,
    然后
    su - mysqluser mysql -uroot -p<password> <database> < yoursql.sql
    把这个sh加到你的crontab任务里边
      

  4.   

    不能直接在shell里面调用mysql的存储过程吗?
    cd /usr/local/mysql/bin#declare parameter
    today='date +%Y-%m-%d';
    yesterday='date +%Y-%m-%d -d "1 day ago"';#call procedure
    mysql -u root -p password dababase<<EOF
    begin
    exec P_CollectionDataBackup($today,$yesterday);
    end;
    EOF#backup
    mysqldump -u root -p password dababase $yesterday > ../CollectionDataBackup/$yesterday.sql不知道这种写法正确不?
      

  5.   

    如果只是备份的话:
    C:\MySQL\bin\mysqladmin -u root --password=123456 shutdown
    C:\MySQL\bin\mysqldump --opt -u root --password=123456 bbs > D:\db_backup\bbs.sql
    C:\MySQL\bin\mysqld-nt
    将以上代码保存为backup_db.bat
    然后使用Windows的“计划任务”定时执行该脚本即可。(例如:每天凌晨5点执行back_db.bat)
      

  6.   

    老问题没解决,新问题又来了。现在要备份的表出现了被锁的情况,insert全部被锁住,select部分语句locked,
    使用show processlist命令,可以看到多个state是locked状态。
    用unlock tables 没什么作用,依然是locked状态。
    如何解决?
      

  7.   

    你是用什么工具备份的?MYSQLDUMP还是其它软件?
      

  8.   

    MYSQLDUMP
    我还没有做备份操作
    实际情况是,我要备份的表需要用来存储从终端发送来的大量数据
    每天的数据量在千万数量级,因此考虑在终端数据量较小时做数据备份操作,将前一天的数据导出到临时表进行备份操作。
    数据从原始表中导出,写到临时表,再删除原始表中前一天的数据都是在存储过程中完成的
    crontab中写入shell脚本就是做定时备份,备份工作在sh中完成
    现在测试发现,我在终端发送数据时执行存储过程,执行完成后就出现了对原始数据表的相关操作被locked无法写入数据
      

  9.   

    还有我表的引擎时MyISAM,看资料说大数据量的插入检索用InnoDb引擎比较好,MyISAM是表级locked。
    现在问题是如果出现死锁,我服务器的缓存肯定会撑满,导致服务器down掉
      

  10.   

    大量数据时用InnoDb引擎比较好,记录级locked
      

  11.   

    未做任何新的操作,
    只是再此执行了unlock tables
    看了一下原始表的属性
    show processlist 发现locked的state全部消失了
    又可以写数据了
    这死锁时间是不是忒长了点
    实在不解
    打字的功夫,刷新了一下后台,locked又出现了再unlock tables也没用
      

  12.   

    再次发现,insert进去了5条记录
    insert的同时,表被locked
    insert完成后,locked状态消失
    是不是再进行插入操作时表会自动锁上
    如果出现了异常,一直处于locked状态,那服务器不是非常不稳定。
    又没有什么好的方法,大家不吝赐教
      

  13.   

    呵呵,你是用引擎MyISAM吧
    如果是innodb的表,那么使用参数--single-transaction可以保持数据库的一致性,而锁表的时间很短。如果不是 innodb表,那么就要使用--lock-tables或者--lock-all-tables,这样在整个导出过程中加读锁,期间更新操作不能进行,当数据库比较大的时候需要注意。--lock-tables是按数据库加锁,不能保证全部数据库的一致性,--lock-all-tables是给所有数据库的所有表加锁。
      

  14.   

    如果一定要在服务运行期间备份,请添加 –skip-opt选项,类似执行:/usr/local/mysql/bin/mysqldump --skip-opt -uroot -p123456 mysqlfxv >mySQL.SQL以免造成了锁表。--opt
    此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。(个人推荐。如果没有使用--opt,MYSQLDUMP就会把整个结果集装载到内存中,然后导出。如果数据非常大就会导致导出失败。这个开关在默认情况下是启用的,如果不想启用它:--skip-opt来关闭它。)
      

  15.   

    wwwwb 
    Thank  you!
    引擎改为innodb,locked的问题解决了。
    但是还是进行测试,要优化。
    200分送上,不成敬意