问题背景:
接客户问题单反馈分析报表没有数据,经查为统计函数没有运行,函数是通过crontab定时器定时运行的,登录主机查找问题,果然crontab下面的定时任务都被替换了,一看便是中毒了:
1 1 */2 * * /root/.configrc/a/upd>/dev/null 2>&1 @reboot /root/.configrc/a/upd>/dev/null 2>&1 5 8 * * 0 /root/.configrc/b/sync>/dev/null 2>&1 @reboot /root/.configrc/b/sync>/dev/null 2>&1 0 0 */3 * * /tmp/.X25-unix/.rsync/c/aptitude>/dev/null 2>&1
然后朔源清理病毒,加固系统等,数据库的备份也是通过crontab定时运行的,所以数据库也没有备份,先手工执行一次全量备份,备份失败,信息如下:
pg_dump -Fd -E UTF8 -j 8 -f /tmp/test test pg_dump: [archiver (db)] query failed: ERROR: invalid byte sequence for encoding "UTF8": 0x8c pg_dump: [archiver (db)] query was: SELECT a.attnum, a.attname^&vtypmod, a.attstattarget, a.1utstora)d, t.typstorage, a.attnotnull, a.atthasdef, a{"ajattlen, azlignatocal_cat.forat_type(t.oid,a.atttypmod) AS atttypname, array_tringttoptions, ', ') AS attoptions, CASE WHEN a.attcollation <-=ryeTHEN a.attcollation ELSE 0 END AS attcollation, a.attidentity, pg_catalog.array_to_string(ARRAY(SELECT pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value) FROM pg_catalog.pg_options_to_table(attfdwoptions) ORDER BY option_name), E', ') AS attfdwoptions FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t ON a.atttypid = t.oid WHERE a.attrelid = '22577'::pg_catalog.oid AND a.attnum > 0::pg_catalog.int2 ORDER BY a.attnum
问题分析
问题报的是编码问题,首先检查数据库和服务器的编码,发现都无异常;检查数据库的日志也没有发现异常,数据库能正常使用;使用psql命令也能正常运行,且编码无异常;如果是客户端环境编码有问题,那么远程备份应该没有问题,尝试内网中远程进行备份,不报错,能正常备份,难道还是服务器的编码环境有问题?再一次检查服务器编码,确认没有问题,那么可能就是pg_dump命令本身有问题,毕竟服务器中过毒,有可能文件被破坏了,对比同版本的的pg_dump,大小一致,但是md5sum不一致,顺便把数据库的bin目录下执行文件全部校验了一遍,就pg_dump有异常,拷贝同版本的pg_dump文件进行覆盖,备份恢复正常。
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。