Rechercher toutes les occurrences d’une chaîne dans une firebase database mysql

J’essaie de comprendre comment localiser toutes les occurrences d’une URL dans une firebase database. Je veux rechercher toutes les tables et tous les champs. Mais je ne sais pas par où commencer ni si c’est possible.

Une solution simple serait de faire quelque chose comme ceci:

mysqldump -u myuser --no-create-info --extended-insert=FALSE databasename > myfile.sql 

Ensuite, vous pouvez simplement faire une recherche sur myfile.sql pour l’URL souhaitée.

Dans phpMyAdmin, une fonctionnalité de recherche est disponible:

  1. Sélectionnez une firebase database particulière et non une table.
  2. Cliquez sur l’onglet “Recherche”
  3. Entrez le terme de recherche que vous voulez
  4. Sélectionnez les tables que vous souhaitez rechercher

Capture d’ écran phpMyAdmin :

onglet phpMyAdmin Database Search

La fonctionnalité “Rechercher” est également disponible dans MySQL Workbench :

  1. Menu Base de données> Données de la table de recherche
  2. Sélectionnez la firebase database et les tables que vous souhaitez rechercher (il recherchera uniquement les tables sélectionnées)
  3. Dans la recherche, vous pouvez utiliser des wildChars.

Capture d’ écran MySQL Workbench :

MySQL Workbench Database Search

Ancien message, je sais, mais pour ceux qui trouvent cela via Google comme je l’ai fait, si vous avez installé phpmyadmin, il a une fonction de recherche globale.

En utilisant MySQL Workbench, vous pouvez rechercher une chaîne à partir de l’option de menu “Database” -> “Search Table Data”.

Spécifiez LIKE% URL_TO_SEARCH% et à gauche, sélectionnez toutes les tables que vous souhaitez rechercher. Vous pouvez utiliser “Ctrl + A” pour sélectionner l’arbre entier à gauche, puis désélectionner les objects qui ne vous intéressent pas.

entrer la description de l'image ici

Méthode de force brute

 declare @url varchar(255) set @url = 'stackoverflow.com' select 'select * from ' + rsortingm(tbl.name) + ' where ' + rsortingm(col.name) + ' like %' + rsortingm(@url) + '%' from sysobjects tbl inner join syscolumns col on tbl.id = col.id and col.xtype in (167, 175, 231, 239) -- (n)char and (n)varchar, there may be others to include and col.length > 30 -- arbitrary min length into which you might store a URL where tbl.type = 'U' -- user defined table 

Cela va créer un script que vous pouvez exécuter sur la firebase database.

 select * from table1 where col1 like '%stackoverflow.com%' select * from table1 where col2 like '%stackoverflow.com%' select * from table2 where col3 like '%stackoverflow.com%' 

etc.

Je le cherchais moi-même lorsque nous avons changé de domaine sur notre site WordPress. Cela ne peut pas se faire sans programmation, c’est ce que j’ai fait.

  0) { while ($field = mysql_fetch_assoc($fields_result)) { if (ssortingpos($field['Type'], "VARCHAR") !== false || ssortingpos($field['Type'], "TEXT") !== false) { echo " ".$field['Field']."\n"; $sql = "UPDATE ".$table[0]." SET ".$field['Field']." = replace(".$field['Field'].", '$ssortingng_to_replace', '$new_ssortingng')"; mysql_query($sql); } } echo "\n"; } } mysql_free_result($tables_result); ?> 

J’espère que cela aidera quiconque se heurte à ce problème à l’avenir 🙂

Vous pouvez le faire en utilisant HeidiSQL sans générer de vidages Db

Étapes :

1) Sélectionnez la firebase database que vous devez rechercher dans le panneau de gauche de l’interface graphique.

2) Exporter> Exporter la firebase database en tant que SQL

3) Dans la fenêtre Outils de la table, sélectionnez l’onglet ” TROUVER LE TEXTE “.

4) Indiquez votre chaîne de recherche et cliquez sur ” TROUVER “.

5) Il listera toutes les tables contenant notre chaîne.

6) Sélectionnez la ligne avec un pourcentage de pertinence supérieur.

7) Cliquez sur ” VOIR LES RÉSULTATS

entrer la description de l'image ici

SQLyog est une solution basée sur l’interface graphique pour résoudre le problème de la recherche de données dans toutes les colonnes, tables et bases de données. On peut personnaliser la recherche en la limitant au champ, à la table et aux bases de données.

Dans sa fonction de Data Search on peut rechercher des chaînes comme on utilise Google.

Capture d'écran de SQLyog Datasearch

Si vous pouvez utiliser un bash, voici un script: il nécessite un utilisateur dbread avec pass dbread dans la firebase database.

 #!/bin/bash IFS=' ' DBUSER=dbread DBPASS=dbread echo -n "Which database do you want to search in (press 0 to see all databases): " read DB echo -n "Which ssortingng do you want to search: " read SEARCHSTRING for i in `mysql $DB -u$DBUSER -p$DBPASS -e "show tables" | grep -v \`mysql $DB -u$DBUSER -p$DBPASS -e "show tables" | head -1\`` do for k in `mysql $DB -u$DBUSER -p$DBPASS -e "desc $i" | grep -v \`mysql $DB -u$DBUSER -p$DBPASS -e "desc $i" | head -1\` | grep -v int | awk '{print $1}'` do if [ `mysql $DB -u$DBUSER -p$DBPASS -e "Select * from $i where $k='$SEARCHSTRING'" | wc -l` -gt 1 ] then echo " Your searchssortingng was found in table $i, column $k" fi done done 

Si quelqu’un veut une explication: http://infofreund.de/?p=1670

MikeW a présenté une solution intéressante, mais comme mentionné dans les commentaires, il s’agit d’une solution SQL Server et non d’une solution MySQL. Voici une solution MySQL:

 use information_schema; set @q = 'Boston'; set @t = 'my_db'; select CONCAT('use \'',@q,'\';') as q UNION select CONCAT('select \'', tbl.`TABLE_NAME`,'\' as TableName, \'', col.`COLUMN_NAME`,'\' as Col, `',col.`COLUMN_NAME`,'` as value from `' , tbl.`TABLE_NAME`,'` where `' , col.`COLUMN_NAME` , '` like \'%' ,@q, '%\' UNION') AS q from `tables` tbl inner join `columns` col on tbl.`TABLE_NAME` = col.`TABLE_NAME`and col.DATA_TYPE='varchar' where tbl.TABLE_SCHEMA = @t ; 

J’ai écrit un programme Ruby pour parcourir une firebase database mysql pour une chaîne donnée passée en tant que cla. Il n’y a pas d’interface graphique juste la version CLI.

https://github.com/amboxer21/DB_search

J’ai trouvé un moyen avec deux (2) codes faciles ici . Commencez par faire un mysqldump :

 mysqldump -uUSERNAME -p DATABASE_NAME > database-dump.sql 

puis grep le fichier sqldump:

 grep -i "Search ssortingng" database-dump.sql 

Il est également possible de rechercher / remplacer et réimporter dans la firebase database.

Je ne me souviens plus où je suis tombé sur ce script, mais je l’utilise avec XCloner pour déplacer mes sites multisites WP.

  'REPLACE', 'FIND' => 'REPLACE'); $mysql_link = mysql_connect( 'localhost', 'USERNAME', 'PASSWORD' ); if( ! $mysql_link) { die( 'Could not connect: ' . mysql_error() ); } $mysql_db = mysql_select_db( 'DATABASE', $mysql_link ); if(! $mysql_db ) { die( 'Can\'t select database: ' . mysql_error() ); } // Traverse all tables $tables_query = 'SHOW TABLES'; $tables_result = mysql_query( $tables_query ); while( $tables_rows = mysql_fetch_row( $tables_result ) ) { foreach( $tables_rows as $table ) { // Traverse all columns $columns_query = 'SHOW COLUMNS FROM ' . $table; $columns_result = mysql_query( $columns_query ); while( $columns_row = mysql_fetch_assoc( $columns_result ) ) { $column = $columns_row['Field']; $type = $columns_row['Type']; // Process only text-based columns if( strpos( $type, 'char' ) !== false || strpos( $type, 'text' ) !== false ) { // Process all replacements for the specific column foreach( $replace_array as $old_ssortingng => $new_ssortingng ) { $replace_query = 'UPDATE ' . $table . ' SET ' . $column . ' = REPLACE(' . $column . ', \'' . $old_ssortingng . '\', \'' . $new_ssortingng . '\')'; mysql_query( $replace_query ); } } } } } mysql_free_result( $columns_result ); mysql_free_result( $tables_result ); mysql_close( $mysql_link ); echo 'Done!'; ?> 

Scott donne un bon exemple de la façon de le faire, mais la question est pourquoi voudriez-vous? Si vous devez effectuer une recherche et un remplacement sur une chaîne spécifique, vous pouvez également essayer de faire un mysqldump de votre firebase database, faire une recherche et un remplacement dans un éditeur, puis recharger la firebase database.

Peut-être que si vous donniez des informations sur ce que vous essayez d’atteindre, d’autres pourraient vous donner de meilleures réponses.

Je cherchais la même chose mais je n’ai pas pu la trouver, alors je fais un petit script en PHP, vous pouvez le trouver à: http://tequilaphp.wordpress.com/2010/07/05/searching-ssortingngs-in- une firebase database et des fichiers /

Bonne chance! (Je supprime du code privé, faites-moi savoir si je ne l’ai pas cassé dans le processus: D)

Les 30 premières secondes de cette vidéo montrent comment utiliser la fonction de recherche globale de Phpmyadmin et cela fonctionne. il cherchera une chaîne dans chaque table.

http://www.vodahost.com/vodatalk/phpmyadmin-setup/62422-search-database-phpmyadmin.html

Dans les machines Unix, si la firebase database n’est pas trop grande:

 mysqldump -u  -p   --extended=FALSE | grep  | less -S 

Pas une solution élégante, mais vous pouvez y arriver avec une structure de boucle nestede

 // select tables from database and store in an array // loop through the array foreach table in database { // select columns in the table and store in an array // loop through the array foreach column in table { // select * from table where column = url } } 

Vous pourriez probablement accélérer le processus en vérifiant quelles colonnes contiennent des chaînes lors de la construction de votre tableau de colonnes et en combinant toutes les colonnes par table dans une seule clause WHERE, séparée par des virgules.