標籤:
Database Backup和恢複是資料庫管理工作中非常重要的一個部分。
筆者常用的兩個備份工具是mysqldump (邏輯備份)和 Xtrabackup (物理備份)。
對於前者一般是用在淩晨的業務低峰期的定時任務中對資料庫進行全備份;這樣做的好處是匯出的資料是全SQL 文本,通過管道GZIP 壓縮後能夠大大的節省磁碟空間(當然備份一般會上傳異地伺服器儲存)。mysqldumpd 缺點是比較耗費時間,筆者建議資料量在50GB以內的可以使用該工具,耗時尚可接受;但是資料量超過70GB時,不建議使用該工具。
對於後者使用不太頻繁,該工具也可以產生一致性備份,用於搭建主從環境。針對資料量較大的(100GB以上,甚至數百GB)資料庫,備份時間上Xtrabackup的優勢非常明顯,並且不會影響線上業務。
下面以搭建主從環境為例,簡單介紹 下 Xtrabackup 的安裝和使用。示範版本為 percona-xtrabackup-2.1.9 ,支援 MySQL 5.5 5.6。
1.安裝依賴軟體包
yum -y install perl perl-devel libaio libaio-devel perl-DBI perl-DBD-MySQL perl-TermReadKey perl-Time-HiRes
2.安裝xtrabackup
解壓tar包到安裝目錄,
tar -zxvf percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz -C /usr/local/
重新命名目錄
cd /usr/local/
mv percona-xtrabackup-2.1.9-744-Linux-x86_64 xtrabackup
3.執行備份之前,先配置環境變數,否則報錯
export PATH=$PATH:/usr/local/xtrabackup/bin
其中設定檔的路徑和密碼請根據自己的實際環境設定
備份資料檔案
/usr/local/xtrabackup/bin/innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=A2sW13 /ptbak/
將binlog 應用到資料檔案,這是恢複資料前必須完成的步驟
/usr/local/xtrabackup/bin/innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=A2sW13 --apply-log /ptbak/2016-08-09_03-49-02/
拷貝備份資料到目標資料庫
scp -r /ptbak/ 192.168.80.12:/root/
3.恢複資料錢準備工作
先在目標庫上停掉mysql進程
service mysqld stop
備份或者刪原資料目錄 (以 /usr/local/mysql/data 為樣本)
mv /usr/local/mysql/data/ /usr/local/mysql/data.bak/
或者 rm -rf /usr/local/mysql/data
(刪除資料之前請三思,線上環境不建議這麼幹)
建立新的資料目錄
mkdir -p /usr/local/mysql/data
4.恢複資料,--copy-back 選項的作用是從備份目錄拷貝資料,日誌到my.cnf檔案裡規定的目錄下
/usr/local/xtrabackup/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /root/2016-08-09_03-49-02/
修改資料目錄許可權
chown -R mysql:mysql /usr/local/mysql/data
5.刪除ib_logfile檔案,否則mysql啟動報錯
cd /usr/local/mysql/data
rm -rf ib_logfile*
啟動mysql
service mysql start
6.目標資料庫啟動後,將擁有和來源資料庫相同的root密碼;建議修改root密碼
SET PASSWORD FOR ‘root‘@‘localhost‘ = PASSWORD(‘xxxxxx‘);
7.查看備份的一致性資訊
cat /root/2016-08-09_03-49-02/xtrabackup_binlog_info
mysql-bin.000969307486338
master_log_file=‘mysql-bin.000969‘,
master_log_pos=307486338;
8.設定啟用主從複製
主庫上建立複製使用者和許可權
GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘192.168.80.12‘ identified by ‘123456‘;
在從庫上啟動複製進程
change master to
master_host=‘192.168.80.11‘,
master_port=3306,
master_user=‘rpel‘,
master_password=‘123456‘,
master_log_file=‘mysql-bin.000969‘,
master_log_pos=307486338;
>start slave;
不妥之處,敬請指教!
使用 Xtrabackup 部署 MySQL 從庫