記錄一次pg整庫的數(shù)據(jù)庫遷移
遷庫注意的事項(概念性的)
1. 需要判斷是否能夠進行整庫遷移溶推。
2. 對線上程序的影響儿咱。
3. 遷庫要進行彩排(或者是預演)咧擂,這樣才對未知問題、消耗時間等有預期剂碴。
4. 對遷移方式進行綜合考慮
遷庫方式
使用navicat遷移
優(yōu)點:操作簡便阳柔、可視
缺點:
1.對于較大的庫遷移耗費時間過長
2.無主鍵的表無法對比其數(shù)據(jù)間的差異
3.對表數(shù)據(jù)的新增、修改舀患、刪除徽级,無法選擇某張表對比。只能整庫對比聊浅,才能發(fā)現(xiàn)哪個表存在數(shù)據(jù)差異餐抢。
4.遷移過程中,主表低匙、從表等遷移順序等原因旷痕,會造成遷移報錯。
5.遷移過程中人工操作的內(nèi)容太多
6.遷庫索引不是遷移的索引創(chuàng)建語句顽冶,而是遷移的索引數(shù)據(jù)欺抗,導致會很緩慢并且很多余。使用程序遷移
優(yōu)點:能夠快速的對比數(shù)據(jù)的差異强重,適用于很短的時間內(nèi)完成庫的遷移工作(仍需停服務)佩迟。
缺點:
1.需要進行開發(fā)
2.其他未知情形存在判斷不全的情況
3.要想停服務的時間短,需要遷兩次竿屹,一次遷移絕大部分报强,第二次遷移變更部分。
4.源庫的表拱燃,需要新增秉溉,修改,版本號等字段支持。主從方式遷移
優(yōu)點:簡單召嘶、方便父晶、高效
缺點:對新舊庫的數(shù)據(jù)庫版本,操作系統(tǒng)版本有限制要求弄跌。使用導入甲喝、導出的方式進行遷移
優(yōu)點:
1.快速、高效铛只、穩(wěn)定
2.如果其他遷移方式或多或少都不合適的話埠胖,那就采用這種方式。
缺點:
1.需要進行彩排淳玩,防止出現(xiàn)遷移過程中意外報錯的情況
2.遷移需要停應用服務
3.需要執(zhí)行相關命令
"導入直撤、導出” 方式的具體操作步驟 (概念性)
1.準備前工作:
準備好遷庫后需要部署的程序分支(含新的數(shù)據(jù)庫鏈接地址等)
確認新庫的磁盤是否足夠
2.遷移時工作:
導出時停服務(若不能停服務則掛出:系統(tǒng)維護中界面,需要kafka等消息隊列支持)
記錄報錯信息蜕着,進行單獨處理
確認將要進行導入操作的數(shù)據(jù)庫為主庫
3.遷移后工作:
抽查幾張表谋竖,確認數(shù)據(jù)條數(shù)是否一致
確認主從復制是否正常
確認pg高可用,主從復制承匣、回卷等數(shù)據(jù)庫各項設置是否正常
4.啟動應用:
啟動服務蓖乘,驗證程序操作數(shù)據(jù)庫情況是否正常
DCL語句
#創(chuàng)建用戶
create user opbizuser with password 'opbizuser@2111';
#創(chuàng)建數(shù)據(jù)庫賦予用戶
create DATABASE opbizbasedb2 ENCODING ='utf-8' TABLESPACE = pg_default owner opbizuser;
#將數(shù)據(jù)庫的權限賦予用戶
GRANT ALL ON DATABASE opbizbasedb2 TO opbizuser;
導入、導出及傳輸(庫韧骗,用戶自建)
1.登錄舊庫主庫的195
su - postgres
2-1.導出
pg_dump -h 10.13.198.19 -p 5432 -d postgres -Fc -v -f /backup/20211029_db_hk.bak
2-2.輸入源庫密碼
pg@123456
3.遠程傳輸(此次此方式不行驱敲,需要源端密碼,源端密碼不知道)
scp -r /backup/20211028_db_hk.bak root@10.13.58.19:/pgdb/1028
4.導入數(shù)據(jù)庫
pg_restore -p 10001 -d opbizbasedb2 -j 5 /pgdb/1029/20211029_db_hk.bak
導入宽闲、導出及傳輸(庫,用戶整體導)
注意:
1.自建的隱式轉(zhuǎn)換需要單獨導
2.用戶需要pg_dumpall單獨導
3.導出用戶權限
pg_dumpall -g -h 10.13.198.19 -p 5432 -U postgres
4.退出握牧,進行操作系統(tǒng)容诬,執(zhí)行導出(建目錄,為目錄授權)
pg_dump -h 10.13.198.19 -p 5432 -d postgres -Fc -v -f /backup/20211028_db_hk.bak
如果 不想看導出過程 把-v去掉
數(shù)據(jù)庫表行數(shù)統(tǒng)計sql
- 表中的所有記錄(有系統(tǒng)表)
select relname as TABLE_NAME, reltuples as rowCounts from pg_class where relkind = 'r' order by rowCounts desc
- 表中的所有記錄(無系統(tǒng)表)
select relname as TABLE_NAME, reltuples as rowCounts from pg_class where relkind = 'r' and relnamespace = (select oid from pg_namespace where nspname='public') order by rowCounts desc;
其他相關命令
1. 數(shù)據(jù)庫主從查看
ps aux | grep postgres
出現(xiàn):wal receiver process 為從服務器
2. 查看數(shù)據(jù)庫的字符版本信息
su - postgres
psql \l+ 查看數(shù)據(jù)庫的基本信息沿腰,9.6.19
刪掉測試用戶等信息的相關sql
select pid,datname,usename,application_name,client_hostname,backend_start,state from pg_stat_activity
where datname = '要刪除的數(shù)據(jù)庫名字';
drop owned by opbizbaseuser1 cascade;
drop user opbizbaseuser1 cascade;