Compare os dois comandos a seguir:
mysqldump database_name --hex-blob -uuser_name -p | tee database_name_tee.sql
mysqldump database_name --hex-blob -uuser_name -p > database_name_out.sql
Se eu executar o primeiro, na conclusão, vejo o seguinte no meu terminal:
$ 62;c62;c62;c62;c
De onde vem isso? Isso sugere que algo deu errado em algum lugar do processo? Esses caracteres de controle estão sendo emitidos por algum motivo?
U + 0C62 é Telugu Vocalic L, que eu tenho certeza que não faz parte dos meus dados , então eu não acho que isso é Unicode. De qualquer forma, a sequência parece não ser c62
mas 62;c
. Este poderia ser um tipo de controle de algum tipo. E o que está causando isso está incluído no arquivo de saída. Se depois eu cat
database_name_tee.sql
ou database_name_out.sql
, vejo novamente essa sequência quando o cat
estiver completo.
tail database.sql -n200
não produz esta saída; -n300
produz apenas $ 62;c62;c
; e -n400
produz $ 62;c62;c62;c62;c
. Então, o que quer que esteja causando isso é distribuído por todo o arquivo.
Mexendo com head
e tail
, encontrei um dos culpados: uma única linha que, quando salva em um arquivo separado e impressa com cat
, produz $ 62;c62;c
. Meu problema é que essa linha única é 1043108 bytes.
(O arquivo SQL gerado é perfeito e funciona sem erros. Não acho que isso tenha algo a ver com o MySQL em si.)
Estou executando o mysqldump
inicial em um servidor CentOS e estou vendo os mesmos efeitos de cat
no próprio servidor e no meu desktop Ubuntu, então isso parece ser uma coisa geral do Bash.
od -c problem_line
produz 65174 linhas de saída , então reduzi para seção menor que demonstra a mesma saída (também disponível como um hexdump simples ).