centos7恢復mysql數據庫_MySQL數據庫升級遷移填坑記

原庫:*.*.101.73/74 ???

?? 系統環境: Suse 12.4

?? MySQL: 5.7.29

新庫:*.*.110.46/47

?? 系統環境:CentOS7.7 64位

?? MySQL版本: 5.7.30

[一、數據庫升級遷移場景]

因業務側在*.*.101.73/74 mysql數據庫服務器上部署了java應用程序、Hadoop+Hbase數據庫等大數據環境,導致主機內存突然暴增告急,經雙方排查,發現數據庫進程本身才占用內存8.5%,大部分都是由應用緩存占用了內存。經與局方及業務側溝通,局方敦促業務側將數據庫服務器從73/74服務器遷移到*.*.110.46/47服務器上,我方負責實施數據庫的遷移操作。

[二、遷移采坑問題表現]

本次遷移使用的MySQL自帶的備份工具mysqldump從原庫雙主(*.*.101.73/74)導出數據,通過nfs共享文件系統上傳到資源池新庫雙主(*.*.110.46/47)。

在資源池新庫分別將73、74數據庫的備份文件導入 46、47新庫,并啟動雙主復制進程:

mysql> change master to master_host='*.*.110.46',master_user='repl',master_password='xxxxxx',master_port=3306,master_auto_position=1;

結果報錯如下:

ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

[三、遷移采坑問題分析過程]

從報錯信息來看,起初以為是執行復制的語句重復制賬號信息有誤,然后核對了repl賬號的口令是正確的,并查看了復制賬號repl的權限信息:

mysql>show grants for ‘repl’@’*.*.110.%’;

結果顯示沒有repl用戶的權限信息記錄。接著查看系統表user中數據信息,竟然沒有導入數據前創建的repl用戶記錄,哦,奇怪。

突然想到,由于我們備份的是原庫中所有表(--all-databases),導出的dump文件中包含有重新創建表結構的語句,所以馬上在資源池雙主庫新建復制賬號repl:

grant? replication? slave? on *.* to? 'repl'@'*.*.110.%'? identified by? 'xxxxxx';

flush privileges;

然后重新執行復制語句并開啟復制進程依然報剛才的錯。然后就想到此次遷移是從Suse 12.4 ?MySQL-5.7.29 遷移到CentOS7.7 MySQL-5.7.30, 以為是版本不兼容。

接著將資源池46/47的MySQL版本降為 mysql 5.7.29。分別重新導入數據到新庫46/47上,導入數據庫的過程中46服務器導入正常,而發現47庫上通過source導入時非常的慢,每條執行返回10-30秒,當時沒有查具體原因,有可能是網絡卡頓吧。

最后查看原庫74/74的數據庫配置文件,返現沒有開啟GTID全局復制方式(說明,目前這邊項目MySQL數據庫幾乎都使用的基于GTID全局事務復制協議做的同步),而我執行的復制語句中有“master_auto_position=1”,原來新庫上執行的復制機制跟原庫不一致,這就是剛才開啟復制進程報錯的根本原因。

[四、數據遷移采坑處理]

通過以上分析,我們得知,既然原庫使用的是binlog和pos做的同步,那么我們新庫也同樣按照這個方式來配置復制。其次由于剛才使用mysql內置工具導入數據時很緩慢,所以我們準備采用percona提供的xtrabackup 工具來做數據備份和恢復。

4.1、首先檢查新舊庫上是否有創建備份賬號,結果現實沒有新新建

? create user 'bkuser'@'localhost' identified by 'xxxxxx';

? grant reload,lock tables,replication client,process on *.* to 'bkuser'@'localhost';

? flush privileges;

4.2、原庫上使用xtrabackup備份雙主數據

分別在原庫73/74上使用xtrabackup做全量備份。

73服務器上:

innobackupex --defaults-file=/home/mysql/my_cnf/my.cnf --host=*.*.101.73 --user=bkuser --password=xxxxxx --port=3306 --socket=/app/gzyd/data/mysql/tmp/mysql.sock --no-timestamp /mysqlbackup/73_xtra_base_20200623

74服務器上:

innobackupex --defaults-file=/home/mysql/my_cnf/my.cnf --host=*.*.101.74 --user=bkuser --password=xxxxxx --port=3306 --socket=/app/gzyd/data/mysql/tmp/mysql.sock --no-timestamp /mysqlbackup/74_xtra_base_20200623

4.3、新庫上恢復雙主數據

1)導入數據前記錄binlog文件及同步位置(master_log_pos和master_log_file)

# 46/47庫上執行

mysql> flush table with read lock;

mysql> show master status;

注:記得記錄下master狀態信息,后面執行復制的時候要用到。

mysql> unlock table;

4.4、全量恢復

分別在原庫73/74上使用xtrabackup做全量恢復

1)在46庫上執行恢復操作

innobackupex --defaults-file=/home/mysql/my_cnf/my.cnf? --use-memory=2G --apply-log? /mysqlbackup/73_xtra_base_20200623

mysqladmin? --login-path=myconn shutdown immediate

mv /data/mysql/data /data/mysql/data-bak20200624

mkdir /data/mysql/data

innobackupex --defaults-file=/home/mysql/my_cnf/my.cnf? --copy-back /mysqlbackup/73_xtra_base_20200623

chown -R mysql.mysql?? /data/mysql/data???

mysqld_safe? --defaults-file=/home/mysql/my_cnf/my.cnf? &

2)在47庫上恢復操作同上

4.5、新庫上配置雙主復制

1)在46/47服務器上新建復制賬號

注:由于在原庫導出的是所有庫,備份文件中含有重新創建表結構的語句,所以在新庫恢復數據后需要重新創建復制賬號:

grant? replication? slave? on *.* to? 'repl'@'*.*.110.%'? identified by? 'xxxxxx';

flush privileges;

2)配置46->47方向主從

?登錄47服務器,執行復制語句:

stop slave;?

change master to master_host='*.*.110.46',master_user='repl',master_password='xxxxxx',master_port=3306,master_log_file='bin.000001',master_log_pos=448;

start slave;

show slave status\G;

b93c360b4805a773c05dd05860d16e1b.png

3)配置47->46方向主從

?登錄46服務器,執行復制語句:

stop slave;

change master to master_host='*.*.110.47',master_user='repl',master_password='repQAv2wsx@gzydxk',master_port=3306,master_log_file='bin.000001',master_log_pos=1066;

start slave;

show slave status\G;??

5fbf80c2c18d1f66acfb567cf6986a70.png

4.6、新庫雙主測試

1)主主庫46上試著寫入測試數據

mysql> create database chg;

mysql> use chg;

mysql> create table t1(id int, name varchar(30));

mysql> insert into t1(id,name) values(1,'zhangsan');

mysql> insert into t1(id,name) values(2,'lisi');

然后到重復47上查看新插入的兩條數據是否同步過來:

mysql> show databases;

+--------------------+

| Database?????????? |

+--------------------+

| information_schema |

| chg??????????????? |

| mysql????????????? |

| performance_schema |

| smzrz????????????? |

| sys??????????????? |

+--------------------+

6 rows in set (0.00 sec)

mysql> use chg;

mysql> show tables;

+---------------+

| Tables_in_chg |

+---------------+

| t1??????????? |

+---------------+

1 row in set (0.00 sec)

mysql> select? * from t1;

+------+----------+

| id?? | name???? |

+------+----------+

|??? 1 | zhangsan |

|??? 2 | lisi???? |

+------+----------+

2 rows in set (0.00 sec)

2)主主庫46上試著寫入測試數據

mysql> create database chg2;

mysql> use chg2;

mysql> create table t2(id int,name varchar(20));

mysql> insert into t2(id,name) values(1,'derek');

mysql> insert into t2(id,name) values(2,'john');

然后到重復47上查看新插入的兩條數據是否同步過來:

mysql> use chg2;

mysql> show tables;

+----------------+

| Tables_in_chg2 |

+----------------+

| t2???????????? |

+----------------+

1 row in set (0.00 sec)

mysql> select * from t2;

+------+-------+

| id?? | name? |

+------+-------+

|??? 1 | derek |

|??? 2 | john? |

+------+-------+

[五、問題規避]

MySQL數據庫類似的升級遷移操作注意事項:

①升級遷移操作前仔細檢查當前數據庫配置文件(my,cnf),關注關鍵性的參數配置。

②自此檢查數據庫的架構,如:具體使用哪種復制模式等。

③升級遷移變更前做好充分的數據測試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531845.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531845.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531845.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

so把asp頁面生成靜態的html,23、asp系列課程--server.URLEncode方法和server.HTMLEncode方法...

作者:楊凡來自:楊凡博客地址:blog.sina.com.cn/aboutshisanserver.URLEncode方法和server.HTMLEncode方法可以對字符串進行編碼。我們一個一個的說。server.URLEncode可以對字符串進行URL編碼轉換,語法格式為:server.u…

poj 1905Expanding Rods

1 /*2 二分 幾何3 弧長L&#xff0c; 圓半徑R&#xff0c; 弧度 q&#xff0c; LR*q;4 二分&#xff1a; 弧度&#xff08;0~PI&#xff09; 或者 高度&#xff08;L/2~L&#xff09; 5 */6 #include<cstdio> 7 #include<iostream>8 #include<cmath>9…

java中同步嵌套引起的死鎖事例代碼

/*目的&#xff1a;自己寫一個由于同步嵌套引起的死鎖&#xff01;思路&#xff1a;多個線程在執行時&#xff0c;某一時刻&#xff0c;0-Thread綁定了LockA鎖&#xff0c;1-Thread綁定了LockB鎖&#xff01;當0-Thread要去綁定LockB鎖時 和 1-Thread要去綁定LockA鎖時都不能綁…

下列關于html5表單的多樣輸入方式,IT兄弟連 HTML5教程 HTML5表單 多樣的輸入類型1...

原標題&#xff1a;IT兄弟連 HTML5教程 HTML5表單 多樣的輸入類型1HTML5擁有多個新的表單輸入類型&#xff0c;這些新特性提供了更好的輸入控制和驗證。并不是所有的主瀏覽器都支持新的input類型&#xff0c;不過我們可以在所有的主瀏覽器中使用它們&#xff0c;即使不被支持&a…

v7000更換電池步驟_ups電源運行中是否可以更換電池?應如何操作呢

ups電源在日常使用中除了日常維護工作之外&#xff0c;對于使用達到一定年限的時候&#xff0c;內部使用的ups蓄電池就需要更換了&#xff0c;很多人以為ups不間段電源在工作的時候是可以跟換電池。其實&#xff0c;這個具體就需要看ups電源設計的原理&#xff0c;不同廠家設計…

poj 2031Building a Space Station(幾何判斷+Kruskal最小生成樹)

1 /*2 最小生成樹 幾何判斷3 Kruskal 球心之間的距離 - 兩個球的半徑 < 0 則說明是覆蓋的&#xff01;此時的距離按照0計算 4 */5 #include<iostream>6 #include<cstdio>7 #include<cstring>8 #include<cmath>9 #include<algorithm>…

華為怎么用手機看時間到讀秒_華為手機滅屏也可以看時間?其實設置方法很簡單,不會有些可惜了...

華為作為手機界名副其實的大佬&#xff0c;而且華為手機的口碑也是非常不錯的。那么為什么會有這么多人喜歡華為手機呢&#xff1f;主要是華為手機的質量高&#xff0c;并且用很多實用的小功能&#xff0c;比如說神奇的滅屏顯示功能等等&#xff0c;今天就給大家分享幾個華為手…

將數據轉化成字符串時:用字符串的鏈接 還是 StringBuilder

/*目的&#xff1a;將數據轉化成字符串時&#xff1a;用字符串的鏈接 還是 StringBuilder呢&#xff1f; */ public class Test{public static void main(String[] args){int[] arr{1,2,4,5};System.out.println(arrayToString(arr));}/* public static String arrayToString(…

html頻譜跳動效果,HTML5音頻可視化頻譜跳動代碼

HTML5音頻可視化頻譜跳動代碼*{margin:0;padding:0;}#canvas {display: block;background: linear-gradient(135deg, rgb(142, 13, 133) 0%, rgb(230, 132, 110) 100%);}window.οnclickfunction () {if(oAudio.paused) {oAudio.play();}else{oAudio.pause();}}//創建音頻上下文…

hive轉16進制unhex_Java 進制的轉換

什么是進制&#xff1f;進制也就是進位計數制&#xff0c;是人為定義的帶進位的計數方法(有不帶進位的計數方法&#xff0c;比如原始的結繩計數法&#xff0c;唱票時常用的“正”字計數法&#xff0c;以及類似的tally mark計數)。 對于任何一種進制---X進制&#xff0c;就表示每…

html中css二級聯動,html二級聯動學習筆記

DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">http://www.cnblogs.com/whgw/archive/2012/05/11/2496667.htmlJquery的select操作集合jQuery獲取Select選擇的Text和Value: 語法解釋&#xff1a; 1. $("#select_id").change(function()…

poj 2187 Beauty Contest(凸包求解多節點的之間的最大距離)

1 /* poj 2187 Beauty Contest2 凸包&#xff1a;尋找每兩點之間距離的最大值3 這個最大值一定是在凸包的邊緣上的&#xff01; 4 5 求凸包的算法&#xff1a; Andrew算法&#xff01; 6 */7 #include<iostream> 8 #include<cstdio>9 #include&l…

引入ui組件_Vuejs, Semantic CSS前端框架fish-ui

簡介基于vue2.0, github star 690, 一款小眾的UI框架fish-ui&#xff0c;直接上截圖&#xff1a;主要特性配備Vue.js&#xff0c;Moment&#xff0c;Vue-Router&#xff0c;ES6和Babel 6使用Webpack 2.0和Vue LoaderSemantic CSS 組件使用 Less支持現代瀏覽器快速開發安裝npm i…

html5可以用flash,HTML5網頁可以直接看視頻,不用flash嗎,另外WP7為何不支持flash。。。HTML5網頁...

Android中可以直接使用webView來加載HTML5通過video標簽來播放視頻。以下為基本步驟&#xff1a;一、需要在AndroidManifest.xml文件中聲明需要使用HardwareAccelerate, 可以細化到Activity級別&#xff0c;如果不需要的View可以聲明不要用加速&#xff0c;但是需要在代碼中做具…

pojBuy Tickets2828線段樹或者樹狀數組(隊列中倒序插隊)

這題開始的思路就是模擬&#xff1a;就像數組中插點一樣&#xff0c;每一個想買票的人都想往前插隊&#xff01; 但是這樣的話肯定TLE&#xff0c; 看了別人的思路之后才恍然大悟&#xff01; 正解&#xff1a;將開始的正序插入&#xff0c;變成倒序插入&#xff0c;這樣的話&a…

減去字符串_從文本字符串中提取指定值的6個超級技巧解讀

在實際的工作中&#xff0c;從指定的字符串中提取指定文本也是常用的技巧之一&#xff0c;除了手動操作之外&#xff0c;下文的8種應用技巧也是必須要掌握的。一、Left函數法。功能&#xff1a;從指定文本字符串的第一個字符開始&#xff0c;提取指定長度的字符串。語法結構&am…

如果用計算機錄制歌曲需要,網絡歌手怎么用電腦錄音軟件錄歌

現在網上有很多網絡歌手主要分為兩類&#xff0c;一類是原創&#xff0c;一類是翻唱。可是不管是原創還是翻唱都需要自己唱歌錄歌&#xff0c;要有屬于自己的歌曲(自己唱的)。要錄歌就要有設備&#xff0c;畢竟網路歌手剛開始大多數都是草根沒有錢找音樂工作室&#xff0c;只能…

中國剩余定理證明過程

原網址&#xff1a;http://blog.csdn.net/wtq493841534/article/details/5452720 中國剩余定理 中國剩余定理可以描述為&#xff1a; 若某數x分別被d1、、…、dn除得的余數為r1、r2、…、rn&#xff0c;則可表示為下式&#xff1a;xR1r1R2r2…RnrnRD其中R1是d2、d3、…、dn的公…

關閉瀏覽器前提示_win7系統ie總彈出查看和跟蹤下載的關閉方法

今天小編給大家分享的是win7系統ie總彈出查看和跟蹤下載的關閉方法&#xff0c;使用ie瀏覽器上網的時候&#xff0c;有些用戶會遇到ie總彈出查看和跟蹤下載的窗口&#xff0c;很多用戶想關閉掉此提示&#xff0c;卻不知如何關閉查看和跟蹤下載的窗口&#xff0c;那么請參照以下…

html引入百度地圖報錯,vue引入百度地圖BMapGL,或者其他個性化地圖

3.jpgvue的百度地圖早就有vue-baidu-map這里就不贅述了&#xff0c;自己去直接對著API寫就好了&#xff0c;基本上已經滿足絕大多數需求了還簡單方便。vue-baidu-map 傳送門 https://dafrok.github.io/vue-baidu-map/#/zh/index這里主要是在vue里面引入BMapGL&#xff0c;或者其…