MySQL全局遍历替换特征字符串的实现方法

 更新时间:2023年03月24日 10:29:45   作者:wzy0623  
本文主要介绍了MySQL全局遍历替换特征字符串的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

需求:将一个MySQL实例(如10.10.10.1:3306)范围内所有字段数据中的 .letssing.net 替换为 .kaixinvv.com。

实现:

1. 确定替换规则

replace .letssing.net/ -> .kaixinvv.com/  where column like (%http://%.letssing.net/% or %https://%.letssing.net/%)

2. 找出实例中所有符合特征的库表字段

(1)生成查询SQL语句

$cat find_db_table_column.sh
mysql -uroot -p123456 -h10.10.10.1 -P3306 -e "
select concat('select ','''',t1.TABLE_SCHEMA, '''',', ','''',t1.TABLE_NAME, '''',', ', '''',t1.COLUMN_NAME,'''',' 
                 from ', t1.TABLE_SCHEMA,'.',t1.TABLE_NAME,' where \`',t1.COLUMN_NAME,'\` like \'%://%.letssing.net/%\' limit 1;') 
  from information_schema.columns t1, information_schema.tables t2 
 where t1.DATA_TYPE in ('varchar','longtext','text','mediumtext','char') 
   and t1.TABLE_SCHEMA not in ('information_schema','mysql','performance_schema','sys') 
   and (t2.data_length+t2.index_length)/1024/1024/1024 < 1 
   and t2.table_name not like '%log%' and t2.table_name not like '%idempotent%' 
   and t1.table_schema= t2.table_schema 
   and t1.table_name= t2.table_name 
 order by t1.TABLE_SCHEMA, t1.TABLE_name, t1.column_name;" -N > query.sql

说明: 

  • mysql命令行执行查询,将查询结果输出到文件,-N参数用于去掉表头。
  • 通过查询数据字典视图 information_schema.columns 和 information_schema.tables 生成查询所有包含特征字符串的库表字段的SQL语句。查询条件为:只查询字符串类型的字段;不查询系统库表;只查询1G以下的小表;不查询某些特殊用途(日志、幂等性)的超大表。

(2)执行查询并生成结果文件

mysql -uroot -p123456 -h10.10.10.1 -P3306 -N < query.sql > result.txt

result.txt文件内容示例:
db1    table1    column1
db1    table1    column2
db2    table2    column1
db2    table2    column2

3. 对上一步每个库表字段,查询n条特征数据,用以人工采样确认

(1)导入库表字段数据

mysql -uwxy -p -h127.0.0.1 -p123456 -P3306 --local-infile -Ddomain -e "
truncate table t1;
load data local infile '/home/mysql/domain_name/rule/result.txt' into table t1(dbname,tablename,columnname);"

说明:将前一步生成的结果文件导入一个表中,用于下一步生成查询SQL语句。

(2)生成查询数据的SQL语句

mysql -uwxy -p -h127.0.0.1 -p123456 -P3306 -Ddomain -e "
select concat('select ',instance,',''',dbname,''',''',tablename,''',\`',columnname,'\` from ',dbname,'.',tablename, ' where \`',columnname,'\` like \'%://%.letssing.net/%\' limit 5;') from t1 order by instance,dbname,tablename;" -N > query_domain.sql

说明:这里对于每个符合条件的库表字段,查询出5条数据用于人工确认。

(3)执行查询并生成结果文件

mysql -uroot -p123456 -h10.10.10.1 -P3306 < query_domain.sql > result_domain.txt

result_domain.txt文件内容示例:
db1    table1    column1
db1    table1    http://txcdn-song-mvbox-cn.letssing.net/mka/16/90461116-0.mka
db1    table1    http://txcdn-song-mvbox-cn.letssing.net/mka/16/90461116-0.mka
db1    table1    column2
db1    table1    http://txcdn-song-mvbox-cn.letssing.net/ksc/90/16/90461116-0.ksc
db1    table1    http://txcdn-song-mvbox-cn.letssing.net/ksc/90/16/90461116-0.ksc
db2    table2    column1
db2    table2    http://txcdn-song-mvbox-cn.letssing.net/mka/16/90461116-0.mka
db2    table2    http://txcdn-song-mvbox-cn.letssing.net/mka/16/90461116-0.mka
db2    table2    column2
db2    table2    http://txcdn-song-mvbox-cn.letssing.net/ksc/90/16/90461116-0.ksc
db2    table1    http://txcdn-song-mvbox-cn.letssing.net/ksc/90/16/90461116-0.ksc

4. 更新特征域名数据

(1)生成字符串替换的更新SQL语句

mysql -uwxy -p -h127.0.0.1 -p123456 -P3306 --local-infile -Ddomain -e "
select concat('update ',dbname,'.',tablename,' set \`',columnname,'\` = ','replace(\`',columnname,'\`,','\'.letssing.net/\',\'.kaixinvv.com/\')',
' where \`',columnname,'\` like \'%http://%.letssing.net/%\' or \`', columnname,'\` like \'%https://%.letssing.net/%\';')
  from t1 where instance = 1 order by instance,dbname,tablename;" -N > update.sql

(2)执行更新

mysql -uroot -p123456 -h10.10.10.1 -P3306 < update.sql

到此这篇关于MySQL全局遍历替换特征字符串的实现方法的文章就介绍到这了,更多相关MySQL全局遍历替换特征字符串内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql表数据比较大情况下修改添加字段的方法实例

    Mysql表数据比较大情况下修改添加字段的方法实例

    最近遇到的一个问题,需要在一张1800万数据量的表中添加加一个字段,所以这篇文章主要给大家介绍了关于Mysql表数据比较大情况下修改添加字段的方法,需要的朋友可以参考下
    2022-06-06
  • 教你解决往mysql数据库中存入汉字报错的方法

    教你解决往mysql数据库中存入汉字报错的方法

    这篇文章主要介绍了Mysql基础之教你解决往数据库中存入汉字报错的方法,文中有非常详细的代码示例,对正在学习mysql的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Mysql CONVERT函数的具体使用

    Mysql CONVERT函数的具体使用

    本文主要介绍了Mysql CONVERT函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • mysql 记录不存在时插入 记录存在则更新的实现方法

    mysql 记录不存在时插入 记录存在则更新的实现方法

    相信很多人都需要用到这个语句,请看下文:(在4.1以后的版本才有效)
    2008-08-08
  • Mysql中关于Incorrect string value的解决方案

    Mysql中关于Incorrect string value的解决方案

    在对mysql数据库中插入数据的时候,直接插入中文是没有问题的!但是用预编译语句时,用流对数据进行处理总报incorrect string value这个异常。本篇文章教给你解决方法
    2021-09-09
  • 如何合理使用数据库冗余字段的方法

    如何合理使用数据库冗余字段的方法

    今天小编就为大家分享一篇关于如何合理使用数据库冗余字段的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)

    SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)

    SQLyog是一款MySQL可视化工具,他可以将部分SQL操作通过图形化界面操作来完成,方便开发者更好的进行开发及数据库设计,这篇文章主要介绍了SQLyog的下载、安装、破解、配置(MySQL可视化工具安装),需要的朋友可以参考下
    2022-09-09
  • MySql开发之自动同步表结构

    MySql开发之自动同步表结构

    这篇文章主要给大家介绍了关于MySql开发之自动同步表结构的相关资料,这样可以避免在开发中由于修改数据库字段导致的数据库表不一致问题,需要的朋友可以参考下
    2021-05-05
  • 将MySQL数据导出为sql文件的最佳实践

    将MySQL数据导出为sql文件的最佳实践

    这篇文章主要给大家介绍了如何将MySQL数据导出为sql文件,避免数据丢失的最佳实践,文中有详细的导出流程步骤,跟着文中的步骤就可以导出文件,需要的朋友可以借鉴参考
    2023-07-07
  • 详解MySQL数据备份之mysqldump使用方法

    详解MySQL数据备份之mysqldump使用方法

    本篇文章主要介绍了MySQL数据备份,详细的介绍了mysqldump的各种用法,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11

最新评论