十一、數據備份與恢復


一、數據備份相關概念
1.1 數據備份的目的? 數據被誤刪除 或 設備損害導致數據丟失 ,是備份文件恢復數據。
1.2數據備份方式?
物理備份: 指定備份庫和表對應的文件
cp -r /var/lib/mysql /opt/mysql.bak
cp -r /var/lib/mysql/bbsdb /opt/bbsdb.bak

rm -rf /var/lib/mysql/bbsdb

cp -r /opt/bbsdb.bak /var/lib/mysql/bbsdb
chown -R mysql:mysql /var/lib/mysql/bbsdb
systemctl restart mysqld

51 scp /opt/mysql.bak 192.168.4.51:/root/

52 rm -rf /var/lib/mysql
cp -r /root/mysql.bak /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
systemctl restart mysqld

邏輯備份: 在執行備份命令時,根據備份的庫表及數據生成對應的sql命令,把sql存儲到指定的文件里。

1.3數據備份策略?
完全備份 備份所有數據(一張表的所有數據 一個庫的所有數據 一台數據庫的所有數據)

備份新產生數據(差異備份 和 增量備份 都備份新產生的數據 )
差異備份 備份自完全備份后,所有新產生的數據。
增量備份 備份自上次備份后,所有新產生的數據。

1.4工作中如何對數據做備份?
1.4.1 選擇備份策略:
完全備份+差異備份
完全備份+增量備份
1.4.2 數據備份時間 數據服務器訪問量少的時候執行備份
1.4.3 數據備份頻率 根據數據產生量,決定備份頻率
1.4.4 備份文件的命名 庫名-日期.sql
1.4.5 備份文件的存儲設置 准備獨立的存儲設備存儲備份文件
1.4.6 如何執行備份 使用周期性計划任務執行本機腳本

完全備份+差異備份
06:00 t1 文件名 數據
1 完全 10 1.sql 10
2 差異 3 2.sql 3
3 5 3.sql 8
4 2 4.sql 10
5 7 5.sql 17
6 4 6.sql 21
7 差異 1 7.sql 22

完全備份+增量備份
06:00 t1 文件名 數據
1 完全 10 1.sql 10
2 增量 3 2.sql 3
3 5 3.sql 5
4 2 4.sql 2
5 7 5.sql 7
6 4 6.sql 4
7 增量 1 7.sql 1
+++++++++++++++++++++++++++++
二完全備份與完全恢復
2.1 完全備份數據
]# mkdir -p /mydatabak
]# mysqldump -uroot -p654321 studb > /mydatabak/studb.sql
]# mysqldump -uroot -p654321 db3 user3 > /mydatabak/db3-user3.sql

]#cat /mydatabak/studb.sql
]#cat /mydatabak/db3-user3.sql

2.3 完全恢復數據
]# mysql -uroot -p654321 studb < /mydatabak/studb.sql
]# mysql -uroot -p654321 db3 < /mydatabak/db3-user3.sql

使用source 命令恢復數據
mysql> create database bbsdb;
mysql> use bbsdb;
mysql> source /mydatabak/studb.sql


每周一晚上18:00備份studb庫的所有數據到本機的/dbbak目錄下,備份文件名稱要求如下 日期_庫名.sql。

]#vim /root/bakstudb.sh
#!/bin/bash
day=`date +%F`
if [ ! -e /dbbak ];then
mkdir /dbbak
fi
mysqldump -uroot -p654321 studb > /dbbak/${day}_studb.sql
:wq
]# chmod +x /root/bakstudb.sh
]#/root/bakstudb.sh
]# ls /dbbak/*.sql

]#crontab -e
00 18 * * 1 /root/bakstudb.sh &> /dev/null
:wq


3.1 啟動mysql數據庫服務的binlog日志文件 實現實時增量備份
3.1.1 binlog日志介紹:是mysql數據庫服務日志文件的一種,默認沒有啟用。記錄除查詢之外的sql命令。
查詢命令例如: select show desc
寫命令例如: insert update delete create drop

3.1.2 啟用binlog日志
]#vim /etc/my.cnf
[mysqld]
server_id=51
log-bin
binlog-format="mixed"
:wq
]# systemctl restart mysqld

]# ls /var/lib/mysql/主機名-bin.000001
]# cat /var/lib/mysql/主機名-bin.index

3.1.3 查看binlog日志文件內容
]#mysqlbinlog /var/lib/mysql/mysql51-bin.000001

****可以自定義binlog日志文件存儲的位置和文件名稱
]#mkdir /mylog
]#chown mysql /mylog
]#setenforce 0

]#vim /etc/my.cnf
[mysqld]
server_id=51
#log-bin
log-bin=/mylog/plj
binlog-format="mixed"
:wq

]# systemctl restart mysqld
]#ls /mylog/plj.*
plj.000001 plj.index

3.1.4 手動生成新的日志文件方法
*默認日志文件大於500M時自動創建新日志文件

]# systemctl restart mysqld

mysql> flush logs;

]# mysql -uroot -p密碼 -e "flush logs"

]# mysqldump -uroot -p密碼 --flush-logs 庫名 > 目錄/xx.sql

使用一個新的日志文件 記錄 新創建的webdb庫的初始操作。
mysql> flush logs;
mysql> create database webdb; create table webdb.a(id int);
mysql> insert into webdb.a values(100);
mysql> insert into webdb.a values(101);
mysql> flush logs;
刪除webdb庫,使用 binlog日志文件恢復webdb庫的數據。
mysql> drop database webdb;

3.1.7 使用binlog日志恢復數據
]#mysqlbinlog /mylog/plj.000008 | mysql -uroot -p654321

3.1.5 刪除已有的binlog日志文件

mysql> purge master logs to "binlog文件名;
刪除指定日志文件之前的日志文件
mysql> purge master logs to "plj.000005";

mysql> reset master ; 刪除所有的日志文件重新生成第一個日志文件
mysql> show master status; 顯示當前正在使用的binlog日志信息

]#mysqlbinlog 日志文件名;

3.1.6 binlog日志記錄sql命令方式
記錄方式有2種: 偏移量 、記錄sql命令執行的時間

指定偏移量范圍選項
--start-position=偏移量的值
--stop-position=偏移量的值

指定時間范圍選項
--start-datetime="yyyy-mm-dd hh:mm:ss"
--stop-position="yyyy-mm-dd hh:mm:ss"
++++++++++++++++++++++++
讀取日志文件指定范圍內的sql命令恢復數據。
]# mysqlbinlog --start-position=293 --stop-position=1450 plj.000001 | mysql -uroot -

p654321
++++++++++++++++++++++++++++

]#mysqldump -uroot -p654321 --flush-logs db3.user3 > /root/user3.sql

mysql> insert into db3.user3 values("a","b","c");
mysql> insert into db3.user3 values("aa","b","c");
mysql> insert into db3.user3 values("ab","b","c");
mysql> insert into db3.user3 values("ac","b","c");

mysql> delete from db3.users;
mysql> select * from db3.user3;

]#mysql -uroot -p654321 db3 < /root/user3.sql
mysql> select * from db3.user3;

]#mysqlbinlog --start-position=偏移量的值
--stop-position=偏移量的值 日志文件名 | mysql -uroot -p654321

mysql> select * from db3.user3;
+++++++++++++++++++++++++++++++++
3.2 安裝第3方軟件提供備份命令,對數據做增量備份
軟件介紹 Percona 開源軟件 在線熱備不鎖表 適用於生成環境。

安裝軟件
]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
]# yum -y install perl-DBD-mysql perl-Digest-MD5
]# rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
]# rpm -ql percona-xtrabackup-24

提供2個備份命令
/usr/bin/innobackupex命令集成了命令xtrabackup,所以可以支持MYISAM存儲引擎

/usr/bin/xtrabackup命令僅支持InnoDB和XtraDB存儲引擎的表

innobackupex備份命令的使用格式?
]#innobackupex <選項>
]# man innobackupex

常用選項?
--user 用戶名
--password 密碼
--databases="庫名"
"庫名1 庫名2"
"庫名.表名"
--no-timestamp 不使用時間戳做備份文件的子目錄名

+++++++++++++++innobackupex完全備份 與 完全恢復
]# innobackupex --user root --password 654321 \
--databases="mysql performance_schema sys gamedb" /allbak --no-timestamp

++++++++++++++完全恢復
--copy-back

]# rm -rf /var/lib/mysql
]# mkdir /var/lib/mysql
]# innobackupex --user root --password 654321 --copy-back /allbak
]# chown -R mysql:mysql /var/lib/mysql
]# systemctl restart mysqld
]#mysql -uroot -p654321
mysql> show databases;
mysql> select * from gmaedb.t1;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM