下面講講關于MySQL5.6如何實現(xiàn)數(shù)據(jù)庫之間的相互遷移,文字的奧妙在于貼近主題相關。所以,閑話就不談了,我們直接看下文吧,相信看完MySQL5.6如何實現(xiàn)數(shù)據(jù)庫之間的相互遷移這篇文章你一定會有所受益。

創(chuàng)新互聯(lián)專注于網(wǎng)站設計制作、
網(wǎng)站設計、網(wǎng)頁設計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務”的宗旨,從客戶的利益和觀點出發(fā),讓客戶在網(wǎng)絡營銷中找到自己的駐足之地。尊重和關懷每一位客戶,用嚴謹?shù)膽B(tài)度對待客戶,用專業(yè)的服務創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。
###業(yè)務描述
- 公司內(nèi)部一個MySQL的master-slave架構上面跑有公司倆個項目的庫
- 倆個項目的有存在共用的table的情況
- 倆個項目都可以對共用的table進行讀寫操作
- 項目A的一個子業(yè)務在每天固定的時間段內(nèi)都會有高并發(fā)的寫操作,造成的后果就是在這個子業(yè)務工作的時間段內(nèi),倆個項目的讀寫操作會變得非常的慢,并且對外表現(xiàn)就是應用會很卡
- 項目A的子業(yè)務使用的庫a是獨立的,和另外一個項目已經(jīng)項目A下面的子業(yè)務并不存在關聯(lián)關系,是這個子業(yè)務獨立使用的
###需求:
- 將庫a獨立剝離出來
- 將業(yè)務A的關聯(lián)的數(shù)據(jù)庫剝離出來
- 倆個共用的業(yè)務的table暫時還沒有方案
###方案:
- 新建一套master-slave的主從環(huán)境使用5.6的最新版本
- 搭建級聯(lián)環(huán)境
- old master -> old slave -> new master -> old master
- xtrabackup物理備份
- pt-table-checksum 數(shù)據(jù)一致性校驗
- 項目A的子業(yè)務可以停掉一段時間,因為是階段性的應用
- 應用停掉的一段時間內(nèi),等待獨立的database沒有寫入.針對庫級別上面的表不做鎖操作
- 應用停掉一段時間之后直接修改子業(yè)務的MySQL的配置信息,將新的數(shù)據(jù)寫入new master
- 級聯(lián)組織的架構不做任何的修改,只是在業(yè)務層次做寫入的改動,這樣子造成的后果就是老的master-slave和新的master-slave針對這個獨立的database的數(shù)據(jù)是不一致的。
- 在這里需要考慮的問題是舊的master-slave上面會不會因為部分業(yè)務忘記修改或者其他的原因,未完全將業(yè)務的讀寫遷移到新的master-slave架構上面,這樣會造成數(shù)據(jù)的不一致,并且在databases中萬一存在自增的建的話,可能會有建值沖突的情況。
- 在完成業(yè)務MySQL的配置更改之后,四層的級聯(lián)架構保持原樣的目的是為了后續(xù)還需要繼續(xù)做業(yè)務剝離。
###環(huán)境:
- os system CentOS 6.9
- MySQL 5.6.38 最新版本
###步驟:
備份:
- 使用xtrabackup 2.4.4版本在old slave 上面進行物理備份,不在old master上面?zhèn)浞莸闹饕蛟谟跒榱吮苊鈧浞莸臅r候消耗系統(tǒng)資源和數(shù)據(jù)庫資源影響線上業(yè)務的正常使用,因為我們線上的業(yè)務所有的讀寫都是在主庫上面,并沒有做讀寫分離.所以針對于old slave的操作對于業(yè)務的影響幾乎可以忽略.
- 在備份的時候需要考慮一個因素就是你的備份所放置云服務器的磁盤空間是否足夠,我第一次備份的時候并沒有使用流備份,就直接備份到本地,在備份傳輸?shù)臅r候網(wǎng)絡IO和磁盤IO這塊需要花費更多的時間。
沒有使用流備份:備份77G,花費9分鐘
innobackupex --host=127.0.0.1 --user=root --password=xxxxx --port=3306 /path/BACKUP_DIR/
使用流備份進行壓縮備份:備份12G,花費40分鐘
innobackupex --host=127.0.0.1 --port=3306 --user=root --password=xxxxx --stream=tar /tmpdir | gzip > /path/BACKUP_DIR/back_file.tar.gz
- 因為是做4層的級聯(lián)復制,所以只需要備份old slave上面的binlog的file_name和file_position這倆個信息,根據(jù)這倆個信息change master創(chuàng)建主從復制.不過其中需要注意的文件有:
- xtrabackup_binlog_info:這個文件里面記錄是在xtrabackup備份完非innodb數(shù)據(jù)之后,執(zhí)行show master status獲取得到的信息,做主傳統(tǒng)主從復制的信息來自與這里.
- xtrabackup_info:這個文件里面記錄了備份完全,釋放MySQL資源之后記錄一些具體的詳細信息,在這里也存在備份的binlog的信息,這個信息的主要來源是從redo log里面獲取得到的,當這個信息和上面那個文件信息不一致的時候,主要是以這個文件為主,主要原因在與redo log里面記錄的binlog信息打上commit標簽之后就表明事務是已經(jīng)完成了的。
- 需要注意的參數(shù)有:
- --slave-info:在從庫上面執(zhí)行備份,獲取主庫上面的二進制日志信息,并且會生成xtrabackup_slave_info文件記錄這些信息
- --safe-slave-backup:和slave-info結合使用,主要是在發(fā)起備份的時候會暫停slave的sql_thread進程確保備份的時候沒有臨時表打開,保證數(shù)據(jù)的一致性
- --safe-slave-backup-timeout=SECONDS:指定safe-slave-backup應該等待多長時間
恢復:在新的master-slave上面?zhèn)浞輸?shù)據(jù)達到一致的狀態(tài),其目的是為了應用redo log:
innobackupex --defaults-file=/etc/my.cnf --apply-log /path/BACKUP_DIR
將數(shù)據(jù)恢復到datadir目錄下面:
innobackupex --defaults-file=/etc/my.cnf --copy-back /path/BACKUP_DIR
修改datadir的數(shù)據(jù)權限
chown mysql.mysql /datadir -R
- 搭建new master-slave:在搭建old slave -> new master架構之前先搭建new master-slave 架構
- 需要注意的是,在搭建之前需要注意事項有:
- GTID是否開啟,因為 old master-slave 是基于傳統(tǒng)復制,所以new的master-slave不能開啟GTID復制
- server-id不能一致
- binlog的日志格式,四個必須保持一致
- 在配置文件my.cnf 添加參數(shù) “replicate-ingore-db=mysql.* ” 的目的是為了不復制系統(tǒng)庫mysql的信息,目的是因為后續(xù)的用戶權限管理;并且5.6并不支持在線修改這些復制過濾,只能在配置文件里面修改之后重啟數(shù)據(jù)庫。
- 在new master-slave備份恢復之后,直接可以在new master上面show master status獲取binlog信息,根據(jù)這些信息做主從同步.
- old slave -> new master 搭建主從:從第一步備份獲取得到slave的info信息搭建主從
- 監(jiān)測主從是否搭建成功,在old slave -> new master -> new slave 執(zhí)行show slave status信息觀察
pt-table-checksum檢測數(shù)據(jù)的一致性
命令:
pt-table-checksum --replicate=percona.checksumss --nocheck-replication-filters --no-check-binlog-format h=x.x.x.x,u=rpl,p='xxxxx',P=3306 --databases-regex=database.* --recursion-method dsn=h=x.x.x.x,u=root,p='xxxxx',P=3306,D=zst_teach,t=dsns
- 注意:
- 命令第一個鏈接的主機是需要監(jiān)測的master-slave中master實例信息
- 命令中的dsn后續(xù)的鏈接信息是dsn存在信息的MySQL實例,這個dsn信息可以存放在master,也可以存放到第三方實例,這個時候pt-table-checksum執(zhí)行所在的云服務器需要有root用戶訪問zst_teach.dsns表信息的權限,即select的權限
- 命令在執(zhí)行的時候會在master上面產(chǎn)生percona.checksumss信息,其中percona庫是不會手動生成的,需要自己手動生成,但是checksums會自動生成,但是其中需要注意的是,由于是在master上面生成percona.checksumss信息表,所以rpl@command_host用戶需要有percona.checksums的select,insert,update,delete,super,process,lock tables,craete的權限,而且還必須有針對所有表的select,lock tables,super,process權限。
- 并且為了在slave進行檢測,檢測的用戶也必須要有所以表的select,super,lock tables,process的權限
- master:
grant update,delete,insert,super,process,lock tables,create on *.* 'user'@'command_host'
- slave:
grant select,process,lock tabes,super on *.* to 'user'@'master_host';
7.pt-table-sync數(shù)據(jù)同步(在master和slave都可以執(zhí)行)
pt-table-sync --print --sync-to-master h=slave_host,P=3306,u=repl,p='xxxxx' --database=DB_name --tables=table_name1,table_name2
--print 打印出在slave執(zhí)行的SQL
--sync-to-master 指定slave的IP地址,從show slave status獲取master的信息
對于以上MySQL5.6如何實現(xiàn)數(shù)據(jù)庫之間的相互遷移相關內(nèi)容,大家還有什么不明白的地方嗎?或者想要了解更多相關,可以繼續(xù)關注我們的行業(yè)資訊板塊。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)頁名稱:MySQL5.6如何實現(xiàn)數(shù)據(jù)庫之間的相互遷移-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://aaarwkj.com/article40/ihsho.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供Google、營銷型網(wǎng)站建設、域名注冊、外貿(mào)網(wǎng)站建設、標簽優(yōu)化、網(wǎng)站策劃
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源:
創(chuàng)新互聯(lián)