資料庫開發記錄

MSSQL

MariaDB

MariaDB

遠端連線

因為安裝完之後預設是無法進行遠端連線,需要再修改可以指定帳號進行遠端連線,可指定連線 IP 網段

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-new-password' WITH GRANT OPTION;

 

參考相關網頁:

MariaDB

MariaDB 排程備份

因為目前用到的服務都是使用到資料庫,因為無法定時手動備份,可以利用排程的方式來備份資料庫裡的資料,上網查詢相關資料使用 Shell 腳本的方法來進行備份

腳本設定


建立腳本例:mysqlbak.sh

#!/bin/bash
# sql 備份腳本
# 保留最近7天備份

# 要刪除的7天前的日期
DEL_TEN_DAY=`date -d -7day +%F-%H%M%S`

# Others vars
BACK_DIR="/root/backup/sqlbak" # 要備份的目錄
DATE_TITILE=`date +%F`         # 標題時間
DATE_TODAY=`date +%F-%H%M%S`   # 備份時間

# 資料庫備份帳號密碼
DB_USER="user"
DB_PASS="password"
# ip
DB_HOST="127.0.0.1"
# 要備份的資料庫,可以多個資料庫要用空格分開,例如 (db1 db2)
DB_NAME=(dbname)


# 如果該目錄不存在則建立新目錄
if [ ! -d $BACK_DIR ]; 
then     
    mkdir -p $BACK_DIR; 
fi

cd /root/backup/sqlbak

echo "-----$DATE_TITILE-----" >> $BACK_DIR/BAK_LOG.txt
for DATA_BASE in ${DB_NAME[@]}
  do
	echo "開始備份 $DATA_BASE" >> $BACK_DIR/BAK_LOG.txt
	mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DATA_BASE | gzip > db_${DATA_BASE}_${DATE_TODAY}.sql.gz
	# 寫入備份日誌
	echo "備份成功 db_${DATA_BASE}_${DATE_TODAY} 到 $BACK_DIR" >> $BACK_DIR/BAK_LOG.txt
    if [ ! -f "$BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz" ]; then
	  echo "7天前($DEL_TEN_DAY)備份檔不存在,無需刪除" >> $BACK_DIR/BAK_LOG.txt
    else
		rm -f $BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz
		echo "刪除7天前備份檔 $BACK_DIR/db_${DATA_BASE}_${DEL_TEN_DAY}.sql.gz" >> $BACK_DIR/BAK_LOG.txt
    fi
  done

 

腳本權限


chmod a+x mysqlbak.sh

 

說明


備份出來的檔名為 「 db_資料庫名稱_日期 」 壓縮檔,如果該目錄有7天以上的檔案會自動刪除掉,這樣子才不會一直占硬碟空間。

 

排程


每天三點執行備份任務

0 3 * * * /root/mysqlbak.sh

 

參考相關網頁:


 

 

 

MariaDB

MariaDB 事件排程

因有使用 GLPI 資產管理系統發現到本身內建的記錄刪除功能是沒有啟作用的,因此請教同事要怎麼設定定時去清理記錄。

操作方式


我是使用免費軟體「 HeidiSQL 」圖形化介面來操作的
開啟此軟體並且連線到要設定的資料庫

Heidisql-01.png

delete FROM glpi_logs WHERE DATE_SUB(CURDATE(), INTERVAL 30 DAY) > DATE(`date_mod`)

Heidisql-02.png

Heidisql-03.png

Heidisql-04.png

MSSQL

MSSQL

MS SQL Express 自動備份

BUBU 因為公司有使用 SQL Express 版本,因該本版是屬於陽春版,所以無法自動備份資料,所以只能用語法方式來執行備份

T-SQL 語法


GO 
DECLARE 
@backupTime VARCHAR(20)
DECLARE 
@fileName VARCHAR(1000) 
SELECT
@backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112) +REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ':', '')) 
SELECT
@fileName='D:\SQLBackup\DB_'+@backupTime+'.bak'
backup database HPDM to disk=@fileName
GO

說明:

@fileName='D:\SQLBackup\DB_'+@backupTime+'.bak(用來設定備份檔案存放位置請自行設定)\DB(備份檔案的前綴字)_'+@backupTime+'.bak'

backup database DBName(資料庫名稱) to disk=@fileName 資料庫名稱請自行修改為你所要備份的資料庫,不然系統出現錯誤問題本人概不負責

 

.bat 設定


forfiles /p "D:\SQLBackup" /m DB_*.bak /d -14 /c "cmd /c del @path"
sleep 60s
sqlcmd -S localhost\SQLEXPRESS -E -i D:\SQLBackup\pdmbak.sql

說明:

先刪除舊的備份檔之後,再執行備份指令

自動刪除舊的備份檔

forfiles /p "D:\SQLBackup" /m DB_*.bak /d -14 /c "cmd /c del @path"
這條命令的意思就是,搜尋「D:/SQLBackup」目錄下的任意字尾名為「bak」的檔案,檢視其日期屬性是否為14天之前的(-14表示之前, 14表示之後),然後執行刪除命令

執行「 SQL 」參數 sqlcmd -S 主機名稱\SQLEXPRESS -E -i D:\XXX.sql

 

參考相關網頁: