使用xtrabackup連接:http://pan.baidu.com/s/1miFpS9M 密碼:86dx 連接:http://pan.baidu.com/s/1o7GXBBW 密碼:ue2fmysql
xtrabackup 只能備份引擎爲innodb的數據sql
後來innobackeupex 則能夠備份mysiam數據庫
(使用mysqldump 備份大量數據時會很慢,使用xtrabackup則很快,且把全部數據文件都會備份ls /data/mysql)數組
備份前保證mysql服務開啓安全
mysql 的數據目錄個人放在/data/mysql服務器
1、使用xtrabackup全量備份過程:架構
1.安裝app
1.1 安裝rpm包(只有下載這個rpm,才能)ide
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpmspa
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
通常業務操做:先備份後作主從,備份儘可能在凌晨操做.
!!!!以上這種操做的備份方式是全量備份執行過程!!
2、增量備份
啓動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