我希望获得mysql服务器的所有数据库名称的名称,除了包含单词_backup的数据库名称。
到目前为止,执行这些操作会将数据库的所有名称都转换为文本文件。 这将在centos OS环境中执行。
mysql -uroot -pxpwdx -e 'show databases' | tr -d "| " | grep -v Database | grep -v information_schema | grep -v performance_schema | grep -v mysql > database.txt
我应该如何编辑它,使其不包括那些带有" _backup"出现?
例如:说我的mysql服务器包含5个数据库 a)db001 b)db001_backup20170602 c)db002 d)db003 e)db003_backup2017Aug
我只想在database.txt文件中列出(a),(c)和(d)。
感谢。
答案 0 :(得分:2)
使用Mysql语句解决方案
mysql -uroot -pxpwdx -sse "SELECT schema_name from information_schema.schemata WHERE schema_name NOT LIKE '%_backup%' or schema_name NOT LIKE '%schema%';"
Bash解决方案,使用Show tables命令,
mysql -uroot -pxpwdx -sse "show databases;" | grep -Ev '_backup|schema|mysql'
<强> 注, 强>
-sse
选项代替-e
将排除标题,列等,并且只会输出值。
-Ev
的 grep
选项将提供在单个语句中grep out多个字符串的条款
答案 1 :(得分:1)
您可以使用此查询获取所有数据库,而无需&#34; backup&#34;在其中,
mysql -uroot -pxpwdx -e "SELECT `schema_name` from INFORMATION_SCHEMA.SCHEMATA WHERE `SCHEMA_NAME` NOT LIKE '%backup%';"
这将为您提供没有&#34; backup&#34;的所有数据库。在其中,你不必做grep。