Il seguente batch permette di effettuare il backup di tutti i database presenti in un’installazione MySQL/MariaDB, comprimerli e salvare il file compresso in una cartella a piacere con un solo comando.
Ovviamente lo script può essere migliorato, ma questa è una buona base.
REM Trova la data
set currentdate=%DATE:~-2%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%
REM Imposta cartella bin di MySQL
set mysqldir=C:\xampp\mysql\bin\
REM Imposta la cartella di backup temporanea - meglio se vuota
set mysqlbkpdir=C:\xampp\mysql\bin\backup\
REM Utente MySQL e relativa pass
set mysqluser=root
set mysqlpass=password
REM Percorso dell'applicazione di compressione - se non si utilizza RAR verificare la sintassi corretta per l'applicazione
set zipexe=C:\Program Files (x86)\WinRAR\Rar.exe
REM Percorso del file di output compresso
set rardestfolder=C:\Users\foo\Dropbox\
REM Estrae la lista dei database (escludendo quelli di sistema) ed esegue il dump
%mysqldir%mysql.exe -u %mysqluser% -p%mysqlpass% -s -N -e "SHOW DATABASES" | for /F "usebackq" %%D in (`findstr /V "information_schema performance_schema"`) do %mysqldir%mysqldump -u %mysqluser% -p%mysqlpass% %%D > %mysqlbkpdir%%%D.sql
REM Comprime i file SQL estratti in un unico file RAR
"%zipexe%" a -r %rardestfolder%DBBackup%currentdate%.rar %mysqlbkpdir%*.sql
REM Cancella i file sql temporanei
del %mysqlbkpdir%*.sql |
REM Trova la data
set currentdate=%DATE:~-2%%DATE:~3,2%%DATE:~0,2%_%TIME:~0,2%%TIME:~3,2%
REM Imposta cartella bin di MySQL
set mysqldir=C:\xampp\mysql\bin\
REM Imposta la cartella di backup temporanea - meglio se vuota
set mysqlbkpdir=C:\xampp\mysql\bin\backup\
REM Utente MySQL e relativa pass
set mysqluser=root
set mysqlpass=password
REM Percorso dell'applicazione di compressione - se non si utilizza RAR verificare la sintassi corretta per l'applicazione
set zipexe=C:\Program Files (x86)\WinRAR\Rar.exe
REM Percorso del file di output compresso
set rardestfolder=C:\Users\foo\Dropbox\
REM Estrae la lista dei database (escludendo quelli di sistema) ed esegue il dump
%mysqldir%mysql.exe -u %mysqluser% -p%mysqlpass% -s -N -e "SHOW DATABASES" | for /F "usebackq" %%D in (`findstr /V "information_schema performance_schema"`) do %mysqldir%mysqldump -u %mysqluser% -p%mysqlpass% %%D > %mysqlbkpdir%%%D.sql
REM Comprime i file SQL estratti in un unico file RAR
"%zipexe%" a -r %rardestfolder%DBBackup%currentdate%.rar %mysqlbkpdir%*.sql
REM Cancella i file sql temporanei
del %mysqlbkpdir%*.sql
Per connettersi al database interno di WSUS:
sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query |
sqlcmd -S \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query
Per tentare un primo ripristino:
ALTER DATABASE SUSDB SET SINGLE_USER WITH NO_WAIT
DBCC CHECKDB
go |
ALTER DATABASE SUSDB SET SINGLE_USER WITH NO_WAIT
DBCC CHECKDB
go
Se il primo comando non sembra risolvere provate il comando seguente.
Il comando seguente farà perdere sicuramente dei dati al database
DBCC checkdb ('SUSDB', repair_allow_data_loss)
go |
DBCC checkdb ('SUSDB', repair_allow_data_loss)
go
Per riportare il database in multi user
ALTER DATABASE SUSDB SET MULTI_USER WITH NO_WAIT
go |
ALTER DATABASE SUSDB SET MULTI_USER WITH NO_WAIT
go
USE [DATABASE]
SELECT TABLE_NAME, TABLE_ROWS FROM `information_schema`.`tables` WHERE `table_schema` = '[DATABASE]'; |
use [DATABASE]
SELECT TABLE_NAME, TABLE_ROWS FROM `information_schema`.`tables` WHERE `table_schema` = '[DATABASE]';
USE [DATABASE];
SELECT sc.name +'.'+ ta.name TableName
,SUM(pa.rows) RowCnt
FROM sys.tables ta
INNER JOIN sys.partitions pa
ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc
ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name,ta.name
ORDER BY SUM(pa.rows) DESC |
use [DATABASE];
SELECT sc.name +'.'+ ta.name TableName
,SUM(pa.rows) RowCnt
FROM sys.tables ta
INNER JOIN sys.partitions pa
ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc
ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name,ta.name
ORDER BY SUM(pa.rows) DESC
La clausola where permette di impostare delle condizioni sulla selezione che si intende fare.
La sintassi è:
SELECT [campi da visualizzare] FROM [tabella su cui fare la query] WHERE [condizione]; |
SELECT [campi da visualizzare] FROM [tabella su cui fare la query] WHERE [condizione];
Per tutti le dimostrazioni utilizzeremo come tabella di esempio la seguente.
Tabella: SF_personaggi
oppure
Query: SELECT * FROM SF_personaggi;
id nome naz eta mossa
1 Chun-li CHI 26 Lightining Kick
2 Ryu JAP 30 Hadoken
3 Ken USA 29 Shoryuken
4 Balrog USA 26 Dash Straight
5 Zangief USR 38 Double Lariat
6 Blanka BRA 20 Electric Thunder
7 Guile USA 34 Sonic Boom
Query: SELECT * FROM SF_personaggi WHERE id > 4;
id nome naz eta mossa
5 Zangief USR 38 Double Lariat
6 Blanka BRA 20 Electric Thunder
7 Guile USA 34 Sonic Boom
Query: SELECT * FROM SF_personaggi WHERE mossa LIKE 'D%';
id nome naz eta mossa
4 Balrog USA 26 Dash Straight
5 Zangief USR 38 Double Lariat
Query: SELECT * FROM SF_personaggi WHERE id % 2 = 1;
id nome naz eta mossa
1 Chun-li CHI 26 Lightining Kick
3 Ken USA 29 Shoryuken
5 Zangief USR 38 Double Lariat
7 Guile USA 34 Sonic Boom
Il comando SELECT permette l’interrogazione dei dati contenuti in una tabella.
La sintassi è:
SELECT [campi da visualizzare] FROM [tabella su cui fare la query]; |
SELECT [campi da visualizzare] FROM [tabella su cui fare la query];
Per tutti le dimostrazioni utilizzeremo come tabella di esempio la seguente.
Tabella: SF_personaggi
oppure
Query: SELECT * FROM SF_personaggi;
id nome naz eta mossa
1 Chun-li CHI 26 Lightining Kick
2 Ryu JAP 30 Hadoken
3 Ken USA 29 Shoryuken
4 Balrog USA 26 Dash Straight
5 Zangief USR 38 Double Lariat
6 Blanka BRA 20 Electric Thunder
7 Guile USA 34 Sonic Boom
L’asterisco nell’esempio precedente equivale a dire “tutti i campi”. Nell’esempio successivo vedremo come effettuare una proiezione (selezione dei campi da visualizzare)
Query: SELECT nome, eta FROM SF_personaggi;
nome eta
Chun-li 26
Ryu 30
Ken 29
Balrog 26
Zangief 38
Blanka 20
Guile 34