中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

將MySQL數(shù)據(jù)庫從Amazon RDS遷移到DigitalOcean

發(fā)布于:2021-01-25 15:15:58

0

112

0

MySQL 數(shù)據(jù)庫 Amazon RDS DigitalOcean

在以前的博客(第1部分和第2部分)中,我們討論了如何將RDS數(shù)據(jù)遷移到EC2實例中。在這個過程中,我們成功地將數(shù)據(jù)移出RDS,但我們?nèi)匀辉贏WS上運行。如果您想將數(shù)據(jù)完全移出amazonweb服務,還有更多的工作要做。在今天的博客文章中,我們將向你展示如何做到這一點。

環(huán)境介紹

我們將要使用的環(huán)境與本系列最后一篇文章中的環(huán)境非常相似。唯一的區(qū)別是沒有發(fā)生切換,因為我們將使用EC2實例作為移出AWS過程中的中間步驟。

行動計劃

在上一篇博客中,我們首先將數(shù)據(jù)從RDS遷移到一個EC2實例,我們可以完全訪問該實例。因為我們已經(jīng)在EC2實例上運行了MySQL,所以我們有更多的選擇來選擇如何將數(shù)據(jù)復制到另一個云。DigitalOcean僅用于演示目的,我們下面描述的過程可用于遷移到任何其他主機或云提供商。您需要直接訪問VPS實例。在這個過程中,我們將使用xtrabackup來復制數(shù)據(jù)(盡管使用任何其他二進制傳輸方法都可以)。我們需要在AWS和DigitalOcean之間建立一個安全連接。一旦我們這樣做了,我們將設置從EC2實例到digitaloceandroplet的復制。下一步是執(zhí)行切換和移動應用程序,但我們將不在這里介紹。

確定連通性方法

amazonweb服務允許您從許多不同的方法中選擇一種來創(chuàng)建到外部網(wǎng)絡的連接。如果您有支持VPN連接的硬件設備,您可以使用它在AWS中的VPC和本地基礎設施之間形成VPN連接。如果您的網(wǎng)絡提供商為您提供與AWS網(wǎng)絡的對等連接,并且您有BGP路由器,則可以通過AWS direct Connect在您的網(wǎng)絡和AWS之間獲得直接VLAN連接。如果您有多個獨立的網(wǎng)絡,您可以使用awsvpncloudhub將它們與Amazon鏈接在一起。最后,由于EC2實例由您管理,您還可以使用OpenVPN等軟件解決方案在該EC2實例和本地網(wǎng)絡之間建立VPN。

在我們討論數(shù)據(jù)庫時,您還可以決定在EC2上的MySQL(主服務器)和DigitalOcean上運行的從服務器之間設置SSL復制。-我們?nèi)匀恍枰宄绾螌⒊跏紨?shù)據(jù)傳輸?shù)綇膶俜掌鳌粋€解決方案可能是對xtrabackup的輸出加焦油,加密該文件,然后通過WAN(rsync)發(fā)送該文件,或者上傳到S3 bucket,然后從那里下載。您還可以依賴SSH加密,只需scp(甚至rsync,使用SSH)將數(shù)據(jù)傳輸?shù)叫挛恢谩?/span>

有很多選擇。不過,我們將使用另一種解決方案—我們將在EC2實例和DigitalOcean droplet之間建立一個SSH隧道,以形成一個用于復制數(shù)據(jù)的安全通道。初始傳輸將通過SSH連接使用rsync進行。

將數(shù)據(jù)復制到DigitalOcean

一旦MySQL5.7在DigitalOcean實例上啟動并運行,我們需要對EC2實例執(zhí)行備份,然后將其傳輸?shù)紻O。從技術上講,應該可以在節(jié)點之間執(zhí)行xtrabackup數(shù)據(jù)的直接流,但我們不能真正推薦它。廣域網(wǎng)鏈接可能不可靠,最好在本地進行備份,然后使用rsync,它可以在出現(xiàn)問題時重試傳輸。

首先,讓我們對EC2實例進行備份:

[email protected]:~# innobackupex --user=tpcc --password=tpccpass /tmp/backup

一旦準備好了,我們需要把它傳送到數(shù)字海洋網(wǎng)絡。為了以安全的方式執(zhí)行,我們將在do droplet上創(chuàng)建一個新用戶,生成一個SSH密鑰并使用該用戶復制數(shù)據(jù)。當然,您也可以使用任何現(xiàn)有用戶,創(chuàng)建新用戶不是必需的。所以,讓我們添加一個新用戶。有很多方法可以做到這一點,我們將使用'adduser'命令。

[email protected]:~# adduser rdscopy
Adding user `rdscopy' ...
Adding new group `rdscopy' (1001) ...
Adding new user `rdscopy' (1001) with group `rdscopy' ...
Creating home directory `/home/rdscopy' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for rdscopy
Enter the new value, or press ENTER for the default
   Full Name []:
   Room Number []:
   Work Phone []:
   Home Phone []:
   Other []:
Is the information correct? [Y/n] y

現(xiàn)在,是時候生成一對ssh密鑰用于連接了:

[email protected]:~# ssh-keygen -C 'rdscopy' -f id_rsa_rdscopy -t rsa -b 4096
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_rdscopy.
Your public key has been saved in id_rsa_rdscopy.pub.
The key fingerprint is:
3a:b0:d2:80:5b:b8:60:1b:17:58:bd:8e:74:c9:56:b3 rdscopy
The key's randomart image is:
+--[ RSA 4096]----+
|   ..            |
|  o  . o         |
| . .. + o        |
| o ..* E         |
|+o+.*   S        |
|o+++ + .         |
|o.. o o          |
|   .   .         |
|                 |
+-----------------+

有了SSH密鑰,我們需要在數(shù)字海洋水滴上設置它。我們需要創(chuàng)建.ssh目錄并創(chuàng)建具有適當訪問權限的授權密鑰文件。

[email protected]:~# mkdir /home/rdscopy/.ssh[email protected]:~# cat id_rsa_rdscopy.pub > /home/rdscopy/.ssh/authorized_keys[email protected]:~# chown rdscopy.rdscopy /home/rdscopy/.ssh/authorized_keys[email protected]:~# chmod 600 /home/rdscopy/.ssh/authorized_keys

然后,我們需要將私鑰復制到EC2實例。當我們準備好的時候,我們可以復制我們的數(shù)據(jù)。正如我們前面提到的,我們將使用rsync來實現(xiàn)這一點——它將允許我們在進程因任何原因中斷時重新啟動傳輸。結(jié)合SSH,我們創(chuàng)建了一種通過WAN復制數(shù)據(jù)的安全而健壯的方法。讓我們在EC2主機上啟動rsync:

[email protected]:~# rsync -avz -e "ssh -i id_rsa_rdscopy -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /tmp/backup/2017-02-20_16-34-18/ [email protected]:/home/rdscopy

過一段時間,這將取決于數(shù)據(jù)量和傳輸速度,我們的備份數(shù)據(jù)應該可以在DigitalOcean droplet上使用。這意味著是時候通過應用InnoDB redo logs,然后將其復制回MySQL數(shù)據(jù)目錄來準備它了。為此,我們需要停止MySQL,刪除當前數(shù)據(jù)目錄,使用innobackupex或手動將文件復制回,最后,驗證新文件的所有者和組是否設置為MySQL:

[email protected]:~# innobackupex --apply-log /home/rdscopy/[email protected]:~# service mysql stop[email protected]:~# rm -rf /var/lib/mysql/*[email protected]:~# innobackupex --copy-back /home/rdscopy/[email protected]:~# chown -R mysql.mysql /var/lib/mysql

在啟動MySQL之前,我們還需要確保服務器的id和UUID是不同的。前者可以在中編輯我的.cnf后者可以通過以下方式得到保證:

[email protected]:~# rm /var/lib/mysql/auto.cnf

現(xiàn)在,我們可以啟動MySQL:

[email protected]:~# service mysql start

設置復制

我們已經(jīng)準備好在EC2和DO之間設置復制,但是首先我們需要設置一個ssh隧道——我們將在EC2實例上為ubuntu用戶創(chuàng)建一個額外的ssh密鑰,并將其復制到DO實例。然后我們將使用ubuntu用戶創(chuàng)建一個用于復制的隧道。

讓我們從創(chuàng)建新的ssh密鑰開始:

[email protected]:~# ssh-keygen -C 'tunnel' -f id_rsa_tunnel -t rsa -b 4096
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in id_rsa_tunnel.
Your public key has been saved in id_rsa_tunnel.pub.
The key fingerprint is:
c4:44:79:39:9c:c6:ce:45:bb:13:e5:6f:c5:d9:8c:14 tunnel
The key's randomart image is:
+--[ RSA 4096]----+
|       .o+ +. E. |
|       o. O .= +o|
|        o= oo o.=|
|       .  o  o ..|
|        S   o   o|
|             . . |
|                 |
|                 |
|                 |
+-----------------+

下一步-我們需要將公鑰添加到EC2實例上的authorized u keys文件中,我們將從DigitalOcean連接到該文件以創(chuàng)建一個隧道。

[email protected]:~# cat id_rsa_tunnel.pub >> /home/ubuntu/.ssh/authorized_keys

我們還需要一個私鑰來傳輸?shù)紻O droplet。可以通過多種方式完成,但我們將使用安全的scp,使用我們先前創(chuàng)建的rdscopy user和key:

[email protected]:~# scp -i id_rsa_rdscopy id_rsa_tunnel [email protected]:/home/rdscopy
id_rsa_tunnel                                                                                                                                                                    100247     3.2KB/s   00:00

這就是我們所需要的-現(xiàn)在我們可以創(chuàng)建SSH隧道了。我們希望它一直可用,所以我們將使用屏幕會話。

[email protected]:~# screen -S tunnel[email protected]:~# ssh -L 3307:localhost:3306 [email protected] -i /home/rdscopy/id_rsa_tunnel

我們在這里做的是使用“ubuntu”用戶和位于/home/rdscopy/idu rsau tunnel中的密鑰打開localhost、端口3307和遠程主機54.224.107.6、端口3306之間的SSH隧道。應通過127.0.0.1:3307分離屏幕會話和遠程主機。

要設置復制,我們?nèi)匀恍枰砑觧個用戶,用于連接EC2上的MySQL。我們將在EC2主機上創(chuàng)建它,并使用“127.0.0.1”作為主機-通過SSH隧道的連接看起來像來自本地主機:

mysql> CREATE USER [email protected] IDENTIFIED BY 'rds_rpl_pass';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected];
Query OK, 0 rows affected (0.00 sec)

一切都準備好了,現(xiàn)在是時候遵循傳統(tǒng)的基于xtrabackup數(shù)據(jù)創(chuàng)建從機的過程了。我們需要使用來自xtrabackupu binlogu info的數(shù)據(jù)來確定備份時的主位置。這個位置是我們想用在我們的改變主人…命令。我們來看看xtrabackupu binlogu info文件的內(nèi)容:

[email protected]:~# cat /home/rdscopy/xtrabackup_binlog_info
binlog.000052    896957365

這是二進制日志文件和位置,我們將在更改母版中使用它:

[email protected]:~# mysql -u root -ppass

mysql> CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3307, MASTER_USER='rds_rpl', MASTER_PASSWORD='rds_rpl_pass', MASTER_LOG_FILE='binlog.000052', MASTER_LOG_POS=896957365; START SLAVE;

這是它-復制現(xiàn)在應該是和運行,我們的DigitalOcean奴隸應該趕上復制。一旦趕上,我們的數(shù)據(jù)庫層就可以進行切換了。當然,通常不僅僅是一個節(jié)點,在基礎設施準備好處理生產(chǎn)流量之前,您很可能需要在DO上設置多個從屬節(jié)點。

切換本身是一個不同的主題-你將不得不設計一個計劃,以盡量減少停機時間。一般來說,交通應該從舊的位置轉(zhuǎn)移到新的位置,但如何進行主要取決于您的環(huán)境。它可以是任何東西,從簡單的DNS條目更改,到復雜的腳本,這些腳本將以正確的順序拉取所有觸發(fā)器以重定向流量。不管怎樣,您的數(shù)據(jù)庫現(xiàn)在已經(jīng)位于新位置,可以為請求提供服務。