从终端/ SSH /命令行{MySQL}中搜索MySQL数据库中的特定字符串/模式

时间:2016-10-28 05:28:59

标签: mysql magento

我有一个Magento数据库,我想在其中搜索特定的string/pattern

但数据库的大小太大,所以我无法将数据库导出到.sql文件然后搜索到该文件(编辑器甚至Geany崩溃打开这么大的文件)。

那么如何通过仅使用命令行和MySQL数据库凭证来搜索数据库以获得[string / pattern]和显示fulltext信息的完美匹配?

我尝试了以下命令,但它需要username作为-u[USERNAME],同时它不会显示完整查询或导致终端窗口。

mysqldump -p[PASSWORD] [DATABASE] --extended=FALSE | grep [pattern] | less -S

任何人都有这方面的解决方案吗?

3 个答案:

答案 0 :(得分:0)

您可以首先登录http://dev.mysql.com/doc/refman/5.7/en/connecting.html

中指定的MySQL CLI
mysql --host=localhost --user=myname --password=mypass mydb

因此,您可以使用查询命令查找模式。如果您知道要搜索的表格,例如列,则可以轻松完成。 SELECT语句是这样的:

SELECT column FROM table WHERE column LIKE '%pattern%';

http://dev.mysql.com/doc/en/select.html

如果您不知道该表的名称,可以列出所有并尝试按意义查找。

SHOW TABLES;

答案 1 :(得分:0)

使用更好的代码进行编辑

你没有说这是否是一次性的,但这将检查模式中的所有表的值。

首先在您的主目录中设置一个名为.my.cnf的文件,其中包含以下内容,并将其权限更改为700(用您的用户名和密码替换[USERNAME]和[PASSWORD]。

[client]
user=[USERNAME]
password="[PASSWORD]"

然后执行以下操作(用数据库和检查字符串替换[DATABASE]和[CHECKSTRING])

mysql [DATABASE] --silent -N -e "show tables;"|while read table; do mysql [DATABASE] --silent -N -e "select * from ${table};"|while read line;do if [[ "${line}" == *"[CHECKSTRING]"* ]]; then echo "${table}***${line}";fi;done;done

如果检查51584,结果将类似于

test_table***551584,'column 2 value','column 3 value'
test_table5***'column 1 value',251584,'column 3 value'

如果您想知道哪个列具有该值,请从INFORMATION_SCHEMA.COLUMNS中选择并添加另一个嵌套。

mysql [DATABASE] --silent -N -e "show tables;"|while read table; do mysql [DATABASE] --silent -N -e "select column_name from information_schema.columns where table_schema='[DATABASE]' and table_name = '${table}';"|while read column; do mysql [DATABASE] --silent -N -e "select ${column} from ${table};"|while read line;do if [[ "${line}" == *"[CHECKSTRING]"* ]]; then echo "${table}***${column}***${line}";fi;done;done;done

如果检查51584,结果将类似于

test_table***column1***551584
test_table5***column2***251584

答案 2 :(得分:0)

首先,您需要通过以下命令使用正确的用户名和密码登录数据库。

sudo mysql -u根-p

然后检查要在其中进行操作的数据库。 例如。

SHOW DATABASES;

使用测试;

现在您的数据库已准备就绪,可以通过终端进行操作。在这里,我假设我的数据库名称是“ Test”。

现在可以使用以下命令进行字符串/模式匹配,或点击链接http://www.mysqltutorial.org/mysql-regular-expression-regexp.aspx

选择     column_list 从     table_name 哪里     string_column REGEXP模式;