​快速創建一個MySQL從庫的方法

  • 2019 年 10 月 5 日
  • 筆記

快速創建一個從庫的方法:

##  摘錄自  《最快創建一個MySQL從機的姿勢》  姜承堯 InsideMySQL 微信公眾號

這裡對原文有刪減,只列出了幾種感覺用得到的。文中省略了change master to 的步驟,不是這篇文章中關注的重點。

以快速創建一個從庫的需求出發,如下幾種備選方案:

環境:

  node1  主庫

  node2  新伺服器,需要做成node1從庫  (node1已經配置免密碼SSH登陸到node2)

軟體版本:

  CentOS7 64位

  MySQL 官方5.6版本,資料庫的用戶名和密碼都是root

  都安裝了percona-xtrabackup

0 弱雞版:【最耗時間】

mysqldump -uroot -proot -q –single-transaction -A –master-data=2 > /root/all.sql  # 備份

mysql -uroot -proot < /root/all.sql   # 還原

這種方式最簡單的,不多說。

1 初級版:

innobackupex –user=root –password=root –socket=/var/lib/mysql/mysql.sock –parallel=4 –no-timestamp /root/bak

缺點速度慢,備份的文件較大。好處是相對於mysqldump而言,這個工具能並行備份操作。

scp /root/bak root@node2:/root   # 將/root/bak這個壓縮後的文件scp到目標主機node2,

然後去node2解壓命令如下:

mkdir /tmp/mysql   # /tmp/mysql 這是個臨時存放拷貝過來的資料庫解壓文件目錄,和mysql的自己的datadir沒有任何關係
cat /root/bak | lz4 -d | xbstream -x -C /tmp/mysql
innobackupex --apply-log /tmp/mysql/# 導入數據後,還要執行下整理操作  innobackupex --copy-back  /tmp/mysql/  # 將整理好的資料庫文件導入到原先的mysql datadir里    chown mysql.mysql  /data/mysql/ -R  /etc/init.d/mysql start 這樣一台mysql就啟動好了

2 lz4加速版:

yum install lz4 -y   # 先在2台主機上安裝這個壓縮工具,性能比gzip、bzip2強很多。

node1上備份:

innobackupex --user=root   --password=root   --socket=/var/lib/mysql/mysql.sock   --parallel=4   --no-timestamp   --stream=xbstream . | lz4 -B4 > /root/bak
scp /root/bak root@node2:/root   # 將/root/bak這個壓縮後的文件scp到目標主機node2,

然後去node2執行如下命令:

mkdir /tmp/mysql  cat /root/bak | lz4 -d | xbstream -x -C /tmp/mysql       innobackupex --apply-log /tmp/mysql/# 導入數據後,還要執行下整理操作  innobackupex --copy-back  /tmp/mysql/  # 將整理好的資料庫文件導入到原先的mysql datadir里    chown mysql.mysql  /data/mysql/ -R  /etc/init.d/mysql start 這樣一台mysql就啟動好了

3 管道加強版:

innobackupex --user=root   --password=root   --parallel=4   --socket=/var/lib/mysql/mysql.sock   --no-timestamp   --stream=xbstream . |  lz4 -B4 |  ssh root@node2   "cat - > /tmp/bak"

# 上面這條命令是直接壓縮並備份到遠程的/tmp目錄下

然後到node2上去還原:

mkdir /tmp/mysql  cat /tmp/bak | lz4 -d -B7 | xbstream -x -C /tmp/mysql
innobackupex --apply-log /tmp/mysql/# 導入數據後,還要執行下整理操作  innobackupex --copy-back  /tmp/mysql/  # 將整理好的資料庫文件導入到原先的mysql datadir里  chown mysql.mysql  /data/mysql/ -R  /etc/init.d/mysql start 這樣一台mysql就啟動好了

4 直接備份到遠程同時還原版: 【推薦使用方法4】

首先需要在node2上創建個/tmp/mysql目錄,不然node1備份文件發送過去沒目錄存放。

然後再node1上執行:

innobackupex --user=root   --password=root   --parallel=4   --socket=/var/lib/mysql/mysql.sock   --no-timestamp   --stream=xbstream . |  lz4 -B4 |  ssh node2   "cat - | lz4 -d -B7 | xbstream -x -C /tmp/mysql"