You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
307 lines
13 KiB
307 lines
13 KiB
using FluentFTP;
|
|
using Tiobon.Core.OPS.Tool.OPS.Tool.Helper;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Tiobon.Core.OPS.Tool.OPS.Tool.View
|
|
{
|
|
public partial class Frm_Backup : Form
|
|
{
|
|
public Frm_Backup()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void Frm_Backup_Load(object sender, EventArgs e)
|
|
{
|
|
if (Const.config.system == "Linux")
|
|
{
|
|
cb_type.Items.RemoveAt(1);
|
|
rad_local.Enabled = false;
|
|
}
|
|
}
|
|
|
|
private void Rad_week_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (rad_week.Checked)
|
|
{
|
|
label9.Text = "周发生一次:";
|
|
foreach (var item in groupBox4.Controls)
|
|
{
|
|
var cb = item as CheckBox;
|
|
if (cb != null)
|
|
{
|
|
cb.Visible = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Rad_day_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (rad_day.Checked)
|
|
{
|
|
label9.Text = "天发生一次:";
|
|
foreach (var item in groupBox4.Controls)
|
|
{
|
|
var cb = item as CheckBox;
|
|
if (cb != null)
|
|
{
|
|
cb.Visible = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void Btn_save_Click(object sender, EventArgs e)
|
|
{
|
|
build_Savebat();
|
|
}
|
|
|
|
private void build_Savebat()
|
|
{
|
|
try
|
|
{
|
|
if (Const.config.system == "Windows")
|
|
{
|
|
string command = $"set filename={Const.config.install_dir}/back/mysql/ihdis_back_%date:~0,4%%date:~5,2%%date:~8,2%.sql\r\n" +
|
|
$"sudo docker-compose exec -T mysql mysql -uroot -pjlmed@2020 " +
|
|
//$"{Const.config.install_dir}/app/mysql/bin/mysqldump.exe --set-gtid-purged=OFF -h127.0.0.1 -u{Const.config.db_user} -p{Const.config.db_passwd} -P{Const.config.db_port} " +
|
|
$"--single-transaction ";
|
|
command += $"--databases ihdis ihdis_ts > %filename% \r\n";
|
|
if (!Directory.Exists(Const.config.install_dir + "/back/mysql"))
|
|
{
|
|
Directory.CreateDirectory(Const.config.install_dir + "/back/mysql");
|
|
}
|
|
if (rad_local.Checked)
|
|
{
|
|
command += $"xcopy /y \"%filename%\" \"{txt_dir.Text.Trim()}\"";
|
|
}
|
|
else
|
|
{
|
|
if (cb_type.Text=="FTP")
|
|
{
|
|
command += $"Echo open {txt_ip.Text.Trim()}>ftp.up\r\n" +
|
|
$"Echo {txt_user.Text.Trim()}>>ftp.up\r\n" +
|
|
$"Echo {txt_passwd.Text.Trim()}>>ftp.up\r\n" +
|
|
$"Echo cd \\{txt_dir.Text.Trim()} >>ftp.up\r\n" +
|
|
$"Echo put \"%filename%\">>ftp.up\r\n" +
|
|
$"Echo bye>>ftp.up\r\n" +
|
|
$"FTP -s:ftp.up >> ftpup.log\r\n" +
|
|
$"del ftp.up /q\r\n";
|
|
}
|
|
else
|
|
{
|
|
command += $"net use \\\\{txt_ip.Text.Trim()}\\{txt_dir.Text.Trim()} {txt_passwd.Text} /user:{txt_user.Text} \r\n";
|
|
command += $"xcopy /y \"%filename%\" \"\\\\{txt_ip.Text.Trim()}\\{txt_dir.Text.Trim()}\"";
|
|
}
|
|
}
|
|
File.WriteAllText($"{Const.config.install_dir}/back/mysql_backup.bat", command);
|
|
|
|
|
|
string task = $"schtasks /create /tn \"iHDIS_Mysql_Backup\" /tr \"{Const.config.install_item_dir}/back/mysql_backup.bat\" /F /RU SYSTEM";
|
|
if (rad_day.Checked)
|
|
{
|
|
task += $" /sc DAILY /NP /ST {date_time.Value.ToString("HH:mm")}";
|
|
}
|
|
else
|
|
{
|
|
task += $" /sc WEEKLY /D ";
|
|
if (cb_one.Checked)
|
|
task += "MON,";
|
|
if (cb_two.Checked)
|
|
task += "TUE,";
|
|
if (cb_three.Checked)
|
|
task += "WED,";
|
|
if (cb_four.Checked)
|
|
task += "THU,";
|
|
if (cb_five.Checked)
|
|
task += "FRI,";
|
|
if (cb_six.Checked)
|
|
task += "SAT,";
|
|
if (cb_seven.Checked)
|
|
task += "SUN,";
|
|
if (!cb_one.Checked && !cb_two.Checked && !cb_three.Checked && !cb_four.Checked && !cb_five.Checked && !cb_six.Checked && !cb_seven.Checked)
|
|
{
|
|
task += " * ";
|
|
}
|
|
if (task[task.Length - 1] == ',')
|
|
{
|
|
task = task.Remove(task.Length - 1, 1);
|
|
}
|
|
task += $" /NP /ST {date_time.Value.ToString("HH:mm")}";
|
|
}
|
|
CmdHelper.RunCmd(task, out string output);
|
|
}
|
|
else
|
|
{
|
|
string command = $"sudo docker-compose -f {Const.config.install_dir}/docker-compose.yml exec -T mysql mysqldump --set-gtid-purged=OFF -uroot -pjlmed@2020 --single-transaction ";
|
|
//if (!cb_saveiot.Checked)
|
|
//{
|
|
// command += "--ignore-table=ihdis.iot_treatment_data";
|
|
//}
|
|
//if (!cb_savelog.Checked)
|
|
//{
|
|
// command += "--ignore-table=ihdis.sys_log";
|
|
//}
|
|
SFTPHelper sftp = new SFTPHelper(Const.config.ip, Const.config.ssh_port, Const.config.ssh_user, Const.config.ssh_passwd);
|
|
if (!sftp.Exists($"{Const.config.install_dir}/back/mysql/"))
|
|
{
|
|
try
|
|
{
|
|
sftp.Connect();
|
|
sftp.CreateDirectory($"{Const.config.install_dir}/back/mysql/");
|
|
sftp.Disconnect();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show(ex.Message);
|
|
}
|
|
}
|
|
command += $" --databases ihdis ihdis_ts > {Const.config.install_dir}/back/mysql/\\$filename && sed -i \\'1d\\' {Const.config.install_dir}/back/mysql/\\$filename";
|
|
|
|
string task = "";
|
|
if (rad_day.Checked)
|
|
{
|
|
task += $"{date_time.Value.ToString("mm")} {date_time.Value.ToString("HH")} \\* \\* \\* jianlianmed /bin/bash {Const.config.install_dir}/back/mysql_backup.sh";
|
|
}
|
|
else
|
|
{
|
|
task += $"{date_time.Value.ToString("mm")} {date_time.Value.ToString("HH")} \\* \\* ";
|
|
if (cb_one.Checked)
|
|
task += "1,";
|
|
if (cb_two.Checked)
|
|
task += "2,";
|
|
if (cb_three.Checked)
|
|
task += "3,";
|
|
if (cb_four.Checked)
|
|
task += "4,";
|
|
if (cb_five.Checked)
|
|
task += "5,";
|
|
if (cb_six.Checked)
|
|
task += "6,";
|
|
if (cb_seven.Checked)
|
|
task += "7,";
|
|
if (!cb_one.Checked && !cb_two.Checked && !cb_three.Checked && !cb_four.Checked && !cb_five.Checked && !cb_six.Checked && !cb_seven.Checked)
|
|
{
|
|
task += " \\* ";
|
|
}
|
|
if (task[task.Length - 1] == ',')
|
|
{
|
|
task = task.Remove(task.Length - 1, 1);
|
|
}
|
|
task += $" jianlianmed /bin/bash {Const.config.install_dir}/back/mysql_backup.sh";
|
|
}
|
|
string sh = $"filename=\\\"ihdis_back_\\`date +\\\"%Y%m%d\\\"\\`.sql\\\" \n" +
|
|
$"{command} \n" +
|
|
$"ftp -n<<!\n" +
|
|
$"open {txt_ip.Text.Trim()}\n" +
|
|
$"user {txt_user.Text.Trim()} {txt_passwd.Text.Trim()}\n" +
|
|
$"binary\n" +
|
|
$"cd {txt_dir.Text.Trim()}\n" +
|
|
$"prompt\n" +
|
|
$"put {Const.config.install_dir}/back/mysql/\\$filename \\$filename\n" +
|
|
$"close\n" +
|
|
$"!";
|
|
SSHHelper ssh = new SSHHelper(Const.config.ip, Const.config.ssh_port, Const.config.ssh_user, Const.config.ssh_passwd);
|
|
ssh.Excute_cmd($"sudo sh -c \"echo {task} >> /etc/crontab\"", out _);
|
|
var cmd = $"sudo sh -c \"echo -e {sh} >> {Const.config.install_dir}/back/mysql_backup.sh\"";
|
|
ssh.Excute_cmd($"sudo sh -c 'echo -e \"{sh}\" > {Const.config.install_dir}/back/mysql_backup.sh'", out _);
|
|
}
|
|
MessageBox.Show("创建定时备份成功!");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show($"创建定时任务失败!{ex.Message}");
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void Cb_type_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void Rad_local_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
label1.Enabled = !rad_local.Checked;
|
|
label2.Enabled = !rad_local.Checked;
|
|
label4.Enabled = !rad_local.Checked;
|
|
label5.Enabled = !rad_local.Checked;
|
|
|
|
txt_ip.Enabled = !rad_local.Checked;
|
|
cb_type.Enabled = !rad_local.Checked;
|
|
txt_user.Enabled = !rad_local.Checked;
|
|
txt_passwd.Enabled = !rad_local.Checked;
|
|
}
|
|
|
|
private void btn_test_Click(object sender, EventArgs e)
|
|
{
|
|
if (cb_type.Text == "共享目录")
|
|
{
|
|
string path = $@"\\{txt_ip.Text}\{txt_dir.Text}";
|
|
//连接共享目录
|
|
bool status = ShareDirHelper.connectState(path, txt_user.Text.Trim(), txt_passwd.Text.Trim());
|
|
if (status)
|
|
{
|
|
MessageBox.Show($"连接成功,备份目录为:\r\n{path}", "提示");
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("连接不到指定目录");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//ftp客户端
|
|
FtpClient client = new FtpClient(txt_ip.Text);
|
|
//是否填写用户名,有则添加认证,否则使用匿名用户
|
|
if (!string.IsNullOrEmpty(txt_user.Text.Trim()))
|
|
{
|
|
client.Credentials = new NetworkCredential(txt_user.Text.Trim(), txt_passwd.Text.Trim());
|
|
}
|
|
try
|
|
{
|
|
client.Connect();
|
|
if (!client.DirectoryExists(txt_dir.Text.Trim()))
|
|
{
|
|
if (MessageBox.Show("目录不存在,是否自动创建?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
|
{
|
|
client.CreateDirectory(txt_dir.Text, true);
|
|
}
|
|
return;
|
|
}
|
|
client.Disconnect();
|
|
MessageBox.Show($"连接成功,备份目录为:\r\nftp://{txt_ip.Text}/{txt_dir.Text}/", "提示");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MessageBox.Show("测试连接失败!\r\n" + ex.Message);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void txt_dir_MouseClick(object sender, MouseEventArgs e)
|
|
{
|
|
if (rad_local.Checked)
|
|
{
|
|
if (folderBrowserDialog1.ShowDialog() == DialogResult.Cancel)
|
|
{
|
|
return;
|
|
}
|
|
txt_dir.Text = folderBrowserDialog1.SelectedPath;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|