mysql備份相關

Mydumper

安裝mydumper

yum -y install glib2-devel zlib-devel pcre-devel cmake mysql-devel
wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz  
tar zxvf mydumper-0.9.1.tar.gz;cd mydumper-0.9.1
cmake . && make && make install
如果報找不到mysql的錯,找到mysql_config 這個文件然后軟連接到
ln -s  /usr/bin/mysql_config /usr/local/mysql/bin/mysql_config
或者指定對應的變量  
cmake . -DMYSQL_INCLUDE_DIR=對應安裝目錄中的include文件夾
which mydumper #若報庫文件缺少,裝完數據庫后可將數據庫目錄下庫文件軟連或者復制到/usr/lib64目錄下即可,若安裝異常可確認zlib是否安裝了多個。

備份用戶授權

GRANT SELECT, RELOAD, FILE, SUPER, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, PROCESS,SHOW VIEW ON *.* TO 'voole_back'@'localhost' IDENTIFIED BY 'voole_back'

進行備份

mydumper -u $user -p $pass -B dianzanpingfen  -c -o $BACK_DIR -t 10 #dianzanpingfen為需要備份的數據庫 
mydumper -u $user -p $pass --trx-consistency-only --regex '^(?!(mysql|test|ptcheck|performance_schema))'  -c -o $BACK_DIR -t 10 #dianzanpingfen 為需要備份的數據庫 --regex是一個正則,里邊包括排除的庫

-B, --database              要備份的數據庫,不指定則備份所有庫
-T, --tables-list           需要備份的表,名字用逗號隔開
-o, --outputdir             備份文件輸出的目錄
-c, --compress              壓縮輸出文件
-e, --build-empty-files     如果表數據是空,還是產生一個空文件(默認無數據則只有表結構文件)
-x, --regex                 是同正則表達式匹配 'db.table'
-i, --ignore-engines        忽略的存儲引擎,用都厚分割
-h, --host                  連接的主機名
-u, --user                  備份所使用的用戶
-p, --password              密碼
-P, --port                  端口
-S, --socket                使用socket通信時的socket文件
-t, --threads               開啟的備份線程數,默認是4
-C, --compress-protocol     壓縮與mysql通信的數據

進行還原

myloader -d $BACK_DIR -o -u root -p 'mysql*()' -t 10  #還原,注意若mysql庫也還原,請先將原庫mysql庫提前備份,否則將覆蓋
備份文件需要找尋的數據同步點可查看備份文件夾內‘metadata’文件

Xtrabackup

安裝xtraback

yum -y install perl-DBD-mysql perl-DBI percona-xtrabackup-22 qpress
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

給用戶授權

GRANT SELECT, RELOAD, FILE, SUPER, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, PROCESS,SHOW VIEW ON *.* TO 'voole_back'@'localhost' IDENTIFIED BY 'voole_back'
flush privileges

備份

參數
    --parallel=2 制定多線程備份
    --no-timestamp 不生成時間戳目錄,而由自己指定目錄
全量備份(備份完成后可以對整個文件夾做壓縮)
    /usr/bin/innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --user=voole_back --password='voole_back' --slave-info --no-timestamp /opt/mysql_bak/base_backup
增量備份1
    /usr/bin/innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --user=voole_back --password=voole_back  --incremental-basedir=/opt/mysql_bak/base_backup --incremental /opt/mysql_bak/incremental/incre1
增量備份2
    /usr/bin/innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --user=voole_back --password=voole_back  --incremental-basedir=/opt/mysql_bak/incremental/incre1 --incremental /opt/mysql_bak/incremental/incre2

還原

解壓縮(到備份目錄里)
    for i in `find . -iname "*.qp"`; do qpress -d $i  $(dirname $i) && rm -f $i; done
全量恢復
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log --redo-only --use-memory=1G --user=voole_back  --password=voole_back  /opt/mysql_bak/base_backup
增量恢復1
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log --redo-only  --use-memory=1G  --user=my_back --password=mysql   /opt/mysql_bak/base_backup --incremental-dir=/opt/mysql_bak/incremental/incre1 
增量恢復2
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log  --redo-only --use-memory=1G  --user=my_back --password=mysql   /opt/mysql_bak/base_backup --incremental-dir=/opt/mysql_bak/incremental/incre2
最后恢復
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log --use-memory=1G --user=voole_back  --password=voole_back  /opt/mysql_bak/base_backup
最后還原
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --copy-back  --user=voole_back --password=voole_back /opt/mysql_bak/base_backup
更改還原后數據文件屬主屬組(具體需要更改數據庫的文件夾視情況而定)
    chown -R mysql.mysql var redolog undolog

mysqldump

常用語法

mysqldump [OPTIONS] database [table1] [table2]    備份某個數據庫的某些表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2]    備份備份多個數據庫
mysqldump [OPTIONS] --all-databases [OPTIONS]    備份所有數據庫

常用參數

-u,--user=name    備份用戶名
-p,--password[=name]    備份密碼
--single-transaction     在一個事務中執行備份,InnoDB中使用,保持備份數據一致,需確保沒有其他DDL語句執行,因為事務并不隔離DDL操作。
-l,--lock-tables    在非事務型數據庫備份,進行鎖表來保持備份數據一致性。于--single-transaction是互斥的,不能同時使用,如果混合引擎,則只能使用鎖表
-x,--lock-all-tables    鎖定所有的表,保證所有數據庫下所有需要備份的表都是一致的,--lock-tables只會鎖定一個db下的所有表,保證單個數據庫的備份數據是一致的。
--master-data=[1/2]    值為1時,備份文件中只記錄了change master 語句,值為2時,change master 以注釋的形式出現。當制定了此參數時,而未指定--single-transaction,則會自動使用--lock-all-tables。
-R,--routines    備份存儲過程
--triggers    備份觸發器
-E,--events    備份調度事件
--hex-blob    對數據庫中存在的不可讀類型,備份為十六進制。
--tab=path    在制定路徑下,生成兩個文件,一個為表結構.sql,一個為表數據.txt,數據文件中用tab隔開便于閱讀。
-w,--where='過濾條件'    單表導出時,指定條件。

備份用戶授權

GRANT SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT,SHOW VIEW,PROCESS ON *.* to backup@'localhost' IDENTIFIED BY 'mysql*()'

備份實例

mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events mc_orderdb > mc_orderdb.sql    備份mc_orderdb數據庫
mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events mc_orderdb order_master > order_master.sql    備份mc_orderdb 數據庫中的order_master表
mysqldump -ubackup -p --master-data=1 --single-transaction --routines --triggers --events --all-databases > mc.sql 備份所有的數據庫,此備份的change master 不會被注釋。
--tab 備份數據庫 mc_orderdb
    1、需要mysql對目錄有寫權限
    2、用戶需要寫文件權限 grant file on *.* to backup@'localhost';
    3、mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events --tab="/tmp/db_backup/mc_orderdb" mc_orderdb
--where 備份數據庫 mc_orderdb中的order_master表的一部分數據 
    1、mysqldump -ubackup -p --master-data=2 --single-transaction --where "order_id>1000 and order_id<1050" mc_orderdb order_master > order_master_1000.sql

如何回復mysqldump備份的數據庫

mysql -u -p dbname < backup.sql
mysql> source /tmp/backup.sql
恢復指定--tab的備份數據
    mysql > \. /tmp/mc_orderdb/region_info.sql
    mysql > load data infile '/tmp/mc_orderdb/region_info.txt' into table region_info;

如何進行指定時間點的恢復

1、先決條件
    具有指定時間點前的一個全備
    具有自上次全備后到指定時間點的所有二進制日志
2、恢復全備,查看全備的最后的點,此處為84882
3、查看對應的binlog日志,找到需要恢復的時間點。
    mysqlbinlog --base64-output=decode-rows -vv --start-position=84882 --database=mc_orderdb mysql-bin.000011 | grep -B3 DELETE
    查找位置為84882后的,數據庫為mc_orderdb的,刪除語句,然后找到需要恢復的時間點,此處為169348
4、將時間點中間的數據寫入到sql文件中
    mysqlbinlog --start-position=84882 --stop-position=169348 --database=mc_orderdb mysql-bin.000011 > mc_order_diff.sql
5、應用上一步得到的sql文件
    mysql -uroot -p mc_orderdb < mc_order_diff.sql

實時二進制日志備份

1、創建帳號
    grant replication slave on *.* to 'repl'@'localhost' identified by '123456';
2、創建目錄
    mkdir binlog_bak;cd binlog_bak
3、實時進行二進制日志備份,其實就是開啟了一個IO線程,和slave一樣。
    mysqlbinlog --raw --read-from-remote-server --stop-never --host localhost --port 3306 -urepl -p123456 mysql-bin.000010
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • MySQL備份與恢復的解決方案 目錄: 1、為什么要進行備份 2、備份的類型 3、備份需要考慮的因素 4、需要備份...
    BossHuang閱讀 1,199評論 0 1
  • 文/Bruce.Liu1 文章大綱備份概念1.1. 備份目的1.2. 備份方式1.3. 備份類型1.4. 備份對象...
    BruceLiu1閱讀 3,924評論 4 15
  • MySQL運維實踐 5.1-MySQL日志系統 什么是日志 日志(log)是一種順序記錄事件流水的文件 記錄計算機...
    極客圈閱讀 1,437評論 1 11
  • 標簽(空格分隔): Linux 運維 MySQL sql文件hellodb.sql 架構 MySQL被設計為一個單...
    uangianlap閱讀 717評論 0 1
  • 文/揚蹄 2017年11月6日 星期一 晴 “哎呀,你怎么還不找男朋友呀?這么大的姑娘,可以找啦!再不找等年紀大些...
    揚蹄閱讀 432評論 2 5