Я хочу иметь имена всех имен базы данных сервера mysql, кроме имен базы данных, содержащих слово _backup.
Пока что все это приведет ко всем именам базы данных в текстовый файл. Это должно быть выполнено в среде OS 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
Я хочу только (a), (c) и (d), перечисленные в файле database.txt.
Благодарю.
Решение с помощью оператора 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 Solution, с командой Show tables,
mysql -uroot -pxpwdx -sse "show databases;" | grep -Ev '_backup|schema|mysql'
Заметки,
-sse
вместо -e
исключает заголовки, столбцы и т.д. И выдает только значения.
-ev
опция grep
даст возможность grep из нескольких строк в одном выражении
Вы можете использовать этот запрос для получения всех баз данных без наличия в нем "резервной копии",
mysql -uroot -pxpwdx -e "SELECT 'schema_name' from INFORMATION_SCHEMA.SCHEMATA WHERE 'SCHEMA_NAME' NOT LIKE '%backup%';"
Это даст вам все базы данных без "резервного копирования" в нем, вам не нужно делать grep.