Advertisement
Guest User

Untitled

a guest
Aug 31st, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2.  
  3. # Use this script to search for a string in all columns and tables in MYSQL
  4. # INSTALLATION
  5. # gem install mysql2
  6. # gem install awesome_print
  7. # gem install colorize
  8. # USAGE
  9. # ./dbsearch.rb 'find me in db'
  10.  
  11. require 'mysql2'
  12. require 'awesome_print'
  13. require 'colorize'
  14.  
  15. # Set your general variables here
  16. exclude_tables = %w(_pantheon_heartbeat)
  17. db_name = 'database_name'
  18. db_host = 'database_host'
  19. db_username = 'database_username'
  20. db_password = 'database_password'
  21.  
  22. search = ARGV[0]
  23.  
  24. abort("ERROR: MISSING SEARCH ARG --- dbsearch \"[search text]\"") if search.nil?
  25.  
  26. client = Mysql2::Client.new(host: db_host, username: db_username, password: db_password, database: db_name)
  27.  
  28. table_data = []
  29. tables = client.query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='#{db_name}'")
  30. tables.each do |table|
  31. next if exclude_tables.include? table['TABLE_NAME']
  32.  
  33. table_indexes = client.query("SHOW INDEX FROM #{table['TABLE_NAME']} FROM #{db_name}")
  34. table_index = table_indexes.first
  35. table_index_column_name = table_index['Column_name'] if table_index
  36.  
  37. column_data = []
  38. columns = client.query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='#{db_name}' AND TABLE_NAME='#{table['TABLE_NAME']}'")
  39.  
  40. columns.each do |column|
  41. column_data << column['COLUMN_NAME']
  42. end
  43. table_data << {
  44. name: table['TABLE_NAME'],
  45. columns: column_data,
  46. index: table_index_column_name,
  47. }
  48. end
  49.  
  50. table_data.each do |table|
  51. column_query = table[:columns].collect do |column_name|
  52. "#{column_name} LIKE '%#{search}%'"
  53. end
  54. found_in_table = client.query("SELECT * FROM #{table[:name]} WHERE #{column_query.join(' OR ')}")
  55. next if found_in_table.size == 0
  56. puts '====================================================================================='
  57. puts "FOUND IN TABLE: #{table[:name]}".red
  58.  
  59. table[:columns].each do |column_name|
  60. find_in_column = client.query("SELECT * FROM #{table[:name]} WHERE #{column_name} LIKE '%#{search}%'")
  61. next if find_in_column.size == 0
  62. puts " #{find_in_column.size} TIME(S) IN COLUMN: #{column_name}"
  63. puts " SELECT * FROM #{table[:name]} WHERE #{column_name} LIKE '%#{search}%'".blue
  64. end
  65. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement