iteye_5489 2008-11-07 10:40
浏览 226
已采纳

ROR中如何备份和恢复MYSQL数据库?

初学ROR,现有一难题请教各位,

就是在netbeans新建个项目后,如何在项目中实现对mysql的备份和恢复功能?

新手,还望回答仔细些,谢谢了。
[b]问题补充:[/b]
谢谢 mccxj 和 hanhg 的热心回答, 不过 由于水平低, mccxj 的回答我还有些消化不了。
另外问题可能没有说清,我希望是在netbeans中的项目中实现mysql数据库的备份和恢复功能,比如在控制器中写什么代码,在模型中写什么代码,在试图中写什么等,然后在web中操作就能达到备份和恢复的目的。
[b]问题补充:[/b]
谢谢 mccxj ,不过我还是不能从回答中知道如何做。

这样说吧,要求:一个页面上两个链接,一个是备份,一个是恢复。
单击“备份”链接,就会备份,名字可以是事先设定好的,比如" mybak.sql"。
单击"恢复“链接,就会从mybak.sql中自动恢复到mysql中。

可以使用mysqldump等 ,现在需要先实现功能。

因为水平有限,所以我希望能直接给出详细的代码,比如“控制器中如何写,模型中如何写,视图中如何写”等。

再次感谢了。

  • 写回答

7条回答

  • iteye_10592 2008-11-09 21:50
    关注

    先说一下在Netbeans中Rails开发时如何备份和恢复MySQL数据库。

    mccxj 给的的方法不错,在开发的时候整理数据库还不错,如果数据库比较复杂,或者不习惯写夹具的话。
    在#{RAILS_ROOT}/lib/tasks下建立db.rake,把mccxj给的代码拷贝进去,然后按Alt+Shift+R调出运行Rake任务的对话框,点“刷新任务”按钮,列表中会出来“db:backup:create”/“db:backup:destroy”/“db:backup:rebuild”三个任务,单击相应的任务就可以备份和恢复数据库。

    下面示例说明如何在RAILS应用网页中备份和恢复MySQL数据库。
    (1)建立控制器
    [code="ruby"]ruby script/generate controller dbctl index backup restore/code编写Dbctl控制器代码
    [code="ruby"]class DbctlController < ApplicationController
    def index
    @dt = Time.now
    end

    def backup
    %x{rake db:backup:create}
    redirect_to :action => :index
    end

    def restore
    %x{rake db:backup:rebuild}
    redirect_to :action => :index
    end

    end/code编写views/Dbctl/index.html.erb页面代码
    [code="ruby"]

    Dbc#index

    <%= link_to 'backup', {:action=> 'backup'} %>
    <%= link_to 'restore', {:action=> 'restore'} %>[/code]

    运行你的应用程序就可以了。

    说明几点:
    Rails中可以用%x{SYSTEM COMMAND}命令运行系统命令,借助刚才建立的db.rake,可以使用rake db:backup:create创建数据库备份,使用rake db:backup:rebuild恢复数据库。
    如果你没有建立db.rake,那么控制器代码就这么写
    [code="ruby"]class DbcController < ApplicationController
    def index
    @dt = Time.now
    end

    def backup
    backup_folder = File.join(ENV["DIR"] || "db", 'backup')
    FileUtils.mkdir_p(backup_folder)
    magic_date = (Date.parse(ENV["DATE"]) if ENV["DATE"]) || Time.now
    backup_file = File.join(backup_folder, "#{RAILS_ENV}#{magic_date.strftime("%Y%m%d%H%M%S")}.sql")
    db_config = ActiveRecord::Base.configurations[RAILS_ENV]
    system "mysqldump -u #{db_config['username']} #{'-p' if db_config['password']}#{db_config['password']} --opt #{db_config['database']} > #{backup_file}"
    redirect_to :action => :index
    end

    def restore
    backup_folder = File.join(ENV["DIR"] || "db", 'backup')
    FileUtils.mkdir_p(backup_folder)
    db_config = ActiveRecord::Base.configurations[RAILS_ENV]
    db_config = ActiveRecord::Base.configurations[RAILS_ENV]
    bakfile = ENV'FILE'.entries - ['.', '..']).sort.reverse.each do |backup|
    (bakfile = backup and break) if backup.starts_with?(RAILS_ENV)
    end unless bakfile
    raise 'could not find the backup file!' unless bakfile
    ActiveRecord::Base.establish_connection(RAILS_ENV)
    ActiveRecord::Base.connection.execute('SET foreign_key_checks = 0')
    puts "rebuild database #{db_config['database']} from #{bakfile}"
    system "mysql -u #{db_config['username']} #{'-p' if db_config['password']}#{db_config['password']} #{db_config['database']} < #{backup_folder}/#{bakfile}"
    redirect_to :action => :index
    end

    end[/code]

    这只是能实现你说的需求而已,但是实用性不高。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 用三极管设计—个共射极放大电路
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示