2011-06-08 21 views

回答

1

试试这个:

UPDATE table SET column = REPLACE(column,"www.olddomain.com","www.newdomain.com");

运行一个查询,更新多条记录(因为会)前,始终确保你做你的数据库的备份。

+0

@AJ有没有办法做到这一点,以取代旧的域没有?我还会尝试看看如果我最终得到的路径如下所示会发生什么情况:/ some/path – Genadinik 2011-06-08 22:14:00

+0

如果@Genadinik具有复合域路径,则这不起作用。 http://www.olddomain.com/img/some/path以及文本列中的域引用,例如在CMS中。 – faken 2011-06-08 22:19:36

+0

@Genadinik:你可以通过REPLACE(column,'http://www.olddomain.com','')'完全去掉旧的域名。我认为'REPLACE(专栏,'http://www.olddomain.com/img/','/ img /')'虽然可能更安全。而且,当然还需要对您的生产数据进行**复制**。 – 2011-06-08 22:35:17

1

与MySQL数据库,这样做在命令行:

1 - 将充分DB文件中的:

mysqldump -uYOURUSERNAME -pYOURPASSWORD YOURDBNAME > YOURDBNAME.sql 

2 - 与newdomain.com在先前的DB更换olddomain.com文件:

sed -i 's/olddomain.com/newdomain.com/g' YOURDBNAME.sql 

3 - 删除原始数据库替换为域中的所有表(请确保您有一个备份),并更新数据库中的所有表,适用的所有行:

mysql -uYOURUSERNAME -pYOURPASSWORD YOURDBNAME < YOURDBNAME.sql 

这是有保证的工作。我用它来更新Magento数据库(300多个表)上的域几次。

仅供参考,sed是一个用于“过滤和转换文本”的linux/unix命令行工具,我不知道是否有Windows版本。

PS - 如果您确实需要在域中放入斜杠(/)(例如,如果您使用www.example.com替换www.example.com/sitedir),则应该避开sed字符串中的斜杠,即代替使用/,使用\ /。对于这个例子,你会这样做:

sed -i 's/www.example.com\/sitedir/www.example.com/g' YOURDBNAME.sql