1. 程式人生 > >mysql擴展:xtrabackup備份和做主從

mysql擴展:xtrabackup備份和做主從

mysql主從

使用xtrabackup鏈接:http://pan.baidu.com/s/1miFpS9M 密碼:86dx 鏈接:http://pan.baidu.com/s/1o7GXBBW 密碼:ue2f

xtrabackup 只能備份引擎為innodb的數據

後來innobackeupex 則可以備份mysiam

(使用mysqldump 備份大量數據時會很慢,使用xtrabackup則很快,且把所有數據文件都會備份ls /data/mysql)

備份前保證mysql服務開啟

技術分享圖片

mysql 的數據目錄我的放在/data/mysql

一、使用xtrabackup全量備份過程:

1.安裝

1.1 安裝rpm包(只有下載這個rpm,才能)

rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

1.2 使用yum 下載xtrabackup

yum list |grep xtrabackup (過濾所需的包)

安裝: yum install -y percona-xtrabackup

(安裝完後使用備份的命令:innobackupex)

2.mysql中創建備份用戶:

mysql -uroot -p123456

2.1 GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backuser'@'localhost' identified by '123456';

技術分享圖片

2.2 刷新權限操作(創建完用戶時操作)

flush privileges;

(刷新完後退出mysql)

3.備份操作:

3.1 創建備份目錄:

mkdir /data/backup

技術分享圖片

3.2 執行備份命令:

innobackupex --defaults-file=/etc/my.cnf --user=backer --passwork='123456' /data/backup

(--defaults-file=/etc/my.cnf 這個選項是要放在所有的參數之前,文件路徑由每個人設定的配置文件為主,且只有指定它才可以找到datadir

技術分享圖片


的路徑,就是mysql服務的數據目錄文件。)

執行命令後報錯:

技術分享圖片

問題原因是它自動的去找它默認的.sock(/var/lib/mysql/mysql.sock)文件。所以在命令中我們要指定我們定義的.sock文件路徑。

innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456' -S /tmp/mysql.sock /data/backup

(/tmp/mysql.sock是我在配置文件my.cnf中定義的)

技術分享圖片

3.3查看備份文件:

cd /data/backup/

ls

du -sh *

技術分享圖片

原文件和備份文件對比:

技術分享圖片

(備份出來的文件不能直接復制至mysql的數據文件直接使用。因為備份文件是有自帶格式的。)

4.數據恢復

4.1 停止mysql服務:

/etc/init.d/mysqld stop

技術分享圖片

4.2刪除mysql數據庫文件(datadir的路徑文件)

刪除原數據:(為了安全還是先把原數據目錄文件復制移動)

mv /data/mysql /data/mysql.bak

mkdir /data/mysql

chown -R mysql:mysql /data/mysql //指定屬主和屬組,因為原來文件的屬主和屬組都是mysql

(不/data/mysql/下的所有文件的屬主和屬組修改成mysql,則在啟動服務時無法啟動,出現下圖的錯誤:(chown -R ,-R是針對目錄,作用是級聯更改)

技術分享圖片

)

4.3恢復數據:

(1)相當初始化步驟:

innobackupex --use-memory=512M --apply-log

2018-05-13_11-05-07

(

--use-memory= 這個選項是為了加快備份速度的,分配大小主要看我們機器內容的大小而定,--apply-log 指定具體備份數據文件,因為我們備份的數據文件是以時間點命名的。)

(2)真正備份命令:

innobackupex --defaults-file=/etc/my.cnf --copy-back /data/backup/

2018-05-13_11-05-07

(--copy-back 指定備份文件路徑,備份目錄為全量備份)

技術分享圖片

(ibdatal是絕對不能刪除的,真正存儲數據的文件)

恢復完數據後,數據的屬主和數組要修改為mysql 否則啟動不了服務。

chown -R /data/mysql

一般業務操作:先備份後做主從,備份盡量在淩晨操作.

!!!!以上這種操作的備份方式是全量備份執行過程!!

二、增量備份

啟動mysql服務:且同用上面操作的mysql備份用戶。

1.創建備份目錄:mkdir /data/backup/

2.先全量備份:

innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456' -S /tmp/mysql.sock /data/backup

技術分享圖片

技術分享圖片

3.模擬增量備份:

3.1 創建 一個數據庫,並導入數據:

mysql -uroot -p123456 -e "create database dbbackup"

mysqldump -uroot -p123456 zrlog >/tmp/zrlog.sql

mysql -uroot -p123456 dbbackup < /tmp/zrlog.sql

技術分享圖片

3.2 增量備份:

3.2.1 第一次增量備份

innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456' -S /tmp/mysql.sock --incremental /data/backup --incremental-basedir=/data/backup/全量備份文件(2018-05-13_15-09-13)

(要註意的是--incremental和--incremental-basedir,--incremental-basedir後面加的是全量備份文件的路徑)

執行命令後在/data/backup/生成一個文件,大小為新創數據庫內容大小:

技術分享圖片

3.2.1 第二次增量備份


創建 一個數據庫,並導入數據:

mysql -uroot -p123456 -e "create database dbbackup2"

mysql -uroot -p123456 dbbackup2 < /tmp/zrlog.sql

備份命令:(和第一次增量備份的命令基本一樣,但是最後備份目錄是基於第一次增量備份目錄之上的)

innobackupex --defaults-file=/etc/my.cnf --user=backuser --password='123456' -S /tmp/mysql.sock --incremental /data/backup --incremental-basedir=/data/backup/第一次增量備份目錄

技術分享圖片

此時就有了一個全量備份文件和兩個增量備份文件:

技術分享圖片

4.數據恢復

4.1 停止mysql服務:/etc/init.d/mysqld stop

技術分享圖片

4.2 刪除mysql 原數據

rm -rf /data/mysql/*

4.3 數據恢復加載初始化(類似初始化過程)

4.3.1 先全備初始:

innobackupex --apply-log --redo-only /data/backup/全量備份目錄

(innobackupex --apply-log --redo-only /data/backup/2018-05-13_15-09-13 >/tmp1.log 2> /tmp/1.log)

註意:比僅僅全量備份初始化多了 --redo-only 選項,>/tmp1.log 2> /tmp/1.log是把輸出放置一個文件(正確或錯誤輸出)

4.3.2 第一次增量備份初始:

innobackupex --apply-log --redo-only /data/backup/全量備份目錄 --incremental-dir=/data/backup/第一次增量備份目錄

4.3.2 第二次增量備份初始:

innobackupex --apply-log /data/backup/全量備份目錄 --incremental-dir=/data/backup/第二次增量備份目錄

(這一步的時候不需要--redo-only選項

4.3.3 執行應用操作:

innobackupex --apply-log /data/backup/全量備份目錄

技術分享圖片

4.4 真正備份命令:

innobackupex --copy-back /data/backup/全量備份文件

(執行完命令後可以發現我們增量的數據量文件)

技術分享圖片

最後執行一下 chown -R mysql:mysql /data/mysql 修改屬主和數組,否則啟動不了mysql服務。

註意:

1.在進行增量備份的時候,第一次增量備份應基於全量備份之上,第二次基於第一增量備份之上,依次類推。

2.當我們增量備份都是在增加數據沒有刪除數據的情況下,我們恢復數據時可以直接初始化全量備份和最後一次增量備份即可。最後執行innobackupex --apply-log /data/backup/全量備份目錄和innobackupex --copy-back /data/backup/全量備份文件

一般企業mysql的架構用的是哪一種呢?

主從

innobackex 要求數據庫版本在5.6以上



使用 Xtrabackup 在線對MySQL做主從復制

http://seanlook.com/2015/12/14/mysql-replicas/ 參考

1.主庫操作:

1.1 創建復制賬號:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_ali'@'192.168.5.%' IDENTIFIED BY 'slave_ali_pass';

mysql> FLUSH PRIVILEGES;

1.2 賦予備份用戶權限:

mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppass';

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT,PROCESS,SUPER ON *.* TO 'bkpuser'@'localhost';

mysql> FLUSH PRIVILEGES;

1.3.全量備份

innobackupex --defaults-file=/opt/mysql/my.cnf --host=localhost --port=3306 --user=bkpuser --password=${BKP_PASS} /data/backup/mysql

把全量備份目錄復制到(做從庫)的目錄,rsync

2.全量備份(從庫上操作)

在恢復的數據庫服務器(從庫)上:

2.1 恢復準備

$ innobackupex --use-memory=16G --apply-log 全量備份文件

2.2 確認數據庫是關閉的,並且datadir,目錄下為空

$ innobackupex --defaults-file=/opt/mysql/my.cnf --use-memory=16G --copy-back 全量備份文件

2.3數據執行copy-back完成數據恢復後

修改數據文件的屬性:

chown -R mysql.mysql /opt/mysql_data

3.啟動從庫

3.1 啟動數據庫,註意看日誌

/opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/my.cnf &

提示:如果你不確定這個庫是誰的從庫,保守起見加上--skip-slave-start啟動,興許能防止數據不一致。

3.2change master

登錄數據庫:

$ mysql -uslave_ali -p'slave_ali_pass' -S /opt/mysql_data/mysql.sock

mysql> change master to master_host=MASTER_HOST, master_port=3306,

master_user='slave_ali',master_password='slave_ali_pass', master_log_file='mysql-bin.000135', master_log_pos=262484673;

上面的 master_log_file 和 master_log_pos 即是輸出的值,也可以在新的數據目錄下xtrabackup_binlog_info找到信息。

3.3驗證同步延遲

從庫執行 show slave status\G

mysql擴展:xtrabackup備份和做主從