php mysql替换数据库中出现过的所有域名实现办法 (原)
2019-10-12备注: 数据量稍微有些大且前期数据库建设相当完善的可以看一下这边的方法,数据量小或者数据库建设不完善的可以参考这篇文章,前两天看的,没自己试,有需要可以试试 https://www.cnblogs.com/ihuangjianxin/p/9045232.html
前情:
一般新的项目上线或域名必须要更改的时候,有些数据库存的图片或者文件地址带域名的要全部改,恰巧呢,数据库表超级多,恰巧呢,又刚做了接盘侠,就给咱数据库密码让咱改 ^-^`
第一个想法:
当拿到几个G的数据的时候,共六百多张表,我的想法,挨个查找关键字,记录出现的表和有关键字的字段写到excel,然后写程序读取excel再拼sql执行替换.
嗯,然后整了三个小时,整理出来20个表和出现过关键词的字段,此时那几个G的数据,我只看了几十K,当我以为我进公司前半个月都要干这苦力活的时候,救星来了。
思路历程:
公司一位php说可能有办法,可以先sql查询出现过的表和字段,这个确实是个好办法,但是当时想哪有sql可以这么查,经过一番百度,结果,真没找到sql可以这么查!(有知道的可以联系我哟)
你以为这就完了?不!程序员永远不能说不!
我想到有可以查询表的列名称关键词和备注及索引之类的关键词,那就换个思路,导出的表可以看出表的列备注还是很详细的,命名也不错,那就用这种办法了,先上SQL(关键词不懂得自行百度)
SELECT DISTINCT TABLE_NAME,COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_COMMENT LIKE '%图%'
OR COLUMN_COMMENT LIKE '%背景%'
OR COLUMN_COMMENT LIKE '%头像%'
OR COLUMN_COMMENT LIKE '%logo%'
OR COLUMN_name LIKE '%img%'
AND TABLE_SCHEMA='gyrtest';
已经测试过,现在数据库是600左右张表,数据量我觉得是很多了,但是这个sql不会跟数据库的具体数据挂钩,执行在1s以内,不会影响数据库服务器的其他操作,可以放心操作.
示例代码文件:
然后就是找到所有的数据库表和名称以后的替换,我写了一个文件示例.
事实上,我就是用这个文件执行的修改,这种方法不会百分百改掉所有,但是对于太多数据没法一个一个改的,先改百分之八九十也行,其他的一些没改掉的后续发现了再单独写sql也是可以的,上完整代码,测试的只需要改一下数据库ip user pwd db即可
<?php
/**
* 数据库全局替换域名(原理:根据数据库字段名及字段备注模糊匹配)
* @author [Geyaru] {QQ:534208139} 2019-05-22
*/ $ip = ''; //数据库ip
$user = ''; //用户名
$pwd = ''; //密码
$db = ''; //数据库名
$port = '3306'; //端口
$connect=mysqli_connect($ip,$user,$pwd,$db,$port); $sql="SELECT DISTINCT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_COMMENT LIKE '%图%'
OR COLUMN_COMMENT LIKE '%背景%'
OR COLUMN_COMMENT LIKE '%头像%'
OR COLUMN_COMMENT LIKE '%logo%'
OR COLUMN_COMMENT LIKE '%照片%'
OR COLUMN_COMMENT LIKE '%国徽%'
OR COLUMN_COMMENT LIKE '%链接%'
OR COLUMN_COMMENT LIKE '%网址%'
OR COLUMN_COMMENT LIKE '%logo%'
OR COLUMN_COMMENT LIKE '%身份证%'
OR COLUMN_COMMENT LIKE '%域名%'
OR COLUMN_COMMENT LIKE '%文件%'
OR COLUMN_COMMENT LIKE '%样例%'
OR COLUMN_COMMENT LIKE '%位置%'
OR COLUMN_name LIKE '%img%'
OR COLUMN_name LIKE '%image%'
OR COLUMN_name LIKE '%path%'
OR COLUMN_name LIKE '%url%'
OR COLUMN_name LIKE '%photo%'
OR COLUMN_name LIKE '%link%'
OR COLUMN_name LIKE '%href%'
OR COLUMN_name LIKE '%picture%'
OR COLUMN_name LIKE '%diagram%'
AND TABLE_SCHEMA='".$db."'
"; mysqli_query($connect,'set names utf8');
$result=mysqli_query($connect,$sql);
$res='';//定义字符串存储拼接sql $y_old='a.com.cn'; //旧域名
$y_new='b.cn'; //新域名 $i = 0;
while($row =mysqli_fetch_array($result)){
$table = $row[0]; //表
$columns = $row[1]; //字段
$str_sql = "UPDATE %s SET %s= replace(%s, '%s', '%s'); ";
$mes = sprintf($str_sql,$table,$columns,$columns,$y_old,$y_new);
$res = $res."\n".$mes;
$i++;
}
echo 'sql总数:'.$i.$res; ?>
注意,我写的这个程序没有直接在代码写update的执行,是将拼好的sql拿到navicate执行,其实我就是懒得写了。
这个拼接的sql在我这600张表,占1G的数据库中总共执行了六百条sql,跑完花了一分钟左右,修改了二十多万行数据,好了就这些了,有好的办法联系博主哟~感谢
联系方式: QQ534208139
php mysql替换数据库中出现过的所有域名实现办法 (原)的更多相关文章
- 批量替换数据库中所有用户数据表中字段数据类型为char和varchar到nvarchar的脚本
解决问题:字段类型为char的总是占用指定字节长度(末尾好多空白符号),varchar数据类型长度一个汉字占2个字节,内容存储为中文的字段个人建议全部使用nvarchar. 操作说明:打开SQL Se ...
- 涂抹mysql笔记-数据库中的权限体系
涂抹mysql笔记-数据库中的权限体系<>能不能连接,主机名是否匹配.登陆使用的用户名和密码是否正确.mysql验证用户需要检查3项值:用户名.密码和主机来源(user.password. ...
- 自定义tt文本模板实现MySql指数据库中生成实体类
自定义tt文本模板实现MySql指数据库中生成实体类 1.在项目中依次点击“添加”/“新建项”,选择“文本模板”,输入名称后点击添加. 2.在Base.tt中添加如下代码. <#@ templa ...
- 优化MD5和IP在(MySQL)数据库中的存储
1.MD5在MySQL数据库中的存储 用CHAR(32)来存储MD5值是一个常见的技巧.如果你的应用程序使用VARCHAR(32),则对每个值得字符串长度都需要花费额外的不 必要的开销.这个十六进制的 ...
- Android+PHP+MYSQL把数据库中的数据显示在Android界面上
俗话说,好记性不如烂笔头.今天终于体会其中的道理了.昨天写好的代码不知道为何找不到了.所以今天我一定得抽出一点时间把我的代码保存起来,以防我的代码再没有了. 还是先上图片. 这个界面是用ListVie ...
- MySql 查询数据库中所有表名
查询数据库中所有表名select table_name from information_schema.tables where table_schema='csdb' and table_type= ...
- mysql查询数据库中包含某字段(列名)的所有表
SELECT TABLE_NAME '表名',TABLE_SCHEMA '数据库名',ORDINAL_POSITION '顺序',COLUMN_NAME '字段',DATA_TYPE '类型' ,CH ...
- mysql 从数据库中获取多条记录,二维展示数据
展示要求: 客户/日期 2017-10-16 1017-10-17 2017-10-18 客户1 客户2 数据库中数据: 解决办法: 1.新建一个实体类:客户名称.客户数据(A ...
- MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同
查询数据库中所有表名select table_name from information_schema.tables where table_schema='数据库名' and table_type= ...
随机推荐
- QQ登陆
QQ第三方登陆调用接口实现 <?php $appid="101353491"; session_start(); $appkey="df4e46ba7da52f78 ...
- Django重写用户模型报错has no attribute 'USERNAME_FIELD'
目录 Django重写用户模型报错has no attribute 'USERNAME_FIELD' 在重写用户模型时报错:AttributeError: type object 'UserProfi ...
- 常用CSS代码大全(工作必备)
用html+css可以很方便的进行网页的排版布局,但不是每一种属性或者代码我们都铭记于心,最近我把CSS中的常用代码进行了归纳总结,方便自己以后查看,同时也分享给大家,希望对你们有用. 一.文本设置 ...
- scrapy-redis 实现分布式爬虫
分布式爬虫 一 介绍 原来scrapy的Scheduler维护的是本机的任务队列(存放Request对象及其回调函数等信息)+本机的去重队列(存放访问过的url地址) 所以实现分布式爬取的关键就是,找 ...
- 时间切片分割long work
思想 时间切片的核心思想是:如果任务不能在50毫秒内执行完,那么为了不阻塞主线程,这个任务应该让出主线程的控制权,使浏览器可以处理其他任务.让出控制权意味着停止执行当前任务,让浏览器去执行其他任务,随 ...
- js带有遮罩的弹窗
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Hive入门指南
转自:http://blog.csdn.net/zhoudaxia/article/details/8842576 1.安装与配置 Hive是建立在Hadoop上的数据仓库软件,用于查询和管理存放在分 ...
- springboot中使用servlet时返回结果乱码问题
在总的配置文件:application.properties中做一个配置,把我的问题解决了. #编码格式 spring.http.encoding.force=true spring.http.enc ...
- jmeter通过if控制器控制业务比例
以发帖,看帖,回帖三个事物为例,这里就10个用户跑10次,进行测试下: 可以看到看帖,回帖,发帖比例是5:3:2,先来说说怎么做到的,就是通过if控制器,分别来看下几个控制器的内容, 看帖(if控制器 ...
- SEO黑页以及门页框架和JS跳转实现方法
在去年大家还在针对第三方博客狂轰乱炸,比如:webs.com.blogspot.com.weebly.com主要是因为本身博客平台的权重,再就是低廉的成本,主需要注册,没有域名和服务器的投入.排名也非 ...