Home » Mysql » Find and replace in entire mysql database

Find and replace in entire mysql database

Posted by: admin November 1, 2017 Leave a comment

Questions:

i would like to do a find and replace inside an entire database not just a table.

How can i alter the script below to work?

update [table_name] set [field_name] =
replace([field_name],'[string_to_find]’,'[string_to_replace]’);

Do i just use an asterix?

update * set [field_name] =
replace([field_name],'[string_to_find]’,'[string_to_replace]’);

Answers:

sqldump to a text file, find/replace, re-import the sqldump.

Dump the database to a text file
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

Restore the database after you have made changes to it.
mysql -u root -p[root_password] [database_name] < dumpfilename.sql

Questions:
Answers:

Update old URL to new URL in word-press mysql Query:

UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');

UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');

UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');

Questions:
Answers:

This strongly implies that your data IS NOT NORMALISED to begin with. You really should fix that.

Somteh=thing like this should work (NB you’ve not mentioned of your using any other languages – so its written as a MySQL stored procedure)

 create procedure replace_all(find varchar(255), 
        replce varchar(255), 
        indb varcv=char(255))
 DECLARE loopdone INTEGER DEFAULT 0;
 DECLARE currtable varchar(100);
 DECLARE alltables CURSOR FOR SELECT t.tablename, c.column_name 
    FROM information_schema.tables t,
    information_schema.columns c
    WHERE t.table_schema=indb
    AND c.table_schema=indb
    AND t.table_name=c.table_name;

 DECLARE CONTINUE HANDLER FOR NOT FOUND
     SET loopdone = 1;

 OPEN alltables;

 tableloop: LOOP
    FETCH alltables INTO currtable, currcol; 
    IF (loopdone>0) THEN LEAVE LOOP;
    END IF;
         SET stmt=CONCAT('UPDATE ', 
                  indb, '.', currtable, ' SET ',
                  currcol, ' = word_sub(\'', find, 
                  '\','\'', replce, '\') WHERE ',
                  currcol, ' LIKE \'%', find, '%\'');
         PREPARE s1 FROM stmt;
         EXECUTE s1;
         DEALLOCATE PREPARE s1;
     END LOOP;
 END //

I’ll leave it to you to work out how to declare the word_sub function – I’ve done enough free programming here.

Questions:
Answers:

Short answer: You can’t.

Long answer: You can use the INFORMATION_SCHEMA to get the table definitions and use this to generate the necessary UPDATE statements dynamically. For example you could start with this:

SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'your_schema'

I’d try to avoid doing this though if at all possible.

Questions:
Answers:

This isn’t possible – you need to carry out an UPDATE for each table individually.

WARNING: DUBIOUS, BUT IT’LL WORK (PROBABLY) SOLUTION FOLLOWS

Alternatively, you could dump the database via mysqldump and simply perform the search/replace on the resultant SQL file. (I’d recommend offlining anything that might touch the database whilst this is in progress, as well as using the –add-drop-table and –extended-insert flags.) However, you’d need to be sure that the search/replace text wasn’t going to alter anything other than the data itself (i.e.: that the text you were going to swap out might not occur as a part of SQL syntax) and I’d really try doing the re-insert on an empty test database first.)

Questions:
Answers:

MySQL Search & Replace Tool

Very useful web-based tool written in PHP which makes it easy to search and replace text strings in a MySQL database.

Questions:
Answers:

Simple Soltion

UPDATE `table_name`
 SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')

Questions:
Answers:

Another option (depending on the use case) would be to use DataMystic’s TextPipe and DataPipe products. I’ve used them in the past, and they’ve worked great in the complex replacement scenarios, and without having to export data out of the database for find-and-replace.

Questions:
Answers:

I just wanted to share how I did this find/replace thing with sql database, because I needed to replace links from Chrome’s sessionbuddy db file.

  • So I exported sql database file as .txt file by using SQLite
    Database Browser 2.0 b1
  • Find/replace in notepad++
  • Imported the .txt file back on SQLite Database Browser 2.0 b1
Questions:
Answers:

BE CAREFUL, when replacing with REPLACE command!

why?

because there is a great chance that your database contains serialized data (especially wp_options table), so you will break your site options.

Instead, use standard way, listed on the link: – https://www.protectpages.com/software/WordpressMigrator.php