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