将 linux 命令的输出导入到 MySQL table
Import output of linux command to MySQL table
我正在尝试创建我的 google 云 SQL 实例的清单并将其保存在单独的 MySQL 数据库中,以便我可以将其输入到我们现有的 on-前提库存。
要获取 gcloud 实例列表,我可以 运行 以下操作:
$> gcloud sql instances list
这将 return 类似于:
NAME DATABASE_VERSION LOCATION TIER ADDRESS STATUS
inst3 MYSQL_5_7 europe-west4-b db-f1-micro xx.xx.xx.xx RUNNABLE
inst2 MYSQL_5_6 europe-west4-b db-f1-micro xx.xx.xx.xx RUNNABLE
zandra MYSQL_5_7 europe-west4-c db-f1-micro xx.xx.xx.xx RUNNABLE
在 bash 脚本中,如果我 运行 这样:
$> allinstances=`gcloud sql instances list`
设置一个名为 allinstances
的变量,然后如何将其插入一个名为 gcloudinv
的 mysql table
我已经试过这个,预计会出现错误:
$> mysql -uuser -ppassword gcloudinv < allinstances
我知道这行不通,但我需要做些什么才能将输出转换为 mysql 可以使用的格式。
理想情况下,我会每天覆盖此基础库存。
谢谢
# just craete table if does not exists query
query="CREATE TABLE IF NOT EXISTS 'gcloud' ( NAME varchar(255), DATABASE_VERSION varchar(255), LOCATION varchar(255), TIER varchar(255), ADDRESS varchar(255), STATUS varchar(255) ); "
# convert the lines in format `string[spaces]string[spaces] and so on` into a `insert into 'gcloud' ( string , string, and so on );`
query+="$( gcloud sql instances list | tail -n +2 | while read -r name database_location location tier address status; do echo "insert into 'gcloud' ( '$name', '$database_location', '$location', '$tier', '$address', '$status' );"; done )"
# execute the query
mysql -uuser -ppassword gcloudinv -e "$query"
备注:
tail -n +2
从输入中删除第一行
- 不要使用 ` ` 获取命令输出,它已被弃用并且不能嵌套。使用
$( .. )
- 您可以使用 HERE 字符串将变量的内容通过管道传输到命令中,例如:
mysql -uuser -ppassword gcloudinv <<<"$allinstances"
- 去掉第一行之后,就是将这一行转化为插入mysql语句的方法。
我正在尝试创建我的 google 云 SQL 实例的清单并将其保存在单独的 MySQL 数据库中,以便我可以将其输入到我们现有的 on-前提库存。
要获取 gcloud 实例列表,我可以 运行 以下操作:
$> gcloud sql instances list
这将 return 类似于:
NAME DATABASE_VERSION LOCATION TIER ADDRESS STATUS
inst3 MYSQL_5_7 europe-west4-b db-f1-micro xx.xx.xx.xx RUNNABLE
inst2 MYSQL_5_6 europe-west4-b db-f1-micro xx.xx.xx.xx RUNNABLE
zandra MYSQL_5_7 europe-west4-c db-f1-micro xx.xx.xx.xx RUNNABLE
在 bash 脚本中,如果我 运行 这样:
$> allinstances=`gcloud sql instances list`
设置一个名为 allinstances
的变量,然后如何将其插入一个名为 gcloudinv
我已经试过这个,预计会出现错误:
$> mysql -uuser -ppassword gcloudinv < allinstances
我知道这行不通,但我需要做些什么才能将输出转换为 mysql 可以使用的格式。
理想情况下,我会每天覆盖此基础库存。
谢谢
# just craete table if does not exists query
query="CREATE TABLE IF NOT EXISTS 'gcloud' ( NAME varchar(255), DATABASE_VERSION varchar(255), LOCATION varchar(255), TIER varchar(255), ADDRESS varchar(255), STATUS varchar(255) ); "
# convert the lines in format `string[spaces]string[spaces] and so on` into a `insert into 'gcloud' ( string , string, and so on );`
query+="$( gcloud sql instances list | tail -n +2 | while read -r name database_location location tier address status; do echo "insert into 'gcloud' ( '$name', '$database_location', '$location', '$tier', '$address', '$status' );"; done )"
# execute the query
mysql -uuser -ppassword gcloudinv -e "$query"
备注:
tail -n +2
从输入中删除第一行- 不要使用 ` ` 获取命令输出,它已被弃用并且不能嵌套。使用
$( .. )
- 您可以使用 HERE 字符串将变量的内容通过管道传输到命令中,例如:
mysql -uuser -ppassword gcloudinv <<<"$allinstances"
- 去掉第一行之后,就是将这一行转化为插入mysql语句的方法。