成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

挺帶勁!這款開源數據庫遷移工具超牛

運維 數據庫運維
有一款好的遷移工具是可以大大提高工作效率,還能很大程度上避免手動操作帶來的失誤或數據損壞、丟失的風險。

 [[409779]]

遷移數據庫可以說是日常工作中的家常便飯,不過,如果一不小心把數據庫搞炸了,那就麻煩大了(搞不好就得背鍋了)。隨著數據量的逐漸增加、表結構的改動,數據庫各類遷移、升級是勢在必行。所以,有一款好的遷移工具是可以大大提高工作效率,還能很大程度上避免手動操作帶來的失誤或數據損壞、丟失的風險。

今天,民工哥就給大家介紹一款這樣的數據庫遷移神器。

Flyway簡介

flyway 是一個敏捷工具,用于數據庫的移植。采用 Java 開發,支持所有兼容 JDBC 的數據庫。主要用于在你的應用版本不斷升級的同時,升級你的數據庫結構和里面的數據。

Flyway 特點

  • 簡單:使用和學習簡單,通過不同版本的SQL腳本實現數據庫遷移。

  • 專業:專注于數據庫遷移功能,你無需擔心有任何問題。

  • 功能強大:支持多種數據庫,擁有大量的第三方工具,支持CI/DI。

工作平臺

Windows,macOS,Linux,Docker,Java 和 Android

支持的構建工具

Maven 和 Gradle

支持的數據庫

Oracle、SQL Server、DB2、MySQL、Aurora MySQL、MariaDB、Percona XtraDB群集、PostgreSQL、Aurora PostgreSQL、Redshift、CockroachDB、SAP HANA、Sybase ASE、Informix、H2、HSQLDB、Derby、SQLite、Firebird

Flyway 工作原理

一開始你向Flyway指向一個空數據庫時: 

 

 

 

 

 它就會去查找schema歷史表,如果此時數據庫是空的,FlyWAY會自己創建一張歷史表,然后現在就有了一個僅包含空表flyway_schema_history(默認)的數據庫。 

 

 

 

flyway_schema_history 這個表用來跟蹤數據庫的狀態。

數據庫的遷移是按版本號來順序執行的: 

 

 

 

每次遷移被執行后 schema_history表會依此更新記錄 

 

 

 

 

 后面如果再次遷移的話,Flyway會再次掃描應用的文件系統和類路徑、歷史表檢查,如果版本號低于或等于當前版本號,則忽略遷移操作。

增量遷移 

 

 

 

仍然按版本號進行: 

 

 

 

schema_history歷史表會依此更新記錄 

 

 

 

整個過程就是這樣的!每次需要修改數據庫時,無論是結構 (DDL) 還是參考數據 (DML),只需 創建一個版本號高于當前版本號 的新遷移。下次 Flyway 啟動時,它會找到它并相應地升級數據庫。

參考地址:https://flywaydb.org/documentation/getstarted/how

下載

下載地址:https://flywaydb.org/download 

 

 

 

 

 有免費與收費版本可供選擇,我們當然選擇最好用的免費版本了,哈哈哈哈。。。。

Linux系統

  1. wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/7.11.0/flyway-commandline-7.11.0-linux-x64.tar.gz | tar xvz && ln -s `pwd`/flyway-7.11.0/flyway /usr/local/bin  

Docker

  1. sh -c 'echo "docker run --rm flyway/flyway:7.11.0 $*" > /usr/local/bin/flyway && chmod +x /usr/local/bin/flyway' 

目錄結構

  1. [root@centos7 ~]# tree -L 1 ./flyway-7.11.0 
  2. ./flyway-7.11.0 
  3. ├── conf       #配置文件 
  4. ├── drivers    #JDBD驅動程序 
  5. ├── flyway     #macOS/Linux 可執行文件 
  6. ├── flyway.cmd #Windows 可執行文件 
  7. ├── jars       #基于 Java 的遷移(作為 jars) 
  8. ├── jre 
  9. ├── lib 
  10. ├── licenses 
  11. ├── README.txt 
  12. └── sql       #SQL 遷移 
  13.  
  14. 7 directories, 3 files 

使用

使用之前需要了解的一些概念

  • 版本:對數據庫的每一次變更可稱為一個版本

  • 遷移:Flyway把數據庫結構從一個版本更新到另一個版本叫做遷移

  • 可用的遷移:Flyway的文件系統識別出來的遷移版本

  • 已經應用的遷移:Flyway已經對數據庫執行過的遷移

命令行使用

  1. > flyway [options] command 

flyway主要基于6種基本命令

  1. migrate  #遷移數據庫 
  2. clean    #清除所有配置 
  3. info     #打印遷移相關的詳細信息與狀態信息 
  4. validate #驗證遷移的可用性 
  5. baseline #為現有數據庫創建基準版本,高于基準版本的才會被執行遷移動作 
  6. repair   #修改 schema history 表 

修改配置文件

  1. [root@centos7 ~]# cd ./flyway-7.11.0/conf/ 
  2. [root@centos7 conf]# ll 
  3. total 24 
  4. -rw-r--r-- 1 root root 22943 Jul  1  2021 flyway.conf 
  5. [root@centos7 conf]# vim flyway.conf 
  6. flyway.url=jdbc:mysql://localhost:3306/mingongge?useUnicode=true 
  7. flyway.user=root 
  8. flyway.password=123456 

準備一個測試用的sql腳本

這里還得提一下命令規范的問題,否則后續的sql腳本無法執行。 

 

 

 

  • Prefix(前綴):V 用于數據庫遷移的版本號,U 用于數據庫回滾的版本號,R 表示可重復執行的數據庫遷移

  • Version(版本號):Flyway會按照版本號的大小順序來執行數據庫遷移腳本

  • Separator(分隔符):使用 雙下劃線 分隔符

  • Description(描述):用于描述遷移腳本的說明性文字

  • Suffix(后綴):.sql文件

在sql目錄下面添加一個測試sql腳本,這里是一個簡單的創建表的語句。

  1. [root@centos7 sql]# pwd 
  2. /root/flyway-7.11.0/sql 
  3. [root@centos7 sql]# cat V1.0__Create_test_table.sql 
  4. CREATE TABLE `test_table` 
  5.   `id`          bigint(10)   NOT NULL, 
  6.   `username`    varchar(64)  DEFAULT NULL, 
  7.   `password`    varchar(64)  DEFAULT NULL, 
  8.   PRIMARY KEY (`id`) 
  9. ) ENGINE = InnoDB 
  10.   DEFAULT CHARSET = utf8 COMMENT ='測試表'

開始遷移

  1. [root@centos7 ~]# flyway migrate 
  2. Flyway Teams Edition 7.11.0 by Redgate 
  3. Database: jdbc:mysql://localhost:3306/mingongge (MySQL 5.7) 
  4. ---------------------------------------- 
  5. Flyway Teams features are enabled by default for the next 27 days. Learn more at https://flywaydb.org/?ref=v7.11.0_teams 
  6. ---------------------------------------- 
  7. Successfully validated 0 migrations (execution time 00:00.028s) 
  8. WARNING: No migrations found. Are your locations set up correctly? 
  9. ERROR: Found non-empty schema(s) `mingongge` but no schema history table. Use baseline() or set baselineOnMigrate to true to initialize the schema history table. 

最后的提示很明白,需要創建schema history table,那么好吧,創建一個唄。

  1. [root@centos7 ~]# flyway baseline 
  2. Flyway Teams Edition 7.11.0 by Redgate 
  3. Database: jdbc:mysql://localhost:3306/mingongge (MySQL 5.7) 
  4. ---------------------------------------- 
  5. Flyway Teams features are enabled by default for the next 27 days. Learn more at https://flywaydb.org/?ref=v7.11.0_teams 
  6. ---------------------------------------- 
  7. Creating Schema History table `mingongge`.`flyway_schema_history` with baseline ... 
  8. Successfully baselined schema with version: 1 

再次執行

  1. [root@centos7 sql]# flyway migrate 
  2. Flyway Teams Edition 7.11.0 by Redgate 
  3. Database: jdbc:mysql://localhost:3306/mingongge (MySQL 5.7) 
  4. ---------------------------------------- 
  5. Flyway Teams features are enabled by default for the next 27 days. Learn more at https://flywaydb.org/?ref=v7.11.0_teams 
  6. ---------------------------------------- 
  7. Successfully validated 1 migration (execution time 00:00.225s) 
  8. Migrating schema `mingongge` to version "1.0 - Create test table" 
  9. Successfully applied 1 migration to schema `mingongge`, now at version v1.0 (execution time 00:00.356s) 

 

 

 

 

 

 增加數據進行遷移測試。還是在sql目錄下創建腳本V1.0.1__add_data.sql

  1. [root@centos7 ~]# cat flyway-7.11.0/sql/V1.0.1__add_data.sql  
  2. INSERT INTO test_table (id,username, PASSWORD) 
  3. VALUES ('001','test1''123456'); 
  4. INSERT INTO test_table (id,username, PASSWORD) 
  5. VALUES ('002','test2''123456'); 

這個時候查看狀態信息,可以發現如下: 

 

 

 

執行遷移動作

  1. [root@centos7 ~]# flyway migrate 
  2. Flyway Teams Edition 7.11.0 by Redgate 
  3. Database: jdbc:mysql://localhost:3306/mingongge (MySQL 5.7) 
  4. ---------------------------------------- 
  5. Flyway Teams features are enabled by default for the next 27 days. Learn more at https://flywaydb.org/?ref=v7.11.0_teams 
  6. ---------------------------------------- 
  7. Successfully validated 2 migrations (execution time 00:00.042s) 
  8. Current version of schema `mingongge`: 1.0 
  9. Migrating schema `mingongge` to version "1.0.1 - add data" 
  10. Successfully applied 1 migration to schema `mingongge`, now at version v1.0.1 (execution time 00:00.170s) 

查看狀態信息 

 

 

 

回滾

先創建一個回滾腳本,注意命名規范,這個會讓很多人踩坑的。。。。切記!!!!

  1. [root@centos7 sql]# cat U1.0.1__delete_data.sql  
  2. DELETE FROM test_table; 

注意 :這里的回滾,一定是回滾到已存在的版本號,所以命名時注意版本號這塊,如果這里寫成1.0,就會出現報錯:

  1. ERROR: Unable to undo migration to version 1.0.1 as no corresponding undo migration has been found. 

執行回滾

  1. [root@centos7 ~]# flyway undo 
  2. Flyway Teams Edition 7.11.0 by Redgate 
  3. Database: jdbc:mysql://localhost:3306/mingongge (MySQL 5.7) 
  4. ---------------------------------------- 
  5. Flyway Teams features are enabled by default for the next 27 days. Learn more at https://flywaydb.org/?ref=v7.11.0_teams 
  6. ---------------------------------------- 
  7. Current version of schema `mingongge`: 1.0.1 
  8. Undoing migration of schema `mingongge` to version 1.0.1 - delete data 
  9. Successfully undid 1 migration to schema `mingongge`, now at version v1.0 (execution time 00:00.256s) 

查看狀態 

 

 

 

 

 從上圖中也可以看出V1.0.1這個版本的腳本現處于Pending狀態。

其它集成

Flyway也提供了Maven插件,也可以在Maven中使用這個工具,添加maven依賴,在pom.xml文件中配置連接數據的信息。

  1. <!--引入flyway插件--> 
  2. <plugin> 
  3.     <groupId>org.flywaydb</groupId> 
  4.     <artifactId>flyway-maven-plugin</artifactId> 
  5.     <version>7.11.0</version> 
  6.     <configuration> 
  7.         <url>jdbc:mysql://localhost:3306/mingongge</url> 
  8.         <user>root</user> 
  9.         <password>root</password> 
  10.     </configuration> 
  11.     <dependencies> 
  12.         <dependency> 
  13.             <groupId>mysql</groupId> 
  14.             <artifactId>mysql-connector-java</artifactId> 
  15.             <version>8.0.15</version> 
  16.         </dependency> 
  17.     </dependencies> 
  18. </plugin> 

然寫同上面的方法一樣寫腳本,放在resources/db/migration目錄下。打開idea控制臺,輸入mvn flyway:migrate,出現BUILD SUCCESS即執行成功。 

 

 

 

 

 詳細的配置及用法請參閱官方手冊:https://flywaydb.org/documentation/usage/maven/

更多更詳細的使用指南大家有興趣的可以參閱官方文檔:https://flywaydb.org/documentation/

 

責任編輯:張燕妮 來源: 民工哥技術之路
相關推薦

2012-12-19 13:06:31

MySQL

2022-02-25 15:06:53

PowerDesig開源工具

2019-01-25 19:19:28

數據工具互聯網

2022-06-17 10:27:25

Navicat開源數據庫管理工具

2023-10-19 09:00:00

數據庫GitOps

2023-04-18 18:22:31

開源工具數據庫

2021-10-27 10:07:59

GitHub代碼開發者

2011-09-23 09:09:38

數據庫遷移

2020-08-13 07:42:15

數據庫Flyway代碼

2022-07-27 08:12:44

SchemaHero云原生

2022-05-23 09:03:35

Heighliner開發者工具

2020-07-17 08:20:27

數據庫開源技術

2021-01-10 15:29:53

開源數據庫數據庫

2021-11-15 08:24:17

數據庫database同步工具

2021-05-17 08:00:00

數據庫工具Flyway

2021-09-03 09:57:13

開源技術 項目

2009-03-19 09:44:07

SQL Server數據庫遷移數據庫

2011-04-29 14:30:23

2011-05-11 10:26:36

MySQL數據庫無縫遷移

2019-08-13 15:52:34

數據庫同步遷移
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一二三 | 黄色片视频网站 | 日韩久久中文字幕 | 在线一区二区三区 | 精品九九九 | 国产精品爱久久久久久久 | 蜜桃视频麻豆 | 国内自拍偷拍一区 | 亚洲综合婷婷 | 亚洲综合无码一区二区 | 成人超碰 | 中文字幕在线欧美 | 欧美精品网站 | www..99re| 怡红院成人在线视频 | 风间由美一区二区三区在线观看 | 99reav| 欧美日韩在线国产 | 黄色在线免费观看 | 波多野结衣中文字幕一区二区三区 | 中文字幕一区在线观看视频 | 日本一二三区高清 | 女人毛片a毛片久久人人 | 一级免费看 | 欧美a级网站 | 精品视频一区二区三区在线观看 | 亚洲精品白浆高清久久久久久 | 美女天天操 | 天天操天天干天天爽 | 亚洲一区二区三区四区五区中文 | 精品国产乱码久久久久久蜜臀 | 久久三区| 久久久久免费精品国产 | 国产性色视频 | 国产探花在线精品一区二区 | 国产乱码精品一区二区三区五月婷 | 久久国产亚洲 | 成人av片在线观看 | 情侣av| 亚洲精品天堂 | 日本在线免费视频 |