查找并替换整个mysql数据库

And*_*ndy 58 mysql

我想在一个整个数据库中进行查找和替换而不仅仅是一个表.

我怎样才能改变下面的脚本工作?

 update [table_name] set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');
Run Code Online (Sandbox Code Playgroud)

我只是使用星号吗?

 update * set [field_name] = replace([field_name],'[string_to_find]','[string_to_replace]');
Run Code Online (Sandbox Code Playgroud)

Dea*_*her 126

sqldump到文本文件,查找/替换,重新导入sqldump.

将数据库转储到文本文件
mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql

对数据库进行更改后还原数据库.
mysql -u root -p[root_password] [database_name] < dumpfilename.sql

  • 是的,这也适合我.我可以在这里添加命令来执行此操作:backup:#mysqldump -u root -p [root_password] [database_name]> dumpfilename.sql restore:#mysql -u root -p [root_password] [database_name] <dumpfilename.sql注意> ...的方向也是,-p和密码之间没有空格 (7认同)
  • 除非你有一个沉重的数据库,无法在普通的文本编辑器上打开. (7认同)
  • 如果你在Linux上,你可以使用sed进行搜索替换(或者awk ......这些不关心你的文件有多大.) (4认同)
  • 但这在数据库大小为2.04 GB时没有用 (3认同)
  • 天才:)我的脸庞瞬间变得丰满,但当然可以这样做。大。非常感谢。 (2认同)
  • **!!!!!!!!!!!!!!! 避免这样做!!!!!!!!!!!!** 你会把网站弄乱的!请阅读下一个答案中的警告。 (2认同)
  • 这是可以的程序 **除非** 你有一些序列化数据 - 例如 WordPress 小部件 :) 计数检查出现问题:) (2认同)
  • 对于 WordPress 用户和其他拥有将 PHP 序列化数组放入文本 blob 的系统的悲伤灵魂来说,有一个警告 - 不要这样做,否则你的 PHP 序列化数组将被损坏,并且你的 WP 安装将被破坏。 (2认同)

小智 39

在word-press mysql查询中将旧URL更新为新URL:

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');
Run Code Online (Sandbox Code Playgroud)

  • 不要忘了_wp_posts_桌子底下_post_excerpt_柱:`UPDATE wp_posts SET post_excerpt =替换(post_excerpt, 'http://olddomain.com', 'http://newdomain.com');` (3认同)

T.T*_*dua 7

使用 REPLACE 命令替换时要小心!

为什么?

因为您的数据库很有可能包含序列化数据(尤其是wp_options表),因此仅使用“替换”可能会破坏数据。

使用推荐的序列化:https://puvox.software/tools/wordpress-migrator


sym*_*ean 5

这强烈暗示您的数据一开始就没有标准化.

这样的东西应该工作(注意,你没有提到你使用任何其他语言 - 所以它写成MySQL存储过程)

 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 //
Run Code Online (Sandbox Code Playgroud)

我将留给你研究如何声明word_sub函数.