class SQLDUMP
Public Class Methods
sqldump(user, pass, db)
click to toggle source
# File lib/sqldump.rb, line 4 def self.sqldump(user, pass, db) time = Time.new date = "#{time.year}-#{time.month}-#{time.day}" begin my = Mysql.new('localhost', user, pass, db) res = my.query("show tables") tables = [] num_tables = res.num_rows num_tables.times do tables.push(res.fetch_row) end tables.each do |tbl| res = my.query("show create table #{tbl}") create = '' res.each_hash do |x| create = "#{x['Create Table']};" end File.open("#{db}_#{date}.sql", "a") do |file| file.puts(create) end res = my.query("select * from #{tbl}") num_rows = res.num_rows content = [] num_rows.times do content.push(res.fetch_row.join("_____")) end res = my.query("select * from #{tbl}") num_rows = res.num_rows content = [] num_rows.times do content.push(res.fetch_row.join("_____")) end content.each do |cont| res = my.query("explain #{tbl}") num_cats = res.num_rows y = 1 cats = [] File.open("#{db}_#{date}.sql", "a") do |file| file.print("insert into #{tbl}(") end res.each_hash do |x| File.open("#{db}_#{date}.sql", "a") do |file| file.print("#{x['Field']}") if y == num_cats file.print("#{x['Field']}, ") if y != num_cats end y += 1 end File.open("#{db}_#{date}.sql", "a") do |file| file.print(") values(") end cont = cont.gsub(/'/, "\\\\'") cont = cont.gsub(/_____/, "', '") File.open("#{db}_#{date}.sql", "a") do |file| file.puts("'#{cont}');") end end end rescue Mysql::Error => e puts "MySQL dump of #{db} failed!" puts "#{e.errno}: #{e.error}" puts "Exiting for safety" exit ensure my.close end cpuser = Dir.pwd.split('/')[2] #FileUtils.chown_R "#{cpuser}", "#{cpuser}", "#{db}_#{date}.sql" end