已归录

环境:
被监控服务器 server ------------------> 集中监控主机 monitor


需要在 server 主机上收集数据并加工,生成文本文件,然后传输到 monitor 主机上,以供其 mysql 的 load data 命令使用。

在server上生成的文件内容如下:

# cat data/host_memory_10.11.22.40.txt 
"2018-05-03 11:19:44","10.11.22.40","31","22","8","70.96"

将该文件通过 ftp 工具传输到 monitor 机上,脚本如下:

# cat ftp_upload.sh 
#!/bin/sh
/usr/bin/ftp -n<<!
open 10.128.111.114
user zabbix 123456
prompt
cd /tmp/dba_centralized_platform
lcd data
mput host_memory_10.11.22.40.txt
bye
!

在 monitor 主机上通过 MySQL 的 load data 命令导入数据:

MySQL> load data 
infile '/tmp/dba_centralized_platform/host_memory_10.11.22.40.txt' 
into table host_memory 
fields terminated by ',' enclosed by '"';

导入后的数据如下:

mysql> select * from host_memory;
+---------------------+-------------+----------+----------+----------+--------------+
| gather_date         | ip_addr     | mem_size | mem_used | mem_free | mem_used_pct |
+---------------------+-------------+----------+----------+----------+--------------+
| 2018-05-03 11:19:44 | 10.11.22.40 |       31 |       22 |        8 |         0.00 |
+---------------------+-------------+----------+----------+----------+--------------+

看到最后一列数据是0.00,而不是正确值“70.96"

一开始以为是数据类型的问题,尝试过float类型,decimal(4,2),decimal(5,2)等均不行。

网上搜索“mysql导入小数为0”等帖子,无果。

后面突然想到,问题出现在最后一类,会不是换行符的问题(之前有过此经历),于是查看:

# cat -A /tmp/dba_centralized_platform/host_memory_10.11.22.40.txt 
"2018-05-03 11:19:44","10.11.22.40","31","22","8","70.96"^M$

果然!!!!

由server主机上的源文件是正常的:

# cat -A data/host_memory_10.11.22.40.txt 
"2018-05-03 11:19:44","10.11.22.40","31","22","8","70.96"$

可见是在ftp传输后发生了改变,由是修改ftp的传输算法:

#!/bin/sh
/usr/bin/ftp -n<<!
open 10.128.111.114
user zabbix 123456
prompt
cd /tmp/dba_centralized_platform
lcd data
**binary**
mput host_memory_10.11.22.40.txt
bye
!

重新上传后,问题得到解决。

-- By 许望(RHCA、OCM、VCP)
最后修改:2020 年 07 月 18 日 04 : 04 PM
如果觉得我的文章对你有用,请随意赞赏