广告位联系
返回顶部
分享到

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

Mysql 来源:互联网 作者:佚名 发布时间:2023-10-24 21:43:19 人浏览
摘要

需求:将一个MySQL实例(如10.10.10.1:3306)范围内所有字段数据中的 .letssing.net 替换为 .kaixinvv.com。 实现: 1. 确定替换规则 1 replace .letssing.net/ - .kaixinvv.com/ where column like (%http://%.letssing.

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

实现:

1. 确定替换规则

1

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

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

(1)生成查询SQL语句

1

2

3

4

5

6

7

8

9

10

11

12

$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)执行查询并生成结果文件

1

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)导入库表字段数据

1

2

3

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语句

1

2

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)执行查询并生成结果文件

1

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语句

1

2

3

4

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)执行更新

1

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • MySQL数据库的索引原理与慢SQL优化的5大原则介绍

    MySQL数据库的索引原理与慢SQL优化的5大原则介绍
    MySQL索引原理 1.索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查mysql这个单词,我们肯定需要定位到m字母,然后从下往下
  • MySQL全局遍历替换特征字符串的实现方法介绍
    需求:将一个MySQL实例(如10.10.10.1:3306)范围内所有字段数据中的 .letssing.net 替换为 .kaixinvv.com。 实现: 1. 确定替换规则 1 replace .letssing.n
  • MySQL DQL语句的具体使用介绍
    DQL DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。 基本语法 DQL 查询语句,语法结构如下: SE
  • MySQL同步数据Replication的实现方法
    MySQL提供了Replication功能,可以实现将一个数据库的数据同步到多台其他数据库。前者通常称之为主库(master),后者则被称从库(slave)。
  • MySQL索引失效十种场景与优化方案介绍
    1 数据准备 1.1 新建数据表 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE `player` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键, `player_id` varchar(256) NOT NULL CO
  • order by + limit分页时数据重复问题及解决方法

    order by + limit分页时数据重复问题及解决方法
    问题描述:MYSQL version 5.6.8command 表结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE command ( ID INT NOT NULL, NAME VARCHAR(16), DESCRIPTION VARCHAR(32), INDE
  • 高版本Mysql使用group by分组报错的解决方案

    高版本Mysql使用group by分组报错的解决方案
    Mysql5.7版本以上对group by 分组有了新需求,要求group by 后的字段要与select后查询的字段一致,否则就会报错,报错信息如下: #1055 - Expressi
  • 在SQL中修改数据的基础语句
    什么是修改? 在SQL中的基本操作就是增删改查,查询语句不会对数据库中的数据进行修改。 而其余的三种操作都会对数据库进行修改,不管
  • MySQL字符串前缀索引使用

    MySQL字符串前缀索引使用
    1. 前缀索引与全部索引概念 怎么给字符串字段加索引?现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,
  • MySql深分页问题解决
    1. 问题描述 日常开发中经常会涉及到数据查询分页的问题,一般情况下都是根据前端传入页数与页码通过mysql的limit方式实现分页,对于数据
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计