第三周作業(yè):http://www.itdecent.cn/p/34a47ebd7842
1、總結(jié)mysql常見的存儲引擎以及特點。
答:常見的有InnoDB、MyISAM、Mariadb 。
不常見的percona : TokuDB myrocks mongodb,ARCHIVE、NDB、CSV、黑洞、MEMORY、,Merge。

innodb:
從mysql 5.5之后 默認建表的引擎就是innodb,
主要的特點:插入緩沖(insert buffer),二次寫(double write),自適應(yīng)哈希索引(ahi),預讀(read ahead)。獨有innodb_buffer_pool,LRU算法,刷臟頁checkpoint技術(shù)。事務(wù)、回滾、奔潰修復能力和多版本并發(fā)控制的事務(wù)安全,是Mysql是第一個提供外鍵約束的表引擎。支持自動增長列AUTO_INCREMENT。InnoDB存儲引擎特別適合處理多重并發(fā)的更新請求,InnoDB存儲引擎是唯一支持事務(wù)的標準MySQL存儲引擎,自動災難恢復。
MyISAM:
MyISAM存儲引擎的優(yōu)勢在于占用空間小,處理速度快,缺點是不支持事務(wù)和并發(fā)性。不支持事務(wù),不支持外鍵。MyISAM是非聚集索引,也是使用B+Tree作為索引結(jié)構(gòu),索引和數(shù)據(jù)文件是分離的,索引保存的是數(shù)據(jù)文件的指針。主鍵索引和輔助索引是獨立的。MyISAM用一個變量保存了整個表的行數(shù),執(zhí)行上述語句時只需要讀出該變量即可,速度很快(注意不能加有任何WHERE條件);MyISAM支持全文索引,MyISAM表格可以被壓縮后進行查詢操作,MyISAM支持表級鎖,可以不用設(shè)置主鍵索引。
MEMORY:
使用存儲在內(nèi)存中的內(nèi)容來創(chuàng)建表,而且所有數(shù)據(jù)也放在內(nèi)存中。
MEMORY表不支持VARCHAR、BLOB、TEXT數(shù)據(jù)類型,因為這種表類型按固定長度的記錄格式存儲。此外,如果使用版本4.1.0之前的MySQL,這不支持自動增長列。MEMORY存儲引擎默認使用哈希(HASH)索引。其速度要比使用BTREE索引快。在內(nèi)存中一旦宕機全部丟失。
tokudb:
高達25x的數(shù)據(jù)壓縮,快速插入,使用免讀復制消除從延遲,熱模式變化,熱索引創(chuàng)建——當索引被添加到表中時,TokuDB表支持插入、刪除和查詢,沒有停機時間,熱列添加、刪除、展開和重命名——當alter table添加、刪除、展開或重命名列時,TokuDB表支持插入、刪除和查詢,而不需要停機時間,在線備份。mysql 不支持tokudb引擎 。mariadb自帶tokudb引擎。
Merge:許MySQL DBA或開發(fā)人員將一系列等同的MyISAM表以邏輯方式組合在一起,并作為1個對象引用它們。對于諸如數(shù)據(jù)倉儲等VLDB環(huán)境十分適合。
mariadb:
Aria(原名Maria) 存儲引擎,Aria 存儲引擎是默認被編譯進MariaDB 5.1里的,并且在mysqld啟動的時候就要求同時啟動.內(nèi)部的磁盤表是Aria表格式而不是MyISAM表格式.這將使某些GROUP BY和DISTINCT請求速度更快,因為Aria有比MyISAM更好的緩沖機制.包含Aria是MariaDB 5.1和MySQL 5.1之間的一個不同。
2、MySQL日志各類總結(jié)
答:
1:重做日志(redo log)
確保事務(wù)的持久性。redo日志記錄事務(wù)執(zhí)行后的狀態(tài),用來恢復未寫入data file的已成功事務(wù)更新的數(shù)據(jù)。防止在發(fā)生故障的時間點,尚有臟頁未寫入磁盤,在重啟mysql服務(wù)的時候,根據(jù)redo log進行重做,從而達到事務(wù)的持久性這一特性。
2:回滾日志(undo log)
保證數(shù)據(jù)的原子性,保存了事務(wù)發(fā)生之前的數(shù)據(jù)的一個版本,可以用于回滾,同時可以提供多版本并發(fā)控制下的讀(MVCC),也即非鎖定讀
3:二進制日志(binlog)
用于復制,在主從復制中,從庫利用主庫上的binlog進行重播,實現(xiàn)主從同步。用于數(shù)據(jù)庫的基于時間點的還原。
4:錯誤日志(errorlog)
錯誤日志記錄著mysqld啟動和停止,以及服務(wù)器在運行過程中發(fā)生的錯誤的相關(guān)信息。在默認情況下,系統(tǒng)記錄錯誤日志的功能是關(guān)閉的,錯誤信息被輸出到標準錯誤輸出。
5:慢查詢?nèi)罩荆╯low query log)
慢日志記錄執(zhí)行時間過長和沒有使用索引的查詢語句,報錯select、update、delete以及insert語句,慢日志只會記錄執(zhí)行成功的語句。
6:一般查詢?nèi)罩荆╣eneral log)
記錄了服務(wù)器接收到的每一個查詢或是命令,無論這些查詢或是命令是否正確甚至是否包含語法錯誤,general log 都會將其記錄下來 ,記錄的格式為 {Time ,Id ,Command,Argument }。也正因為mysql服務(wù)器需要不斷地記錄日志,開啟General log會產(chǎn)生不小的系統(tǒng)開銷。 因此,Mysql默認是把General log關(guān)閉的
7:中繼日志(relay log)。
從服務(wù)器I/O線程將主服務(wù)器的二進制日志讀取過來記錄到從服務(wù)器本地文件,然后從服務(wù)器SQL線程會讀取relay-log日志的內(nèi)容并應(yīng)用到從服務(wù)器,從而使從服務(wù)器和主服務(wù)器的數(shù)據(jù)保持一致。
3、主從復制及主主復制的實現(xiàn)
vim /etc/my.cnf
log-bin = mysql-bin
server-id=2
innodb-file-per-table =ON
skip_name_resolve=ON
relay-log=relay-log
relay-log-index=relay-log.index

登錄查看mysql

查看主節(jié)點二進制日志列表

查看主節(jié)點的server id

在主節(jié)點上創(chuàng)建有復制權(quán)限的用戶。REPLIACTION SLAVE ,REOPLIATION CLIENT
grant replication slave,replication client on *.* to 'repluser'@'172.16.1.3' identified by 'replpass';
flush privileges; --刷新
登錄從節(jié)點
CHANGE MASTER TO change master to master_host='172.16.1.2',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000042',master_log_pos=362;
start slave? --啟動從節(jié)點

測試


4、xtrabackup實現(xiàn)全量+增量+binlog恢復庫
通過binlog恢復數(shù)據(jù)
create database bindb;
use bindb;
create table t1 (id int);
insert into t1 values(1);
insert into t1 values(2);
insert into t1 values(3);
起點:899終點:2557
/data/3306/data/binlog.000003
mysqlbinlog --start-position=899 --stop-position=2557 /data/3306/data/binlog.000003 >/tmp/dali.sql
