Use a blacklist instead of a whitelist.
This commit is contained in:
parent
1e8e180a78
commit
f3c9bc18b2
4 changed files with 37 additions and 5 deletions
|
@ -5,4 +5,8 @@
|
||||||
<TargetFramework>netcoreapp2.2</TargetFramework>
|
<TargetFramework>netcoreapp2.2</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="MySql.Data" Version="8.0.18" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
public string MySqlHost { get; set; } = @"localhost";
|
public string MySqlHost { get; set; } = @"localhost";
|
||||||
public string MySqlUser { get; set; }
|
public string MySqlUser { get; set; }
|
||||||
public string MySqlPass { get; set; }
|
public string MySqlPass { get; set; }
|
||||||
public string MySqlDatabases { get; set; } = @"misuzu";
|
public string MySqlExcludeDatabases { get; set; } = @"mysql information_schema performance_schema";
|
||||||
|
|
||||||
public string MisuzuPath { get; set; }
|
public string MisuzuPath { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
using System;
|
using MySql.Data.MySqlClient;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
|
@ -92,6 +94,34 @@ namespace BackupManager {
|
||||||
if (!Directory.Exists(BackupStore))
|
if (!Directory.Exists(BackupStore))
|
||||||
Directory.CreateDirectory(BackupStore);
|
Directory.CreateDirectory(BackupStore);
|
||||||
|
|
||||||
|
Log(@"Fetching database list...");
|
||||||
|
|
||||||
|
MySqlConnectionStringBuilder connStr = new MySqlConnectionStringBuilder {
|
||||||
|
Server = Config.MySqlHost,
|
||||||
|
UserID = Config.MySqlUser,
|
||||||
|
Password = Config.MySqlPass,
|
||||||
|
CharacterSet = @"utf8mb4",
|
||||||
|
};
|
||||||
|
|
||||||
|
List<string> databases = new List<string>();
|
||||||
|
string[] exclude = Config.MySqlExcludeDatabases.Split(' ');
|
||||||
|
|
||||||
|
using (MySqlConnection conn = new MySqlConnection(connStr.ToString())) {
|
||||||
|
conn.Open();
|
||||||
|
|
||||||
|
using (MySqlCommand comm = new MySqlCommand(@"SHOW DATABASES;", conn))
|
||||||
|
using (MySqlDataReader read = comm.ExecuteReader()) {
|
||||||
|
while (read.Read()) {
|
||||||
|
string database = read.GetString(0);
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(database) || exclude.Contains(database))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
databases.Add(database);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Log(@"Creating backup archive...");
|
Log(@"Creating backup archive...");
|
||||||
|
|
||||||
string archivePath = Path.GetTempFileName();
|
string archivePath = Path.GetTempFileName();
|
||||||
|
@ -110,8 +140,6 @@ namespace BackupManager {
|
||||||
sw.WriteLine(@"default-character-set=utf8mb4");
|
sw.WriteLine(@"default-character-set=utf8mb4");
|
||||||
}
|
}
|
||||||
|
|
||||||
string[] databases = Config.MySqlDatabases.Split(' ');
|
|
||||||
|
|
||||||
foreach (string database in databases)
|
foreach (string database in databases)
|
||||||
CreateDbDump(archive, sqldefaults, database);
|
CreateDbDump(archive, sqldefaults, database);
|
||||||
|
|
||||||
|
|
|
@ -6,5 +6,5 @@ Provided for transparency.
|
||||||
## Grant line for MySQL backup user
|
## Grant line for MySQL backup user
|
||||||
|
|
||||||
```
|
```
|
||||||
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER, EXECUTE ON *.* TO 'user'@'localhost';
|
GRANT SELECT, LOCK TABLES, SHOW VIEW, SHOW DATABASES, EVENT, TRIGGER, EXECUTE ON *.* TO 'user'@'localhost';
|
||||||
```
|
```
|
||||||
|
|
Reference in a new issue