1. 程式人生 > >MySQL資料庫遷移詳細步驟

MySQL資料庫遷移詳細步驟

==========================================================================================

一、背景簡介

==========================================================================================

1、問題描述

由於機房搬遷,需要對後臺DB伺服器進行遷移,同時為了保證在資料遷移過程中,對線上業務不造成影響,並能夠做到秒級切換。如果我們採用普通的邏輯備份,比如:mysqldump,會存在鎖表的情況,顯然不可取。因此我們採取基於物理備份的方案,備份工具選型為:xtrabackup。

2、系統環境

IP地址

系統版本

MySQL版本

角色

172.17.138.239

SUSE Linux Enterprise Server 10 (x86_64)

5.0.26

舊環境(臨時主)

10.217.121.196

CentOS 6.3 (x86_64)

5.0.27

新環境(主)

10.217.121.216

CentOS 6.3 (x86_64)

5.0.27

新環境(從)

(1)、由於當前的mysql版本太舊,故備份工具推薦選擇xtrabackup-2.0.8的版本;

(2)、由於當前的系統環境太舊,官方提供的xtrabackup二進位制版本無法執行,故需進行原始碼編譯。

3、編譯要求

(1)、需要安裝cmake依賴庫;

(2)、需要下載一份mysql-5.1.59的原始碼包,放在percona-xtrabackup-2.0.8目錄下;

(3)、libtool的版本不能高於2.4。

==========================================================================================

二、xtrabackup編譯安裝

==========================================================================================

1、編譯安裝cmake

# tar -xvzf cmake-2.8.10.tar.gz

# cd cmake-2.8.10

# ./bootstrap --prefix=/usr/local

# gmake --jobs=`grep processor/proc/cpuinfo | wc -l`

# gmake install

2、編譯安裝xtrabackup

# tar xvzf percona-xtrabackup-2.0.8.tar.gz

# cd percona-xtrabackup-2.0.8

## 將mysql-5.1.59原始碼包下載到percona-xtrabackup-2.0.8目錄下,無需解壓

wKioL1Sle23gJEENAAGrib3fJE4198.jpg

# ./utils/build.sh innodb50

注意:

以上標註部分,需要與當前的MySQL主版本對應上,如果有不明白的,可以參考以下資訊。

# cat BUILD.txt

wKiom1Sletqgul4OAAH8vqvIV1Y082.jpg

# vim ./utils/build.sh

wKioL1Sle7rzHU1zAAFIofoY-vw592.jpg

# cp innobackupex /usr/local/bin/

# cd src

# cp xbstream xtrabackup_51 /usr/local/bin/

# cd /usr/local/bin/

# ln -s innobackupex innobackupex-1.5.1

# ln -s xtrabackup_51 xtrabackup

==========================================================================================

三、DB資料備份

==========================================================================================

1、一些常用用法

## 如果在從端執行的話

innobackupex --user=root --defaults-file=/etc/my.cnf --slave-info --no-timestamp /data/mysql_backup

## 如果在主端執行的話

innobackupex --user=root --defaults-file=/etc/my.cnf --no-timestamp /data/mysql_backup

## 如果在主端執行並壓縮傳輸到遠端伺服器的話

innobackupex --user=root --defaults-file=/etc/my.cnf --no-timestamp --stream=tar /data/mysql_backup | gzip | ssh [email protected]" cat - > /data/mysql_backup.tgz"

注意:

我們本次的備份,直接在主DB(172.17.138.239)上進行,因為xtrabackup不會鎖表,對業務不造成影響,也會為後續的主從關係建立帶來便利。

2、備份步驟

由於本地伺服器的磁碟空間所剩不多,所以本次備份採用壓縮傳輸到遠端伺服器的方式。但為了更好地描述在本次備份中遇到的問題,我們先採用本地模式。

# innobackupex --user=root --defaults-file=/etc/my.cnf --no-timestamp /data/mysql_backup

wKioL1Sle92y6zdMAADQ3qIGrBw532.jpg

注意:

如上報錯資訊,主要是因為“/etc/my.cnf”配置檔案裡沒有指定basedir、datadir引數設定,導致xtrabackup找不到。

# ps aux | grep mysql[d]

wKiom1Sle1uBdvSsAACF854w3gU614.jpg

注意:

根據以上資訊,我們需要將以下引數新增到配置檔案中(/etc/my.cnf):

basedir=/usr/local/services/mysql-5.0.26

datadir=/usr/local/services/mysql-5.0.26/var

# innobackupex --user=root --defaults-file=/etc/my.cnf --no-timestamp /data/mysql_backup

wKioL1SlfEPSY_ggAAFK_5KHJBI850.jpg

注意:

出現這種錯誤資訊,是因為備份目錄“/data/mysql_backup”已經存在,主要是由前一次操作引起的。因為xtrabackup要求備份目錄事先不能存在,需要在執行時才會自動建立。

如果我們將資料備份到本地的話(前提是伺服器磁碟空間足夠多),執行以下命令即可:

# rm -rf /data/mysql_backup

# innobackupex --user=root --defaults-file=/etc/my.cnf --no-timestamp /data/mysql_backup

在恢復的時候,將本地的備份資料rsync同步到遠端伺服器,然後採用xtrabackup進行恢復即可。

但考慮到本地磁碟空間不足,故本次資料遷移,我們採用壓縮傳輸到遠端伺服器的備份方式(此種方法比較慢^_^),執行以下命令即可:

innobackupex --user=root --defaults-file=/etc/my.cnf --no-timestamp --stream=tar /data/mysql_backup | gzip | ssh [email protected] "cat - > /data/mysql_backup.tgz"

## 本地伺服器上的備份資訊輸出

wKiom1Sle7mhPOmmAANwtN3xasM795.jpg

## 遠端伺服器上的檔案資訊

wKioL1SlfJPjjYNIAAC3KddRM2Y208.jpg

注意:

以上資料備份時間可能會比較長,推薦放在深夜進行,第二天來恢復 ^_^

==========================================================================================

四、DB資料恢復

==========================================================================================

1、安裝mysql-5.0.27環境

# /usr/sbin/groupadd mysql

# /usr/sbin/useradd mysql -g mysql -s /sbin/nologin

# mkdir -p /data/dbdata/{data,binlog,relaylog,otherlog} /var/run/mysql

# chown -R mysql:mysql /data/dbdata /var/run/mysql

# cd /usr/local/src

# tar xvzf mysql-5.0.27.tar.gz

# cd mysql-5.0.27

# ./configure --prefix=/usr/local/mysql \

--datadir=/data/dbdata/data \

--enable-thread-safe-client \

--enable-assembler \

--enable-local-infile \

--with-charset=utf8 \

--with-collation=utf8_general_ci \

--with-extra-charsets=all \

--with-unix-socket-path=/var/run/mysql/mysql.sock \

--without-debug \

--with-embedded-server \

--with-big-tables

# make --jobs=`grep processor/proc/cpuinfo | wc -l`

# make install

# cp ./support-files/mysql.server /etc/init.d/mysqld

# chmod +x /etc/init.d/mysqld

# chkconfig --add mysqld

# chkconfig mysqld on

# cd /usr/local

# mv mysql mysql-5.0.27

# ln -s mysql-5.0.27 mysql

# chmod +w /usr/local/mysql

# chown -R mysql:mysql /usr/local/mysql/

# vim /etc/ld.so.conf

/usr/local/mysql/lib/mysql

# /sbin/ldconfig

# cd /etc

# rm -f my.cnf && ln -s my_old.cnf my.cnf

# vim my.cnf

……

innodb_data_file_path = ibdata1:1024M:autoextend

innodb_log_file_size = 512M

innodb_log_files_in_group = 3

……

注意:

以上我們故意在開始部署MySQL環境時,將表空間檔案分配的少一些,這樣可以讓MySQL啟動的快一些,同時也為接下來的恢復操作以作區別。也需要注意一下以下附件中的引數“bind-address”、“server-id”。

# cd /usr/local/mysql

# ./bin/mysql_install_db --datadir=/data/dbdata/data --user=mysql

# service mysqld start

2、編譯安裝xtrabackup

在此省略,可以參考之前的步驟,或者直接將之前編譯後的二進位制檔案拷貝過來即可。

3、DB資料恢復

# mkdir -p /data/mysql_backup

# tar -ixvzf /data/mysql_backup.tgz -C /data/mysql_backup

注意:

在做tar解壓操作時,一定要加上“-i”引數。

# service mysqld stop

# cd /data/dbdata

# mv data data.old && mkdir data

# rm -rf binlog/*

# cd /etc

# rm my.cnf && ln -s my_new.cnf my.cnf

……

innodb_data_file_path =ibdata1:2000M;ibdata2:2000M;ibdata3:2000M;ibdata4:2000M;ibdata5:2000M;ibdata6:2000M;ibdata7:2000M;ibdata8:2000M;ibdata9:2000M;ibdata10:2000M;ibdata11:2000M;ibdata12:2000M;ibdata13:2000M;ibdata14:2000M;ibdata15:2000M;ibdata16:2000M;ibdata17:2000M;ibdata18:2000M;ibdata19:2000M;ibdata20:2000M;ibdata21:2000M;ibdata22:2000M;ibdata23:2000M;ibdata24:2000M;ibdata25:2000M;ibdata26:2000M;ibdata27:2000M;ibdata28:2000M;ibdata29:2000M;ibdata30:2000M;ibdata31:2000M;ibdata32:2000M;ibdata33:2000M;ibdata34:2000M;ibdata35:2000M;ibdata36:2000M;ibdata37:2000M;ibdata38:2000M;ibdata39:2000M;ibdata40:2000M;ibdata41:2000M;ibdata42:2000M;ibdata43:2000M;ibdata44:2000M;ibdata45:2000M;ibdata46:2000M;ibdata47:2000M;ibdata48:2000M;ibdata49:2000M;ibdata50:2000M;ibdata51:2000M;ibdata52:2000M;ibdata53:2000M;ibdata54:2000M;ibdata55:2000M;ibdata56:2000M;ibdata57:2000M;ibdata58:2000M;ibdata59:2000M;ibdata60:2000M;ibdata61:2000M;ibdata62:2000M;ibdata63:2000M;ibdata64:2000M;ibdata65:2000M;ibdata66:2000M;ibdata67:2000M;ibdata68:2000M;ibdata69:2000M;ibdata70:2000M;ibdata71:2000M;ibdata72:2000M;ibdata73:2000M;ibdata74:2000M;ibdata75:2000M;ibdata76:2000M;ibdata77:2000M;ibdata78:2000M;ibdata79:2000M;ibdata80:2000M;ibdata81:2000M;ibdata82:2000M;ibdata83:2000M;ibdata84:2000M;ibdata85:2000M;ibdata86:2000M;ibdata87:2000M;ibdata88:2000M;ibdata89:2000M;ibdata90:2000M;ibdata91:2000M;ibdata92:2000M;ibdata93:2000M;ibdata94:2000M;ibdata95:2000M;ibdata96:2000M;ibdata97:2000M;ibdata98:2000M;ibdata99:2000M;ibdata100:2000M;ibdata101:2000M;ibdata102:2000M;ibdata103:2000M;ibdata104:2000M;ibdata105:2000M;ibdata106:2000M;ibdata107:2000M;ibdata108:2000M;ibdata109:2000M;ibdata110:2000M;ibdata111:2000M;ibdata112:2000M;ibdata113:2000M;ibdata114:2000M;ibdata115:2000M;ibdata116:2000M;ibdata117:2000M;ibdata118:2000M;ibdata119:2000M;ibdata120:2000M;ibdata121:2000M:autoextend

innodb_log_file_size = 256M

innodb_log_files_in_group = 2

……

注意:

以上引數要和舊環境對應,否則無法啟動,如果引數“innodb_log_files_in_group”在舊環境沒有設定,此處可以忽略不設定,預設值為2。也需要注意一下以下附件中的引數“bind-address”、“server-id”。

# innobackupex --apply-log /data/mysql_backup

wKiom1SlfB_x0Ws_AAGgXllxMPE516.jpg

# innobackupex --copy-back /data/mysql_backup

wKioL1SlfPrDqcHUAAGY3jSXPf0357.jpg

# cp -a /usr/local/src/mysql-5.0.27/sql/share/* /data/dbdata/data/mysql/

wKiom1SlfGGCZT11AAEauf9V-9A428.jpg

注意:

以上步驟必須進行,否則會報錯,導致啟動失敗。

# chown -R mysql:mysql /data/dbdata/data

# service mysqld start

## 至於另一臺伺服器(10.217.121.216)的DB資料恢復,可以將“10.217.121.196”上的解壓資料同步過來,然後按照同樣的方式進行恢復即可

# rsync -arvPz -e "ssh -lroot -p36000" /data/mysql_backup/ 10.217.121.216:/data/mysql_backup/

4、主從關係建立

(1)、DB賬號恢復

將“172.17.138.239”的“mysql”資料庫匯出,然後匯入到“10.217.121.196”

將“172.17.138.239”的從DB的“mysql”資料庫匯出,然後匯入到“10.217.121.216”

(2)、“10.217.121.196”與“10.217.121.216”主從關係建立

在“10.217.121.196”上的操作:

# mysql -uroot -e "grant replication slave on *.* to 'repl'@'10.217.121.216' identified by 'repl123456';"

# mysql -uroot -e "flush privileges;"

# mysql -uroot -e "show master status\G"

在“10.217.121.216”上的操作:

# mysql -uroot -e "change master to master_host='10.217.121.196',master_user='repl',master_password='repl123456',master_log_file='XXX',master_log_pos=XXX;"

# mysql -uroot -e "start slave;"

# mysql -uroot -e "show slave status\G"

注意:

以上標註部分,需要根據實際情況填寫即可。

(3)、“172.17.138.239”與“10.217.121.196”主從關係建立

在“172.17.138.239”上的操作:

# mysql -uroot -e "grant replication slave on *.* to 'repl'@'10.217.121.196' identified by 'repl123456';"

# mysql -uroot -e "flush privileges;"

# mysql -uroot -e "show master status\G"

在“10.217.121.196”上的操作:

# cat /data/mysql_backup/xtrabackup_binlog_info

wKiom1SlfLyR4PafAABOJl1HRrY089.jpg

# mysql -uroot -e "change master to master_host='172.17.138.239',master_user='repl',master_password='repl123456',master_log_file='TaeSupport.001635',master_log_pos=436953160;"

# mysql -uroot -e "start slave;"

# mysql -uroot -e "show slave status\G"

最終的主從關係如下:

172.17.138.239 à 10.217.121.196  à 10.217.121.216

Mater             Master Slave        Slave

注意:

以上3臺DB的配置檔案“/etc/my.cnf”中的“server-id”引數,必須保持不相同,否則你懂得 ^_^

業務側切換時,只需指向新的主DB“10.217.121.196”即可,待確認無誤後,停掉之前建立的“172.17.138.239”與“10.217.121.196”主從關係,而“10.217.121.196”與“10.217.121.216”主從關係需保留不動。

==========================================================================================

五、一些問題總結

==========================================================================================

1、由於MySQL-5.0.26的版本存在較多BUG,官方已不提供下載,所以本次的新環境採用MySQL-5.0.27;

2、之前嘗試遷移到5.1、5.5系列版本,但在做主從設定時,總會報錯,嘗試了MySQL-5.0.37版本也不行,這也驗證了MySQL-5.0.26的確存在BUG的可能性;

3、目前我們在MySQL-5.0.26與MySQL-5.0.27之間建立主從關係是可以的,但個人還是比較推薦5.5系列的版本,接下來可以嘗試在MySQL-5.0.27與MySQL-5.5.X之間建立主從;

4、本次遷移工作也比較耗時,主要是涉及到太多表空間檔案,其實邏輯資料也沒那麼多,個人覺得之前的舊環境下的“innodb_data_file_path”引數設定不是太合理,可以考慮對ibdata進行瘦身和配置調整;

5、在遷移過程中,卻發現之前的64為環境下,執行的卻是32位版本的MySQL,這樣就會導致一個問題,就算你在64位環境下,記憶體再多,而你的緩衝池大小最多也只能設定到4G。

相關推薦

MySQL資料庫遷移詳細步驟

========================================================================================== 一、背景簡介 ==================================

Eclipse連線MySQL資料庫詳細步驟

本人在寫這篇部落格的時候也是菜鳥一隻,百度“Java連線mysql資料庫、eclipse連線資料庫”等文章一大堆,可總是報錯。 下面的操作是經本人驗證,確實可行,包括了jar包匯入、用jdbc連線my

Myeclipse中通過JDBC連線MySQL資料庫詳細步驟

首先要說明的是,使用jdbc連線資料庫並不難,只要你按照接下來的步湊一步一步的做,理清思路,相信你肯定能夠成功。 一、準備工作 下載JDBC驅動。 網上有許多驅動可供下載,但魚龍混雜,可能部分讀者不知

binlog恢復mysql資料庫詳細步驟

日常的資料備份及恢復測試,是DBA工作重中之重的事情,所以要做好備份及測試,日常的備份常見有mysqldump+binlog備份、xtrabackup+binlog備份,無論那一種,幾乎都少不了對binlog的備份,說明了binlog在資料恢復中的重要性,下面做個小測試,是工

JSP中使用JDBC連線MySQL資料庫詳細步驟

1,首先在自己新建的專案文字框中輸入Web Project的名稱,然後單擊下一步。 2,繼續單擊下一步 3,把Generate web.xml deployment descriptor複選框勾上。 4,單擊Finish,完成Web project工程的建立。 5,開啟MyEclipse Date

MySQL數據庫遷移詳細步驟

ply 備份 nload ges 問題總結 tgz all 51cto kcon 轉載自:http://sofar.blog.51cto.com/353572/1598364 ===============================================

在linux系統上安裝mysql-5.6.27資料庫詳細步驟

安裝前準備:到mysql官網(https://dev.mysql.com/downloads/mysql/)下載mysql編譯好的二進位制安裝包,來到官網,我們拉到頁面的下部,找到相應的版本,如圖所示內

Mysql資料庫詳細安裝步驟

一、下載 1. 進入mysql官網,登陸自己的Oracle賬號(沒有賬號的自己註冊一個),下載Mysql,下載地址:http://dev.mysql.com/downloads/mysql/ 2

Linux離線安裝mysql 5.6詳細步驟

詳細步驟 export 軟件 zxvf 安裝數據庫 pass 系統啟動 nbsp 復制 一、安裝MySQL 1、下載安裝包 mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz 2、卸載系統自帶的Mariadb rpm -qa|grep

MySQL資料庫詳細配置(win7\win10)

1、首先下載MySQL 最新版本下載地址 2、解壓檔案 最好別帶中文路徑,防止一些麻煩。我的地址如下:D:\MySQL\mysql-5.7.22-winx64\bin(這個地址為bin目錄的路徑,之後需要用到) 3、配置環境變數 win7進入環境變數 右擊計算機點選屬性,

linux mysql資料庫遷移

由於資料的日漸增多,導致伺服器系統盤的容量總被佔滿,從而使mysql服務掛掉。 停止mysql服務 service mysqld stop  複製資料庫到新目錄 進入mysql 使用show variables like 'datadir' 檢視datadir

mysql資料庫遷移

伺服器資料庫遷移到新的資料庫中: 場景1、修改多個數據庫的字首以及表字首 1、建立資料庫 #根據規則建立新的資料庫 SELECT CONCAT( 'CREATE DATABA

centos搭建Nginx+PHP+MySql+Redis環境詳細步驟(CentOS7環境)

一、安裝Nginx 1、下載nginx-release包 2、匯入GPG signing key 3、安裝1中下載的軟體包。 yum install /home/develop/nginx-release-centos-7-0.el7.ngx.noarch.rpm 其中“/home/dev

C#連線SQL SERVER資料庫詳細步驟

首先,在SQL SEVER裡建立一個名為“Exercise”的資料庫名,在該資料庫下建立一張名為“lianxi”的表。好,現在開始寫程式碼。 在FORM1裡拖一個DATAGIRDVIEW用於顯示錶,在放一個BUTTON用於執行操作。加入名稱空間 using system.d

MySql主從搭建詳細步驟

成功 p s linux6 ransac amp defaults 查看 遇到 tab 環境: linux64位,一臺機器兩個實例,主庫3306端口,從庫3307端口 步驟: 一、下載安裝 先下載安裝mysql,這裏使用了5.7.21版本,具體過程不做詳細說明,可自行查資料

MySQL5.7.14-下載安裝教程-->MySQL資料庫語句詳細教程

如何下載: 進入此介面下載: Downloads–>MySQL Community Edition (GPL)(這是免費版的,當然,有錢的可以用收費的,功能更強大)–>MySQL Community Server (GPL) –>

JDBC連線sql server資料庫詳細步驟和程式碼

JDBC連線sql server資料庫的步驟如下: 1、載入JDBC驅動程式:         在連線資料庫之前,首先要載入想要連線的資料庫的驅動到JVM(Java虛擬機器),         這通

windows上mysql資料庫遷移到linux

1 、安裝MySql Workbench8.0,在Navigator下MANAGEMENT下Data Export         2、雙擊Data Export,彈出如下介面:     1 表示選擇要匯出的資料庫     2 表示選擇匯出資料,或者匯出資料和表結

asp.net core 2.1 Mysql 資料庫遷移,遇坑記錄

首先來一段錯誤immodeMacBook-Pro:tz.efcontext immo$ dotnet ef database update Unable to create an object of type 'AppDbContext'. Add an implementa

MySQL資料庫遷移到SQL Server----------SSMA(SQL Server Migration Assistant for MySQL)工具安裝及使用

1.檢視SQLServer的版本: 開啟Microsoft SQL Server Management Studio,點選New Query,輸入“SELECT @@VERSION”,返回當前安裝的日期、版本和處理器型別。 2.檢視MySql版本 開始->