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 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制