Find and replace entire mysql database
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]');
sqldump to a text file, find/replace, re-import the sqldump.
Dump the database to a text filemysqldump -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
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_posts SET post_excerpt = replace(post_excerpt, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
This strongly implies that your data IS NOT NORMALISED to begin with.
Something 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.