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!
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?
Eu coloquei assim o diretorio e funcionou perfeito
\n:global diretorio /bkp_mikrotik/\r\
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
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\
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.
Onde o log da rotina fica disponÃvel?
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…
Apartir da versão 7.10 a mikrotik alterou o formato ISO de data, fazendo com que o nome do arquivo ficasse com a data incorreta no backup.
Olá, teria como fazer o upload por SFTP?
sftp seria utilizando a porta ssh, no linux vc pode usar o comando scp ou sshpass
https://blog.remontti.com.br/4791
Obrigado Excelente, funciona muito bem.
Muito obrigado.
Ajudou de mais.
Sucesso.
Excelente script, me poupou um tempo! Funciona certinho
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).