天天看點

mysql xtrabackup 主從_使用XtraBackup熱備份搭建MySQL主從同步

使用XtraBackup熱備份搭建MySQL主從同步

1 背景描述

生産環境一台MYSQL主庫,沒有搭建從庫,急需搭建從庫

每天已有innobackupex備份

2 方案

利用innobackupex全備和增量備份搭建MYSQL主庫

3 資料庫版本

主庫:mysql 5.5.54

從庫:mysql 5.7.25(為了以後更新)

4 搭建步驟

搭建的步驟如下圖所示:

mysql xtrabackup 主從_使用XtraBackup熱備份搭建MySQL主從同步

(1)将資料庫備份拷貝到從庫上

(2)在從庫上安裝好MYSQL資料庫,安裝過程略

(3)停止從庫的MYSQL執行個體,删除從庫資料庫裡面的檔案,保留目錄結構

1. 我的從資料庫安裝在/u02/my3306下, 目錄結構如下

$ tree -L 1.

├── data

├── log

├── my.cnf

├── run

└── tmp​

将data資料檔案,log中的binlog,ibdata1檔案均删除掉

2. 我的主庫的備份檔案如下:

# ll

total24drwxr-x--- 9 mysql mysql 4096 Nov 14 15:1420191110_0_full

drwxr-x--- 9 mysql mysql 4096 Nov 14 15:1420191111_1_incremental

drwxr-x--- 9 mysql mysql 4096 Nov 14 15:1520191112_2_incremental

drwxr-x--- 9 mysql mysql 4096 Nov 14 15:1520191113_3_incremental

drwxr-x--- 9 mysql mysql 4096 Nov 14 15:15 20191114_4_incremental

​# innobackupex --apply-log --redo-only 20191110_0_full

# innobackupex--apply-log --redo-only --incremental-dir=20191111_1_incremental 20191110_0_full

# innobackupex--apply-log --redo-only --incremental-dir=20191112_2_incremental 20191110_0_full

# innobackupex--apply-log --redo-only --incremental-dir=20191113_3_incremental 20191110_0_full

# innobackupex--apply-log --incremental-dir=20191114_4_incremental 20191110_0_full

# innobackupex--apply-log 20191110_0_full

# innobackupex--defaults-file=/u02/my3306/my.cnf --copy-back 20191110_0_full

4. 修改資料庫目錄屬組權限

# chown -R mysql.mysql /u02/my3306

5. 啟動資料庫

su - mysql -c "/usr/local/mysql/bin/mysqld_safe --defaults-file=/u02/my3306/my.cnf &"

6. 打開​​​​​20191114_4_incremental【最後一個增量備份目錄】下的 xtrabackup_binlog_info ,裡面有備份的時候主庫的binglog和postion。

$ catxtrabackup_binlog_info

mysql-bin.000617 31060438​

7. 在主庫上建立同步的賬号

# mysql -uroot -p -S /u02/my3306/run/mysql.sock

mysql> grant replication slave on *.* to 'repl'@'xxx' identified by 'xxxx';​

8. 在從庫上執行change master 指令

change master to master_host = 'xxx',master_user = 'repl', master_password = 'xxxx',master_port = 3306, master_log_file = 'mysql-bin.000617', master_log_pos = 31060438;​​

至此,主從搭建完成。​​

(4)若同步中出現以下報錯,需要執行以下指令

mysql xtrabackup 主從_使用XtraBackup熱備份搭建MySQL主從同步

# mysql_upgrade -u root -p -S /u02/my3306/run/mysql.sock

【主庫:5.5 從庫 5.7】​

(5)這個備份也可以配合binlog日志,恢複到指定時間點。

如果有誤删除資料的情況發生的話,也是可以通過這種方法,配和線上的binlog日志,恢複到指定的時間點。

比如場景如下:備份是在淩晨2點進行的,第二天中午11點,開發誤drop了一張表​​​。

步驟如下:

​​1. 先按照步驟1,2,3 搭建好一個應用了備份的資料庫

2. ​​把增量備份後的binlog日志解析成sql檔案,如

# mysqlbinlog --start-position=31060438 mysql-bin.000006 >> /tmp/tmp.sql​

#cat ​ /tmp/tmp.sql | grep -C 20 -i "drop table"

找到drop語句之前的binlog位置,加入位置為41060438

3. ​​ 然後将binlog日志恢複成sql檔案

# mysqlbinlog --start-position=31060438 --stop-position=41060438 mysql-bin.000006 > /tmp/tmp2019.sql​​

4. 資料庫中執行該sql檔案。

# mysql -uroot -p < ​ /tmp/tmp2019.sql​

5. 将drop表的資料導出,導到生産庫中​。