Criando backup do RouterOS/Mikrotik via FTP


Neste exemplo vou ensinar como fazer um backup do seu routerOS/Mikroitk via FTP.

Testei com as versões > 6.48.x e > 7.6

Requisitos ter um servidor FTP 😛
Sugestão: Como criar um servidor FTP (Pure-FTPd) com usuário no banco de dados (MariaDB) usando Debian 10

Vamos ao script, você precisa alterar:
:global host ____IP/DNS_SERVIDOR_FTP____
:global usuario ____USER____
:global senha ____SENHA____
:global diretorio ____pastaX____

Acesse o menu: System >> Script e depois em [+]

O nome do arquivo será o mesmo que você definiu em System >> Identity, serão criado dois arquivos, uma backup e um export (AAAA-MM-DD.NOME.backup AAAA-MM-DD.NOME.rsc)

:log warning "***************************************"
# Conexão FTP
:global host ____IP/DNS_SERVIDOR_FTP____
:global usuario ____USER____
:global senha ____SENHA____
:global diretorio ____pastaX____
# Pega o nome do Router
:global identifica [/system identity get name ];
# Gera data no formato AAAA-MM-DD
:global data [/system clock get date]
:global meses ("jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec");
:global ano ([:pick $data 7 11])
:global mestxt ([:pick $data 0 3])
:global mm ([ :find $meses $mestxt -1 ] + 1);
:if ($mm < 10) do={ :set mm ("0" . $mm); }
:global mes ([:pick $ds 7 11] . $mm . [:pick $ds 4 6])
:global dia ([:pick $data 4 6])
:log info "Gerando backup: $ano-$mes-$dia.$identifica.backup";
/system backup save name="$ano-$mes-$dia.$identifica";
:log info "Gerando export: $ano-$mes-$dia.$identifica.rsc";
/export file="$ano-$mes-$dia.$identifica"
:log info "Processando...";
:delay 5s
:log info "Conectando FTP Server...";
:log info "Enviando Backup [$ano-$mes-$dia.$identifica.backup] ...";
/tool fetch address=$host src-path="$ano-$mes-$dia.$identifica.backup" user="$usuario" password="$senha" port=21 upload=yes mode=ftp dst-path="$diretorio/$ano-$mes-$dia.$identifica.backup"
:log info "Enviando Export [$ano-$mes-$dia.$identifica.rsc] ...";
/tool fetch address=$host src-path="$ano-$mes-$dia.$identifica.rsc" user="$usuario" password="$senha" port=21 upload=yes mode=ftp dst-path="$diretorio/$ano-$mes-$dia.$identifica.rsc"
:delay 1
:log info "Backup enviado com sucesso...";
:log info "Removendo arquivos...";
 /file remove "$ano-$mes-$dia.$identifica.backup"
 /file remove "$ano-$mes-$dia.$identifica.rsc"
:log info "Rotina de backup finalizada...";
:log warning "***************************************";

Agora será preciso agenda-lo para execução a cada X período, no meu exemplo vou definir que todos os meio dias a cada 3 dias. Ajuste de acordo com suas necessidades:
Acesse o menu: System >> Scheduler [+]

Se estiver com preguiça 😀 pode copiar as linhas abaixo e colar no terminal, depois só alterar as variáveis.

/system script
add dont-require-permissions=no name=backup_ftp owner=remontti policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":log warning \"***************************************\"\r\
    \n# Conex\E3o FTP\r\
    \n:global host ____IP/DNS_SERVIDOR_FTP____\r\
    \n:global usuario ___USUARIO___\r\
    \n:global senha ___SENHA___\r\
    \n:global diretorio ___NOME_DA_PASTA___\r\
    \n# Pega o nome do Router\r\
    \n:global identifica [/system identity get name ];\r\
    \n# Gera data no formato AAAA-MM-DD\r\
    \n:global data [/system clock get date]\r\
    \n:global meses (\"jan\",\"feb\",\"mar\",\"apr\",\"may\",\"jun\",\"jul\",\"aug\",\"sep\",\"oct\",\"nov\",\"dec\");\r\
    \n:global ano ([:pick $data 7 11])\r\
    \n:global mestxt ([:pick $data 0 3])\r\
    \n:global mm ([ :find $meses $mestxt -1 ] + 1);\r\
    \n:if ($mm < 10) do={ :set mm (\"0\" . $mm); }\r\
    \n:global mes ([:pick $ds 7 11] . $mm . [:pick $ds 4 6])\r\
    \n:global dia ([:pick $data 4 6])\r\
    \n:log info \"Gerando backup: $ano-$mes-$dia.$identifica.backup\";\r\
    \n/system backup save name=\"$ano-$mes-$dia.$identifica\";\r\
    \n:log info \"Gerando export: $ano-$mes-$dia.$identifica.rsc\";\r\
    \n/export file=\"$ano-$mes-$dia.$identifica\"\r\
    \n:log info \"Processando...\";\r\
    \n:delay 5s\r\
    \n:log info \"Conectando FTP Server...\";\r\
    \n:log info \"Enviando Backup [$ano-$mes-$dia.$identifica.backup] ...\";\r\
    \n/tool fetch address=$host src-path=\"$ano-$mes-$dia.$identifica.backup\" user=\"$usuario\" password=\"$senha\" port=21 upload=yes mode=ftp dst-path=\"$diretorio/\$ano-$mes-$dia.$identifica.backup\"\
    \r\
    \n:log info \"Enviando Export [$ano-$mes-$dia.$identifica.rsc] ...\";\r\
    \n/tool fetch address=$host src-path=\"$ano-$mes-$dia.$identifica.rsc\" user=\"$usuario\" password=\"$senha\" port=21 upload=yes mode=ftp dst-path=\"$diretorio/\$ano-$mes-$dia.$identifica.rsc\"\r\
    \n:delay 1\r\
    \n:log info \"Backup enviado com sucesso...\";\r\
    \n:log info \"Removendo arquivos...\";\r\
    \n /file remove \"$ano-$mes-$dia.$identifica.backup\"\r\
    \n /file remove \"$ano-$mes-$dia.$identifica.rsc\"\r\
    \n:log info \"Rotina de backup finalizada...\";\r\
    \n:log warning \"***************************************\";"

/system scheduler
add interval=3d name=backup_ftp on-event=backup_ftp policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=dec/17/2019 start-time=12:00:00

Simples né! Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

16 Resultados

  1. Pedro Gouveia disse:

    Estou com seguinte problema, “dst-path=C:\Users\USER\Desktop\PASTA” o \ esta dando erro no script, no terminal fala expected end of command, como devo colocar o diretorio do servidor ftp?

  2. Cristiano disse:

    estou com um problema a tempos e não consigo resolver, estou usando o pure FTP a partir do tutorial do Remontti e já tentei de várias formas usar o script de backup, incluindo esse, quando o backup é enviado de forma automatica pelo mikrotik e testado nas versoes 6 e 7 ele simplismente não completa a ação, ou seja, não envia todo o backup faltando bites.. quando é enviado diretamente via terminal executa e envia todo arquivo com exito, já tentei mudar mtu fazer de tudo e realmente não sei mais o que fazer, e nem consigo saber se o problema esta no mikrotik ou no servidor ftp, eu estou usando VPN para fazer o ponto a ponto entre 2 mikrotik, sendo que 1 redireciona direto para o FTP

  3. Ruy Barbosa Borges França disse:

    na 7.11 estava pegando as datas erradas, tive que mudar
    \n:global ano ([:pick \$data 2 4])\r\
    \n:global mestxt ([:pick \$data 5 7])\r\
    \n:global mm ([ :find \$meses \$mestxt -1 ] + 1);\r\
    \n:if (\$mm < 10) do={ :set mm (\"0\" . \$mm); }\r\
    \n:global mes ([:pick \$ds 5 7] . \$mm . [:pick \$ds 5 7])\r\
    \n:global dia ([:pick \$data 8 11])\r\

  4. A Mikrotik alterou o formato da data apartir da versão 7.10, usando o script acima nessa versão o nome do arquivo fica bugado.

  5. Julio disse:

    Onde o log da rotina fica disponível?

  6. Josimar de Assis disse:

    top adorei script de todos q eu usei unico que deu certo mais estou com um problema vamos ver se vc me ajuda

    todos meus cliente estou usando versao 7 do mk
    o script deu certo mais na hora q chega em enviar ele trava, deste em um cliente q esta ainda na versao 6 e deu certinho

    vc tem algum jeito para rodar na versao 7

    • Testei na versão 7, funcionou normalmente…

      /system scheduler
      add interval=3d name=backup_ftp on-event=backup_ftp policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=dec/17/2019 start-time=12:00:00
      
      /system script
      add dont-require-permissions=no name=backup_ftp owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":log warning \"***************************************\"\r\
          \n# Conex\E3o FTP\r\
          \n:global host ____________________\r\
          \n:global usuario ____________________\r\
          \n:global senha ____________________\r\
          \n:global diretorio ____________________\r\
          \n# Pega o nome do Router\r\
          \n:global identifica [/system identity get name ];\r\
          \n# Gera data no formato AAAA-MM-DD\r\
          \n:global data [/system clock get date]\r\
          \n:global meses (\"jan\",\"feb\",\"mar\",\"apr\",\"may\",\"jun\",\"jul\",\"aug\",\"sep\",\"oct\",\"nov\",\"dec\");\r\
          \n:global ano ([:pick $data 7 11])\r\
          \n:global mestxt ([:pick $data 0 3])\r\
          \n:global mm ([ :find $meses $mestxt -1 ] + 1);\r\
          \n:if ($mm < 10) do={ :set mm (\"0\" . $mm); }\r\
          \n:global mes ([:pick $ds 7 11] . $mm . [:pick $ds 4 6])\r\
          \n:global dia ([:pick $data 4 6])\r\
          \n:log info \"Gerando backup: $ano-$mes-$dia.$identifica.backup\";\r\
          \n/system backup save name=\"$ano-$mes-$dia.$identifica\";\r\
          \n:log info \"Gerando export: $ano-$mes-$dia.$identifica.rsc\";\r\
          \n/export file=\"$ano-$mes-$dia.$identifica\"\r\
          \n:log info \"Processando...\";\r\
          \n:delay 5s\r\
          \n:log info \"Conectando FTP Server...\";\r\
          \n:log info \"Enviando Backup [$ano-$mes-$dia.$identifica.backup] ...\";\r\
          \n/tool fetch address=$host src-path=\"$ano-$mes-$dia.$identifica.backup\" user=\"$usuario\" password=\"$senha\" port=21 upload=yes mode=ftp dst-path=\"$diretorio/\$ano-$mes-$dia.$identifica.backup\"\r\
          \n:log info \"Enviando Export [$ano-$mes-$dia.$identifica.rsc] ...\";\r\
          \n/tool fetch address=$host src-path=\"$ano-$mes-$dia.$identifica.rsc\" user=\"$usuario\" password=\"$senha\" port=21 upload=yes mode=ftp dst-path=\"$diretorio/\$ano-$mes-$dia.$identifica.rsc\"\r\
          \n:delay 1\r\
          \n:log info \"Backup enviado com sucesso...\";\r\
          \n:log info \"Removendo arquivos...\";\r\
          \n /file remove \"$ano-$mes-$dia.$identifica.backup\"\r\
          \n /file remove \"$ano-$mes-$dia.$identifica.rsc\"\r\
          \n:log info \"Rotina de backup finalizada...\";\r\
          \n:log warning \"***************************************\";"
      
  7. Anderson disse:

    Olá, teria como fazer o upload por SFTP?

  8. Francisco Pinheiro disse:

    Obrigado Excelente, funciona muito bem.

  9. Jorge A. Duarte disse:

    Muito obrigado.
    Ajudou de mais.
    Sucesso.

  10. Ruan disse:

    Excelente script, me poupou um tempo! Funciona certinho

  11. Bruno Dantas disse:

    uma dica pra quem usa subpastas, :global diretorio /bkp_mk/mikrotikX, onde “bkp_mk” será a primeira subpasta dentro do diretorio onde o usario do ftp tem acesso, digamos que a pasta padrao dele é “mikrotik”, entao o script irá upar o backup para dentro da subopasta /bkp_mk/mikrotikX (mikrotikX é por exemplo, uma subpasta que diferencia seus concentradores, caso queira organizar separadamente).

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *