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需要重做...