快速創建一個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"