1. 程式人生 > >MySQL第六天(主從同步,數據讀寫分離)

MySQL第六天(主從同步,數據讀寫分離)

dsfa

day05
一、數據備份與恢復-增量備份和增量恢復
a.binlog日誌介紹(二進制文件):使用Mysql數據庫服務日誌文件類型的一種。記錄除查詢之外的sql命令。默認沒啟用

查詢的sql包括:select desc show

不是查詢的命令:insert update delete create drop grant revoke

b.啟用binlog日誌
如何啟用
日誌默認存放位置
/var/lib/mysql
日誌默認名稱
主機名-bin.000001
51-bin.000001 (大於500M自動生成000002)
51-bin.index #索引文件

修改日誌存儲位置和名稱?
mkdir /logdir
chown mysql /logdir
setenforce 0

vim /etc/my.cnf
server_id=51
#log-bin
log-bin=/logdir/plj ##指定日誌文件位置
binlog-format=”mixed” ###指定日誌保存類型,顯示sql命令的完整格式,若不添加只會記錄命令
#systemctl restart mysqld

查看日誌文件內容(用命令查看,因為是二進制文件)
]#mysqlbinlog binlog日誌 | grep -i insert
]#mysqlbinlog binlog日誌

e.日誌文件記錄sql命令的方式
時間點--start-datetime="yyyy-mm-dd hh:mm:ss"

--stop-datetime="yyyy-mm-dd hh:mm:ss"

偏移量 --start-position=數字
--stop-position=數字

]#mysqlbinlog [選項] binlog日誌 | mysql -uroot -p123456
日誌默認存放位置 /var/lib/mysql
日誌默認名稱 主機-bin.000001
51-bin.000001 binlog日誌文件(大於500M自動生成000002)
51-bin.index 索引文件

f.執行日誌文件中的sql命令恢復數據
#mysqlbinlog [選項] 日誌名 | mysql -uroot -p
mysql> delete from db3.user where id=54;

[root@db1 logdir]# mysqlbinlog --start-position=328 --stop-position=1102 plj.000001 | mysql -uroot -p654321

g.手動創建新的文件
mysql>flush logs; #刷新一次生成一個 哪個編號大日誌往哪個存
mysql> system ls /logdir;
plj.000001 plj.000002 plj.index

[root@db1 logdir]# mysql -uroot -p123456 -e "flush logs" #命令行直接執行sql命令
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@db1 logdir]# ls
plj.000001 plj.000002 plj.000003 plj.index

[root@db1 logdir]# ls
plj.000001 plj.000002 plj.000003 plj.index
[root@db1 logdir]# systemctl restart mysqld
[root@db1 logdir]# ls
plj.000001 plj.000002 plj.000003 plj.000004 plj.index

]#systemctl restart mysqld

#]mysqldump -uroot -p654321 --flush-logs db3 > db3.sql #備份時生成新的日誌文件
f.刪除日誌文件
f.1 使用sql命令刪除
mysql> reset master;
Query OK, 0 rows affected (0.21 sec)
mysql> system ls /logdir;
plj.000001 plj.index

mysql> purge master logs to "plj.000005"; #刪除指定000005編號之前的日誌所有index(不包括000005日誌文件)
Query OK, 0 rows affected (0.14 sec)
mysql> system ls /logdir;
plj.000005 plj.index

f.2 使用系統刪除
rm -rf 日誌文件

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++==
6.2 安裝第3方軟件提供的命令,對數據做增量備份
[root@db1 09.mysql]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
警告:libev-4.15-1.el6.rf.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 6b8d79e6: NOKEY
準備中... ################################# [100%]
軟件包 libev-4.15-1.el6.rf.x86_64 已經安裝
[root@db1 09.mysql]# rpm -ivh percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
警告:percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm: 頭V4 DSA/SHA1 Signature, 密鑰 ID cd2efd2a: NOKEY
準備中... ################################# [100%]
軟件包 percona-xtrabackup-24-2.4.7-1.el7.x86_64 已經安裝

[root@db1 09.mysql]# rpm -qa |grep percona
percona-xtrabackup-24-2.4.7-1.el7.x86_64
[root@db1 09.mysql]# rpm -ql percona-xtrabackup-24-2.4.7-1.el7.x86_64
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-24-2.4.7
/usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz

完全備份
[root@db1 09.mysql]# innobackupex --user root --password 123456 --databases="mysql sys performance_schema db5" /alldir --no-timestamp ##/alldir為備份目標目錄,且必須為空,如果需要日期目錄,不需要--no-timestamp
[root@db1 09.mysql]# ls /alldir
backup-my.cnf db5 ib_buffer_pool ibdata1 mysql performance_schema sys xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_info xtrabackup_logfile

完全恢復(/var/lib/mysql必須為空)
[root@db1 09.mysql]# rm -rf /var/lib/mysql

[root@db1 09.mysql]# mkdir /var/lib/mysql

[root@db1 09.mysql]# innobackupex --user root --password 123456 --databases="mysql sys performance_schema db5" --apply-log /alldir/ ##恢復日誌

[root@db1 09.mysql]# innobackupex --user root --password 123456 --databases="mysql sys performance_schema db5" --copy-back /alldir/ ##恢復數據

[root@db1 09.mysql]# ls /var/lib/mysql
db5 ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1 ibtmp1 mysql performance_schema sys xtrabackup_binlog_pos_innodb xtrabackup_info

[root@db1 09.mysql]# chown -R mysql:mysql /var/lib/mysql

[root@db1 09.mysql]# ls -ld /var/lib/mysql
drwxr-xr-x. 6 mysql mysql 4096 2月 27 04:24 /var/lib/mysql

[root@db1 09.mysql]# systemctl restart mysqld

[root@db1 09.mysql]# mysql -uroot -p123456
mysql>

增量備份:
1.有一次完全備份
]#innobackupex --user root --password 123456
--databases="mysql sys performance_schema db5" /fullbak --no-timestamp
insert into db5.t1 values(400);
select * from db5.t1;

2.增量備份:改變數據後實行增量備份(備份新生成的數據)
]#innobackupex --user root --password 123456
--databases="mysql sys performance_schema db5"
--incremental /onedir
--incremental-basedir=/fullbak --no-timestamp

insert into db5.t1 values(500);
select * from db5.t1;

3.第二次增量備份 改變數據後實行增量備份
[root@db1 09.mysql]# innobackupex --user root --password 123456 --databases="mysql sys performance_schema db5" --incremental /twodir --incremental-basedir=/onedir --no-timestamp

增量恢復數據?(第一次,第二次,第三次備份的序列號和數據,恢復(合並)到第一次備份目錄下 ##序列號和數據合並)
--applay-log 恢復日誌
--redo-only 合並日誌
--incremental-dir=目錄名 恢復數據時,第幾次增量備份時使用的備份目錄

1.清空數據庫目錄
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
2.恢復日誌(按順序恢復:完全備份,第二次增量備份,第三次增量備份,第四次一直往後推的順序合並)
]#innobackupex --user root --password 123456
--databases="mysql sys performance_schema db5"
--apply-log --redo-only /fullbak

]#innobackupex --user root --password 123456
--databases="mysql sys performance_schema db5"
--apply-log --redo-only /fullbak --incremental-dir="/onedir"

innobackupex --user root --password 123456
--databases="mysql sys performance_schema db5"
--apply-log --redo-only /fullbak --incremental-dir="/twodir"

3.拷貝備份數據到數據庫目錄下
]#innobackupex --user root --password 123456
--databases="mysql sys performance_schema db5"
--copy-back /fullbak

4.修改數據庫目錄的所有者所有組
]#chown -R mysql:mysql /var/lib/mysql
5.重啟數據庫服務
systemctl stop mysqld

6 查看數據
mysql -uroot -p123456 db5
mysql>show tables;

]#innobackupex --user root --password 123456
--databases="mysql sys performance_schema db5"
--incremental /firstdir
--incremental-basedir=/fullbak --no-timestamp

增量備份工作原理?
innobackupex 對innodb存儲引擎的能夠實現增量備份。
innodb存儲引擎 有事務日誌文件記錄sql操作和數據信息

/var/lib/mysql/
ib_logfile0 ##存放sql命令操作
ib_logfile1 ##存放sql命令操作
ibdata1 ##存放數據信息

LSN(序列號) ##ib_logfile0存放的sql命令操作從哪到哪 變成序列號從哪到哪(範圍)

備份目錄下:
xtrabackup_checkpoints (記錄LSN) ib_logfile0存放的sql命令操作從哪到哪 變成序列號從哪到哪(範圍),用於與上次備份的lsn文件做比較
xtrabackup_logfile (記錄SQL)
ibdata1 (數據信息)
數據 在對應庫的文件夾裏

從完全備份文件中恢復某個表的記錄
1.1做完全備份
[root@db1 ~]# innobackupex --user root --password 123456 --databases="db6" /db6allbak --no-timestamp
[root@db1 ~]# ls /db6allbak/db6/
a.frm a.ibd b.frm b.ibd db.opt
[root@db1 ~]# ls /var/lib/mysql/db6
a.frm a.ibd b.frm b.ibd db.opt

模擬刪除:
mysql>drop table db6.a;

2.2 恢復步驟
--export
import
mysql>alter table 庫名.表名 discard

1導出表信息
innobackupex --user root --password 123456 --databases="db6" --apply-log --export /db6allbak ##db6allbak為導出表目標目錄
]#ls /db6allbak/db6/
a.cfg a.exp a.frm a.ibd b.cfg b.exp b.frm b.ibd db.opt

2.建表,刪除表空間(表結構必須和刪除之前的結構一樣)
mysql> create table db6.a(name char(10));
Query OK, 0 rows affected (0.29 sec)
mysql>alter table db6.a discard tablespace; ##刪除空表間文件ibd
[root@db1 sys]# ls /var/lib/mysql/db6/
a.frm b.frm b.ibd c.frm c.ibd db.opt

4.備份的表信息文件拷貝到數據庫目錄下,並修改所有者和組為mysql
]#cp /db6allbak/db6/a.{cfg,exp,ibd} /var/lib/mysql/db6/
]#chown mysql:mysql /var/lib/mysql/db6/a.*
[root@db1 sys]# ls /var/lib/mysql/db6/
a.cfg a.exp a.frm a.ibd b.frm b.ibd c.frm c.ibd db.opt

5.導入表空間
mysql>alter table db6.a import tablespace;

6.查看表記錄
mysql>select * from db6.a
+++++++++++++++++++++++++++++++=

MySQL第六天(主從同步,數據讀寫分離)