Guest User

Untitled

a guest
Sep 12th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. #!/usr/bin/ruby
  2. require 'rubygems'
  3. require 'mysql'
  4. require 'optparse'
  5. options = {
  6. :database => '',
  7. :host=> 'localhost',
  8. :create=> false,
  9. :count=> false,
  10. :index=> false,
  11. :port=> 3306,
  12. :user=> 'root',
  13. :password => '',
  14. }
  15. begin
  16. OptionParser.new do |opt|
  17. opt.banner = "Usage: #{File.basename($0)} [Option]"
  18. opt.on("-d","--database String","database name") { |o|
  19. options[:database] = o
  20. }
  21. opt.on("-H","--hostname String","hostname. default: localhost") {|o|
  22. options[:host] = o
  23. }
  24. opt.on("-n","--number","count record number. caution! don't use ovarload") {
  25. options[:count] = true
  26. }
  27. opt.on("-c","--create","show create table list.") {
  28. options[:create] = true
  29. }
  30. opt.on("-i","--index","show index from table list.") {
  31. options[:index] = true
  32. }
  33. opt.on("-P","--port Integer","port. default: 3306.") {|o|
  34. options[:port] = o
  35. }
  36. opt.on("-u","--user String","user name. default:root"){|o|
  37. options[:user] = o
  38. }
  39. opt.on("-p","--password String","password. default:''"){|o|
  40. options[:password] = o
  41. }
  42. opt.on("-h","--help","print this message and quit") {
  43. puts opt.help
  44. exit 0
  45. }
  46. opt.parse!(ARGV)
  47. end
  48. rescue OptionParser::ParseError => err
  49. $stderr.puts(err.message)
  50. exit 1
  51. end
  52. if options[:database] == nil or options[:database] == ""
  53. $stderr.puts("no database name.")
  54. exit 1
  55. end
  56. Mysql.init()
  57. #接続開始
  58. db = Mysql::new(options[:host], options[:user], options[:password],options[:database],options[:port])
  59. #SQL文の実行
  60. st = db.query("show tables")
  61. st.each do |tbl|
  62. puts "TABLE=#{tbl[0]}"
  63. if options[:create]
  64. st2 = db.query("show create table #{tbl[0]}")
  65. st2.each do |attr|
  66. printf "%s\n"%attr[1]
  67. end
  68. end
  69. if options[:index]
  70. st3 = db.query("show index from #{tbl[0]}")
  71. key_name = {}
  72. st3.each do |idx|
  73. unless key_name[idx[2]]
  74. key_name[idx[2]] = {}
  75. key_name[idx[2]]["Cardinality"] = idx[6]
  76. if idx[1] == 1
  77. key_name[idx[2]]["Non_unique"] = "True"
  78. else
  79. key_name[idx[2]]["Non_unique"] = "False"
  80. end
  81. key_name[idx[2]]["Index_type"] = idx[10]
  82. key_name[idx[2]]["Column_name"] = []
  83. end
  84. key_name[idx[2]]["Column_name"].push idx[4]
  85. end
  86. next if key_name.size == 0
  87. key_data = []
  88. key_name.each do |key,val|
  89. if key == "PRIMARY"
  90. val["Key_name"] = key
  91. key_data.unshift val
  92. else
  93. val["Key_name"] = key
  94. key_data.push val
  95. end
  96. end
  97. key_data.each do |data|
  98. puts "key_name=>#{data['Key_name']} Non_unique=>#{data['Non_unique']} "+
  99. "Cardinality=>#{data['Cardinality']} "+
  100. "Index_type=>#{data['Index_type']} Column_name=>#{data['Column_name'].join(',')}"
  101. end
  102. end
  103. if options[:count]
  104. st4 = db.query("select count(*) from #{tbl[0]}")
  105. st4.each do |attr|
  106. printf "total count=%d\n"%attr[0]
  107. end
  108. end
  109. printf "\n\n"
  110. end
  111. #接続を切断する
  112. db.close
Add Comment
Please, Sign In to add comment