mysql歷史資料 mysql 歷史資料表遷移方案

2021-10-17 12:57:04 字數 2797 閱讀 5380

當業務執行一段時間後,會出現有些表資料量很大,可能對系統效能產生不良的影響,常見的如訂單表、登入log表等,這些資料很有時效性,比如我們一般很少去查上個月的訂單,最多也就是報表統計會涉及到。

在我們的資料庫中,使用者登入表就是這種型別的表,一般而言,表中的資料是不可逆的,只有插入操作沒有刪除或者修改操作,表示在過去一段時間內完成的事實業務資料。比如登入表表示一段時間內使用者的登入資訊,登入一次遊戲就會在資料庫中記錄一條資料。

1、對於備份這類表的策略是:

第一次備份全表的資料匯入到備份表中,也就是全備。

以後每天只將增加的量自動遷移到備份表中,這裡通過自增列的值相比較得到增量,如第一次全備匯入備份表,這時自增列的最大值為max(idx),通過這個值到從庫中查詢,只要大於這個值的所有記錄形成增量。

備份完成後,分批刪除主庫上的資料。

2、下面是具體操作步驟:

第一次全備和恢復

select * from table into outfile "/data/backup/***x.txt"; --匯出備份資料

load data infile "/data/backup/ ***x.txt " into table bak_table; --在另外伺服器備份表中恢復

指令碼程式實現:拉取線上伺服器上的增量資料,然後匯入本伺服器,實現增量備份

1)需要在同一目錄下建立三個sql指令碼,如a.sql  b.sql  c.sql

a.sql: 拼接增量備份sql,形成備份語句

use report;

select concat('use report;select * from t_user_session where user_session_idx>',max(user_session_idx),' into outfile "/data/backup/incrementalbackup/t_user_session_ios1.txt";') from t_user_session;

b.sql:接受a.sql的輸出

c.sql: 負責恢復資料

use report;

load data infile '/data/backup/incrementalbackup/t_user_session_ios1.txt' into table t_user_session_ios1;

#!/bin/bash

/data/mysql/bin/mysql -h 127.0.0.1 -uroot -p'******' -n < /data/backup/scripts/a.sql > /data/backup/scripts/b.sql

3)loadlog2.sh:連線到線上伺服器,刪除以前備份檔案,並通過b.sql進行資料匯出,然後刪除本地伺服器上上次備份的檔案。

1 #!/bin/bash

3 ssh [email protected] "/data/backup/scripts/del_bak_file.sh"

5 /data/mysql/bin/mysql -uroot -p'*****' -h'1.1.1.1' < /data/backup/scripts/b.sql

7 rm -f /data/backup/incrementalbackup/*.txt

4)loadlog3.sh:將備份伺服器上匯出的資料檔案拷貝到本地伺服器

1 #!/bin/bash

2 scp [email protected]:/data/backup /*.txt /data/backup/

5)loadlog4.sh:載入資料到本地伺服器

1 #!/bin/bash

3 /data/mysql/bin/mysql -h 127.0.0.1 -uroot -p'*******' < /data/backup/scripts/c.sql

6)loadlogall.sh:用於統一執行loadlog1-4,並輸入日誌。

1 #!/bin/bash

3 echo '------start-loadlog.sh-----'>> /data/backup/scripts/logs/loadlog.log

5 date "+%y-%m-%d %h:%m:%s" >> /data/backup/scripts/logs/loadlog.log

6 /data/backup/scripts/loadlog.sh

8 echo '----end--loadlog.sh-----' >> /data/backup/scripts/logs/loadlog.log

10 /data/backup/scripts/loadlog2.sh

12 echo '----end---loadlog2.sh------' >> /data/backup/scripts/logs/loadlog.log

14 /data/backup/scripts/loadlog3.sh

16 echo '------end-loadlog3.sh------------' >> /data/backup/scripts/logs/loadlog.log

18 /data/backup/scripts/loadlog4.sh

20 echo '-----end-loadlog4.sh----------' >> /data/backup/scripts/logs/loadlog.log

7)將loadlogall.sh加入定時目錄,每隔1個小時拉取一次。

crontab -e

--編輯檔案      分 時 天 月 周 年 命令

到這裡備份就完成了,然後可以清理部分的歷史資料了,當然了,這裡幾個loadlog*.sh顯得有些繁瑣,這裡為了一步一步看得更清楚些,完全可以把這些整合到乙個shell指令碼裡。

未完待續。。。

mysql 刪除 zabbix歷史資料

zabbix伺服器報警 zabbix housekeeper processes more than 75 busy 原因分析說明 處理方法 vim etc zabbix zabbix server.conf housekeepingfrequency 12 原值是每一小時清理一次,建議改為12或2...

MySQL 用儲存過程刪除歷史資料

建立儲存過程 delimiter create procedure autodelete begin delete from amap log where date time date date sub now interval 30 day end delimiter 建立事件,定製每天執行aut...

歷史資料轉移

作用 歷史資料轉移 兩種方法 方法1.重建表 方法2.歷史資料匯入其他表 李海軍 2009.11.12 方法1.重建表 exec sp rename taga talkin record back taga talkin record back delafter3mon 修改表名 grant all...