亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > 文庫 > 正文

MariaDB10.3 系統版本表 有效預防數據丟失

2024-09-07 22:13:01
字體:
來源:轉載
供稿:網友
  系統版本表是SQL:2011標準中首次引入的功能。系統版本表存儲所有更改的歷史數據,而不僅僅是當前時刻有效的數據。舉個例子,同一行數據一秒內被更改了10次,那么就會保存10份不同時間的版本數據。就像《源代碼》電影里的平行世界理論一樣,你可以退回任意時間里。從而有效保障你的數據是安全的,DBA手抖或程序BUG引起的數據丟失,在MariaDB10.3里已成為過去。
 
  一、創建系統版本表
  例子:
 
  CREATE TABLE `t1` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(100) DEFAULT NULL,
    `ts` timestamp(6) GENERATED ALWAYS AS ROW START,
    `te` timestamp(6) GENERATED ALWAYS AS ROW END,
    PRIMARY KEY (`id`,`te`),
    PERIOD FOR SYSTEM_TIME (`ts`, `te`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 WITH SYSTEM VERSIONING;
  注意看紅色字體,這就是新增加的語法,字段ts和te是數據變化的起止時間和結束時間。
 
  另外用ALTER TABLE更改表結構,語法如下:
 
  ALTER TABLE t1 ADD COLUMN ts TIMESTAMP(6) GENERATED ALWAYS AS ROW START,
                ADD COLUMN te TIMESTAMP(6) GENERATED ALWAYS AS ROW END,
                ADD PERIOD FOR SYSTEM_TIME(ts, te),
                ADD SYSTEM VERSIONING;
  二、查詢歷史數據
  這里我們做一個實驗,首先要插入1條數據, 
 
  接著把姓名為“張三”,改成“李四”(誤更改數據)
 
  現在數據已經成功變更,那么我想查看歷史數據怎么辦呢?非常簡單,一條命令搞定。
 
  語法一:查詢一小時內的歷史數據。
  SELECT * FROM t FOR SYSTEM_TIME BETWEEN (NOW() - INTERVAL 1 HOUR) AND NOW();
  HOUR:小時
  MINUTE:分鐘
  DAY:天
  MONTH:月
  YEAR:年
 
  語法二:查詢一段時間內的歷史數據
  SELECT * FROM t1 FOR SYSTEM_TIME FROM '2018-05-15 00:00:00' TO '2018-05-15 14:00:00';
 
  語法三:查詢所有歷史數據
  SELECT * FROM t1 FOR SYSTEM_TIME ALL;
 
  三、恢復歷史數據
  現在我們已經找到了歷史數據“張三”,只需把它導出來做恢復即可。
 
  SELECT id,name FROM t1 FOR SYSTEM_TIME ALL where id = 1 AND name =
  '張三' into outfile '/tmp/t1.sql' /
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"';
  FIELDS TERMINATED BY ',' --- 字段的分隔符
  OPTIONALLY ENCLOSED BY '"' --- 字符串帶雙引號
 
  導入恢復
 
  load data infile '/tmp/t1.sql' replace into table t1 /
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' /
  (id,name);
 
  非常簡單的恢復完數據,此方法比之前用mysqlbinlog或自研腳本等工具做閃回效率高得多。
 
  四、單獨存儲歷史數據
  當歷史數據與當前數據一起存儲時,勢必會增加表的大小,且當前的數據查詢:表掃描和索引搜索,將會花費更多的時間,因為需要跳過歷史數據。那么我們可以將通過表分區將其分開、單獨存儲,以減少版本控制的開銷。
  接上面的例子,執行下面的語句:
 
  alter table t1
    PARTITION BY SYSTEM_TIME INTERVAL 1 MONTH (
      PARTITION p0 HISTORY,
      PARTITION p1 HISTORY,
      PARTITION p2 HISTORY,
      PARTITION p3 HISTORY,
      PARTITION p4 HISTORY,
      PARTITION p5 HISTORY,
      PARTITION p6 HISTORY,
      PARTITION pcur CURRENT
    );
  意思為:按照月份分割歷史數據,今天至一個月后(2018年6月15日)的歷史數據放入p0分區,次月的歷史數據放入p1分區,依次類推至(2018年12月15日)存p6分區。當前數據存儲在pcur分區里。
 
  可以通過數據字典表,來查看每個分區表的數據輪詢時間狀態信息。
 
  SELECT PARTITION_DESCRIPTION,TABLE_ROWS FROM
  `information_schema`.`PARTITIONS` WHERE table_schema='hcy' AND
  table_name='t1';
 
  五、刪除舊的歷史數據
  系統版本表存儲了所有的歷史數據,隨著時間的推移,歷史版本數據會變得越來越大,那么我們就可以將其最老的歷史數據刪除。
  例:將p0分區刪除
  ALTER TABLE t1 DROP PARTITION p0;
 
  六、正確使用姿勢
  通過上述介紹,我們了解了系統版本表的原理。在高并發寫入場景下,勢必會帶來性能上的損失,所以要用正確的姿勢開啟該功能。
 
  例:主庫是MySQL 5.6或者MariaDB 10.0/1/2版本,搭建一個新從庫MariaDB 10.3,在該從庫上轉換為系統版本控制表。這樣主庫上誤刪或誤篡改數據,可以在從庫上通過版本控制找回。
 
  注:主庫是低版本,從庫是高版本,是可以向前兼容binlog格式的。
 
  七、注意事項
  1、參數system_versioning_alter_history要設置為KEEP(在my.cnf配置文件里寫死),否則默認不能執行DDL修改表結構操作。
  set global system_versioning_alter_history = 'KEEP';
 
  注:增加字段時,要加上after關鍵字,否則會在te字段后面,造成同步失敗。例:
  alter table t1 add column address varchar(500) after name;
 
  2、mysqldump工具不會導出歷史數據,所以在做備份時,可以通過Percona XtraBackup熱備份工具來備份物理文件。
 
  3、搭建從庫時,如果你用mysqldump工具,要先導出表結構文件,再導出數據。
  1)只導出表結構:
  # mysqldump -S /tmp/mysql3306.sock -uroot -p123456 --single-transaction --compact -c -d -q -B test > ./test_schema.sql
 
  導入完表結構后,批量執行DDL轉換系統版本表,腳本如下(附件里點擊下載):
 
  # cat convert.php
  <?php
 
  $conn=mysqli_connect("10.10.100.11","admin","123456","test","3306") or die("error connecting");
  mysqli_query($conn,"SET NAMES utf8");
 
  $table = "show tables";
  $result1 = mysqli_query($conn,$table);
  while($row = mysqli_fetch_array($result1)){
      $table_name=$row[0];
      echo "$table_name 表正在進行轉換系統版本表。。。".PHP_EOL;
      $convert_table="
  ALTER TABLE {$table_name} ADD COLUMN ts TIMESTAMP(6) GENERATED ALWAYS AS ROW START,
                ADD COLUMN te TIMESTAMP(6) GENERATED ALWAYS AS ROW END,
                ADD PERIOD FOR SYSTEM_TIME(ts, te),
                ADD SYSTEM VERSIONING";
      $result2=mysqli_query($conn,$convert_table);
      if($result2){
              echo '更改表結構成功.'.PHP_EOL;
             echo ''.PHP_EOL;
      }
      else{
              echo '更改表結構失敗.'.PHP_EOL;
             echo ''.PHP_EOL;
      }
  }
 
  mysqli_close($conn);
 
  ?>
  注:先安裝php-mysql驅動
  #yum install php php-mysql -y
  #php convert.php
 
  2)只導出數據:
 
  # mysqldump -S /tmp/mysql3306.sock -uroot -p123456 --single-transaction
  --master-data=2 --compact -c -q -t -B test > test_data.sql

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产一区二区三区久久久| 91亚洲人电影| 国产精品欧美日韩久久| 欧美高清视频在线观看| 亚洲va码欧洲m码| 久久久久久久久91| 欧美色videos| 欧美一级片在线播放| 亚洲人成亚洲人成在线观看| 精品久久久久久中文字幕一区奶水| 国产一区深夜福利| 国产精品视频自拍| 国产精品欧美一区二区三区奶水| 91麻豆桃色免费看| 久久精品久久久久久国产 免费| 国产成人精品在线| 欧美视频裸体精品| 久久天天躁狠狠躁夜夜av| 国产精品美女久久| 亚洲一区二区三区乱码aⅴ| 一区二区三区四区精品| 欧美日韩国产综合视频在线观看中文| 成人中心免费视频| 久久精品国产欧美亚洲人人爽| 韩国视频理论视频久久| 欧美日韩在线另类| 亚洲国产精品va在线看黑人动漫| 大量国产精品视频| 国产精品人成电影在线观看| 国产精品美女www| 国产精品网站视频| 97免费视频在线播放| 中文字幕日韩欧美精品在线观看| 亚洲成人黄色网| 欧美一区二区三区精品电影| 日韩欧美精品在线观看| 国产精品第10页| 国产啪精品视频| 成人国产精品日本在线| 亚洲色图35p| 欧美激情视频网| 亚洲精品国产美女| 久久久久免费视频| 色小说视频一区| 青青草精品毛片| 九九视频直播综合网| 92版电视剧仙鹤神针在线观看| 欧美视频专区一二在线观看| 日韩电影在线观看中文字幕| 国产婷婷色综合av蜜臀av| 国产区亚洲区欧美区| 97国产精品人人爽人人做| 成人妇女淫片aaaa视频| 日韩精品中文字幕久久臀| 日本不卡视频在线播放| 久久久国产一区| 岛国av一区二区在线在线观看| 久久av.com| 国产午夜精品全部视频播放| 日韩激情av在线播放| 高清在线视频日韩欧美| 日韩一区二区三区在线播放| 国产欧美日韩最新| 亚洲精品国产精品久久清纯直播| 欧美亚洲一区在线| 日韩精品高清在线观看| 日韩欧美国产免费播放| 午夜精品久久久久久99热| 亚洲精品一区中文| 91午夜在线播放| 精品国产一区二区三区久久| 国产丝袜一区二区| 欧美老少配视频| 91精品91久久久久久| 色悠久久久久综合先锋影音下载| 在线精品国产成人综合| 狠狠操狠狠色综合网| 久久免费精品日本久久中文字幕| 欧美性xxxx在线播放| 亚洲精品福利免费在线观看| 欧美性资源免费| 亚洲综合中文字幕68页| 欧美在线一级va免费观看| 亚洲人高潮女人毛茸茸| 日韩成人av在线| 亚洲国产成人精品女人久久久| 久久久久久久999精品视频| 色无极影院亚洲| 国产亚洲欧洲高清| 国内伊人久久久久久网站视频| 久久在精品线影院精品国产| 欧美激情视频网址| 91精品在线观看视频| 狠狠做深爱婷婷久久综合一区| 欧美精品性视频| 亚洲xxxxx| 国产精品视频在线播放| 日韩成人在线免费观看| 国产欧美在线看| 日韩视频在线观看免费| 久久中文字幕在线| 日韩国产精品一区| 欧美日韩国产综合视频在线观看中文| 黄色一区二区三区| 91久久夜色精品国产网站| 久久成人综合视频| 色999日韩欧美国产| 在线亚洲午夜片av大片| 午夜精品久久久久久久99热浪潮| 亚洲欧美日韩国产精品| 国产精品第一区| 国产在线播放不卡| 久久国产精品免费视频| 精品偷拍一区二区三区在线看| 欧美日韩中国免费专区在线看| 国产视频亚洲精品| 在线看日韩欧美| www.欧美精品一二三区| 欧美日韩国产精品一区二区三区四区| 欧美激情影音先锋| 欧美激情在线观看视频| 亚洲最新av在线网站| 国产精品久久久久久久一区探花| 疯狂做受xxxx高潮欧美日本| 尤物九九久久国产精品的特点| 国产一区二区精品丝袜| 亚洲国产成人精品女人久久久| 亚洲日本成人女熟在线观看| 国产激情综合五月久久| 91色在线观看| 欧美激情国产日韩精品一区18| 欧美日韩国产成人在线观看| 国产日韩欧美中文| 91精品国产91久久久| 欧美激情精品久久久久久久变态| 久久久精品2019中文字幕神马| 亚洲激情在线观看视频免费| 久久久久久亚洲精品不卡| 97精品国产91久久久久久| 国产欧美在线视频| 国产精品久久久91| xxxxxxxxx欧美| 精品中文字幕在线2019| 国产亚洲激情视频在线| 正在播放国产一区| 欧美小视频在线| 欧洲亚洲在线视频| 欧美性猛交xxxx偷拍洗澡| 亚洲有声小说3d| 亚洲自拍小视频免费观看| 97国产精品免费视频| 久久免费高清视频| 日韩av在线免费观看一区| 国语自产精品视频在免费| 欧美日本高清一区| 色777狠狠综合秋免鲁丝| 国产主播在线一区| 亚洲人成电影网站| 国产视频精品一区二区三区| 91精品国产综合久久香蕉| 91久久国产综合久久91精品网站| 国产精品精品视频| 国产成人97精品免费看片| 日韩有码在线电影|