mysql表自動同步 MySql之自動同步表結構

2021-10-18 11:56:47 字數 2101 閱讀 6421

#mysql之自動同步表結構 ##開發痛點

在開發過程中,由於頻繁的修改資料庫的字段,導致rd和qa環境的資料庫表經常不一致。

而由於這些修改資料庫的操作可能由多個rd操作,很難一次性收集全。人手工去和qa環境對字段又特別繁瑣,容易遺漏。 ##解決之道

於是筆者就寫了乙個能夠自動比較兩個資料庫的表結構,並生成alter語句的程式。同時還可以進行配置從而自動這行這些alter語句。詳情見github ##原理 ###同步新增的表 如果rd環境新增的表,而qa環境沒有,此程式可以直接輸出create table語句。原理如下:

用到的sql主要有:

show table from rd_db;

show create table added_table_name;

###同步表結構 如果rd表結構有改動,而qa環境沒有,此程式可以直接輸出alter語句,原理如下:

用到的sql有:

select

column_name,column_type,is_nullable,column_default,column_comment,extra

from

information_schema.columns

where

table_schema='rd_db'

and table_name = 'rd_table';

比較表結構的**:

for (column column : sourcetable.getcolumns().values()) else else {

// 檢查對應的source 和 target的屬性

string sql =

"alter table " + target.getschema() + "." + targettable.gettablename() + " change " + column

.getname() + " ";

column sourcecolumn = column;

column targetcolumn = targettable.getcolumns().get(sourcecolumn.getname());

// 比較兩者字段,如果返回null,表明一致

string sqlextend = comparesinglecolumn(sourcecolumn, targetcolumn);

if (sqlextend != null) {

changesql.add(sql + sqlextend+";");

after = column.getname();

###同步索引結構 如果rd表的索引有改變,而qa環境沒有,此程式可以直接輸出修改索引語句。原理和上面類似,在此不再贅述。 ###配置

sourcehost=127.0.0.1:3306

sourceuser=root

sourcepass=123123123

sourceschema=mystique_db

sourcecharset=utf8

targethost=127.0.0.1:3306

targetuser=root

targetpass=123123123

targetschema=mystique_test

targetcharset=utf8

autoexecute=yes //此處表明自動同步

###執行 按照上面的模板進行配置 用ide開啟,找到

alchemystar.runner.shellrunner

執行其中的main方法即可 ###生成效果展示

alter table mystique_test.t_test_3 change id id bigint(20) not null auto_increment comment ''

alter table mystique_test.t_test_3 add index (name)

alter table mystique_test.t_test_3 drop index name_id

alter table mystique_test.t_test_3 add id_2 varchar(50) null default '' comment '' after name

mysql 同步 表 同步mysql資料庫中的表

由於django的專案不是新建的,之前的之行過 python manage.py makemigrations python manage.py migrate 的語句。1 所以當我再次再mysql資料庫中建立新的資料庫時,執行上面的兩句時,並沒有什麼卵用!只建立了下面幾個 blog blog bl...

Mysql只同步某些表

只同步bbp庫的t csp表 replicate do table bbp.t csp同樣要同步多個表,則需要指定多個replicate do table,如同步t csp和md goods type表 replicate do table bbp.t csp replicate do table ...

mysql同步資料 MySQL同步資料

mysql dump工具用於匯出現有資料,匯出結果為sql檔案 目前dump工具支援整庫dump以及單錶dump。下面為單錶dump操作過程 1 選擇匯出目標目錄 確保該目錄有足夠的儲存空間。mkdir opt bas backup 2 使用mysqldump命令匯出表資料 mysqldump u ...