以下是知识:
DBEngine:MYSQL
壳牌:/斌/庆典
开始日期
结束日期
这就是我遇到的问题:
如何查询所有数据库并将其名称放在数组中
如何从开始日期到结束日期查询对话表
如何以json格式转储该数据
这是我到目前为止所做的:
#!/bin/bash
data_base="*"
db_user="superfly"
db_pass="superflypassword"
start_date=""
end_date=""
wdir="/home/superfly"
cd $wdir
mysqldump -hlocalhost -u${db_user} -p${db_pass} $data_base conversations > ${data_base}_conversations.sql
答案 0 :(得分:0)
您可以使用bash脚本获取数据库名称并在其上循环:
mysql -BNe "SELECT TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME='conversations'" | while read schema
do
...
done
Mysqldump不以JSON格式输出。它输出SQL脚本或带有选项--tab
的CSV文件。
mysql客户端也不输出JSON格式。
但您可以使用MySQL 5.7 JSON函数从列构建JSON文档:
mysql -BN --database=$schema --execute="SELECT
JSON_OBJECT('col1', col1, 'col2', col2, 'col3', col3, 'col4', col4)
FROM conversations WHERE date_col BETWEEN '<start-date>' AND '<end-date>'"
这至少会将每一行输出为单独的JSON文档。要使整个集合成为一个长JSON文档,您必须在开头和结尾手动添加一些JSON语法,并在行之间插入逗号。
另一个选择是MySQL Shell。这是一个客户端工具,是一个相对较新的产品。它是免费的,但需要单独安装。有关安装帮助,请参阅https://dev.mysql.com/doc/refman/5.7/en/document-store-shell-install.html。
您可以这样使用它:
mysqlsh --sql --database=$schema --execute="show tables" --json
在此示例中,我只运行show tables
但您可以运行任何SQL查询。在此处阅读有关MySQL Shell的更多信息:https://dev.mysql.com/doc/refman/5.7/en/mysql-shell.html
答案 1 :(得分:0)
Bill Karwin's answer是对的。我尽我所能并创建了以下脚本:
#/bin/bash
days="8"
group_name="C4"
wdir="/home/superfly/conversations"
backup_dir="${wdir}/.backups"
db_list="database_list.txt"
table="conversations"
#--
backup_date="`date +"%m-%d-%y"`"
tarball_file="${group_name}__${backup_date}"
email1="one@gmail.com"
email2="two@gmail.com"
email3="three@gmail.com"
#-- clean up any old files that may exist
cd $backup_dir && rm -rf ${tarball_file}* ${db_list} *.json;
#-- fetch database list minus the default system database names
mysql --login-path=master --skip-column-names -e "SELECT schema_name AS DatabaseList \
FROM information_schema.schemata WHERE schema_name NOT IN ('mysql', 'Database', \
'information_schema', 'performance_schema', 'sys', 'schema_name')" > $db_list
#-- fetch the last 8 days of the conversations table in json format
for database in `cat $db_list`;
do
mysql --login-path=master -BN --database=${database} --execute="SELECT \
JSON_OBJECT('id', id, 'sender_id', sender_id, 'recipient_id', recipient_id, \
'timestamp', timestamp, 'content', content, 'quick_reply', quick_reply, 'type', \
type, 'seq', seq, 'meta', meta) FROM $table WHERE timestamp >= DATE_SUB(NOW(), \
INTERVAL ${days} day)" > ${database}.json;
done
#-- remove empty jason files - compress populated json files
find $backup_dir -size 0 -delete;
tar czf ${tarball_file}.tar.gz *.json;
rm -rf *.json $db_list;
#-- email compressed file
echo "Conversations Logs From The Last 8 days" | mutt -a ${tarball_file}.tar.gz \
-s"Conversations Logs" -- $email1 $email2 $email3
exit 0;