linux 第十章 資料庫

2021-10-03 02:43:05 字數 2739 閱讀 5708

0.背景

實際開發環境中,前端程式需要在給定時間段內,將資料更新/插入到mysql指定的庫表中。隨著資料量的增多,基礎庫表基數的增長,每更新一次都會有5s左右的卡頓。

改進方案一:批量更新,累計數10條或者100條進行一次更新入庫操作;

改進方案二:將當前日期前1個月之前的資料進行備份操作,並刪除當前庫表中1個月前的資料。經測定,該方法一定程度提高了訪問效率。根因:基礎表基數少,查詢效率相對提高。

1.庫表的定時備份總結

步驟1:備份mysql指定資料庫中的制定庫表。

使用 mysqldump,設定週期30天。

步驟2:對於日期60天前的已備份的檔案及壓縮包做刪除處理。

步驟3:刪除庫表中在當前日期前30天的資料。(步驟1已經做了備份)。

步驟4:設定定時。

crontab設定。

[root@mysql_bak]# cat  mysql_bak.sh

#!/bin/sh

#database info

db_name="ppdb"

db_user="root"

db_pass="password"

dispose_table="dispose_ticles"

rst_table="match_rst"

db_ip=100.55.1.129

bin_dir="/usr/bin"

bak_dir="/home/mysql_bak/data"

date=`date +%y%m%d_%h%m%s`

#mkdir -p $bak_dir

#備份包 形成壓縮包

$bin_dir/mysqldump $db_name $dispose_table > $bak_dir/$dispose_table.dump_$date.sql

$bin_dir/mysqldump $db_name $dispose_table | gzip > $bak_dir/$dispose_table.dump_$date.sql.gz

$bin_dir/mysqldump $db_name $rst_table > $bak_dir/$rst_table.dump_$date.sql

$bin_dir/mysqldump $db_name $rst_table | gzip > $bak_dir/$rst_table.dump_$date.sql.gz

#定期刪除60天的備份包

find $bak_dir -name "name_*.sql.gz" -type f -mtime +60 -exec rm {} \; > /dev/null 2>&1

#30天前的指定庫表資料刪除操作 (當前時間減去30天)

delete_date=`date --date='30 day ago' +%y-%m-%d`

echo "delete_date=$delete_date"

#刪除rst表資訊

rst_sql="delete from  $rst_table where update_time <= $delete_date order by update_time;";

echo "rst_sql=$rst_sql"

#ret=$(mysql -u $db_user -h $ -p$ $db_name -e "$sql");

ret=$(mysql -h$ $db_name -e "$rst_sql");

echo $ret

#刪除dispose表資訊

dispose_sql="delete from $dispose_table where judge_time <= $delete_date order by judge_time;";

echo "dispose_sql=$dispose_sql"

ret=$(mysql -h$ $db_name -e "$dispose_sql");

echo $ret

2.定時設定:每隔30天的1點進行備份。

[root@mysql_bak]# cat /etc/crontab

shell=/bin/bash

path=/sbin:/bin:/usr/sbin:/usr/bin

mailto=root

home=/

# for details see man 4 crontabs

# example of job definition:

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) or jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (sunday=0 or 7) or sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

0 1 */30 * * /home/mysql_bak/mysql_bak.sh > /dev/null 2>&1

[root@mysql_bak]# crontab -e

0 1 */30 * * /home/mysql_bak/mysql_bak.sh > /dev/null 2>&1

重啟crontab服務

service crond restart

第十章資料庫筆記

事務的概念 事務 transaction 是使用者定義的乙個資料庫操作序列,這些操作要麼全做,要麼全不做,是乙個不可分割的工作單位。事務和程式是兩個概念 1.在關聯式資料庫中,乙個事務可以是一條sql語句,一組sql語句或整個程式 2.乙個程式通常包含多個事務 事務是恢復和併發控制的基本單位 事務的...

第十章 資料庫恢復技術

一 事務 1,定義 事務是使用者定義的乙個資料庫操作系列,這些操作要麼全做,要麼全不做,是乙個不可分割的工作單位 2,事務和程式是兩個概念,乙個程式可以包含多個事務 3,事務是恢復和併發控制的基本單位 4,事務的特性 1 原子性 2 一致性 3 隔離性 4 持續性 注 事務特性的作用 保證事務aci...

4 29 20 資料庫第十章作業

1.考慮上圖所示的日誌記錄 1 如果系統故障發生在14之後,說明哪些事務需要重做,哪些事務需要回滾。t1和t3需要重做,t4需要回滾。t2已經回滾,所以無需關心t2。t4未完成應該回滾。t1 t3均已提交,需要重做 2 如果系統故障發生在10之後,說明哪些事務需要重做,哪些事務需要回滾。t1需要重做...