企業級高性能MYSQL的用法寶典
1.數據庫的基本介紹
MySQL是一種關係型數據庫管理系統,關係數據庫將數據保存在不同的二維表中,並將這些表放入數據庫,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
-
Mysql是開源的,所以你不需要支付額外的費用。
-
Mysql支持大型的數據庫。可以處理擁有上千萬條記錄的大型數據庫。
-
MySQL使用標準的SQL數據語言形式。
-
Mysql可以允許於多個系統上,並且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
-
Mysql對PHP有很好的支持,PHP是目前最流行的Web開發語言。
-
MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件爲8TB。
-
Mysql是可以定製的,採用了GPL協議,你可以修改源碼來開發自己的Mysql系統。
2.基於binlog的主從複製(異步複製)
1.主從複製原理
mysql的主從配置又叫replication,AB複製,基於binlog二進制日誌,主數據庫必須開啓binlog二進制日誌才能進行復制。
過程:
主數據庫將更改操作記錄到binlog二進制日誌(主數據庫有log dump線程和從數據庫的i/o線程傳遞binlog)。
從庫生成兩個線程,一個i/o線程,一個SQL線程
i/o線程去請求主庫的binlog,並且得到的binlog日誌寫到relay log(中繼日誌)文件中
然後主庫會生成一個log dump線程,用來給從庫的i/o線程傳binlog;SQL線程,會讀取中繼日誌文件,並解析成具體的操作執行,這樣主從的操作就一致了,而最終的數據也就一致了。
作爲異步複製,其主庫將事件寫入binlog二進制文件,dump線程將binlog文件發送出去,不保證其他從節點是否會收到binlog二進制文件。
2.實現主從複製的要求
- 主庫開啓binlog日誌(設置log-bin參數)
- 主從server-id不同
- 從庫服務器能連同主庫
主從複製的實現
1. 配置主庫端:
第一步:在主庫中安裝mysql,這裏我們用server1作爲主庫
yum install mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm
第二步:編輯配置文件
vim /etc/my.cnf
最後面添加:
log-bin=mysql-bin #開啓二進制日誌
server-id=1 #服務器ID
systemctl start mysqld #開啓數據庫
第三步:查看初始化密碼
開啓數據庫之後會在 /var/log/mysqld.log 裏面生成一個初始密碼
cat /var/log/mysqld.log | grep password
我的初始密碼爲:7k:OQ*Yfj.tE
第四步:安全初始化
mysql_secure_installation
安全初始化完成之後這時候我們就可以登錄數據庫了!!!!!
第五步:創建用戶並授權
參數解釋:
replication 表示授權複製的權限
*.* 表示所有數據庫可以進行同步
repl 表示授權名,可以隨意填寫
'192.168.43.%' 表示授權192.168.43.0/24的網段所有服務器可以同步, %表示任意
2. 配置從庫端 這裏我們用server2作爲從庫
配置從庫並開啓從庫
注意:master_log_file 和master_log_pos 的值都要依照主設備狀態中的值來設定
測試:
配置主從複製完成後,那我們來檢測一下能不能實現複製
在主庫端創建庫:
然後我們在從庫中就可以看到westos庫:
在主庫中創建表,並插入數據:
在從庫中可以看到數據:
3.基於GDIT的主從複製
1.基於GDIT的複製方式
mysql數據庫從5.6.5開始新增一種基於GDIT的複製方式。GTID (Global Transaction ID) 是對於一個已提交事務的編號,並且是一個全局唯一的編號。 GTID 實際上 是由 UUID+TID 組成的。其中 UUID 是一個 MySQL 實例的唯一標識。
-
主從複製,默認是通過pos複製(postion),就是說在日誌文檔裏,將用戶進行的每一項操作都進行編號(pos),每一個event都有一個起始編號、一個終止編號。我們在配置主從複製時從節點時要輸入master的log_pos值就是這個原因,要求它從哪個pos開始同步數據庫裏的數據,這也是傳統複製技術。
-
MySQL5.6增加了GTID複製,GTID就是類似於pos的一個作用,不過它是整個mysql複製架構全局通用的,就是說在這整個mysql冗餘架構中,它們的日誌文件裏事件的GTID值是一致的。
-
GTID (Global Transaction ID) 是對於一個已提交事務的編號,並且是一個全局唯一的編號。 GTID 實際上是由 UUID+TID 組成的。其中 UUID 是一個 MySQL 實例的唯一標識。TID 代表了該實例上已經提交的事務數量,並且隨着事務提交單調遞增。
-
通過GDIT保證每個主庫上提交的事務在集羣中有一個唯一的ID。這種方式強化了數據庫的主備一致性,故障恢復以及容錯能力。
pos與GTID的區別:
兩者都是日誌文件裏事件的一個標誌,如果將整個mysql集羣看作一個整體:pos就是局部的,GTID就是全局的。
2.實現主從複製
第一步:在主從兩端(server1 server2)都修改配置文件:
在server1和server2中做以下操作:
vim /etc/my.cnf
gtid_mode=ON 開啓gtid模式
enforce-gtid-consistency=true 強制gtid一致性,用於保證啓動gitd後事務的安全
systemctl restart mysqld #重啓mysql
第二步:在從庫端先停掉slave,然後重新創建連接:
所以呢?去掉分號來一次看看
測試
在主庫表中添加新的信息:
從庫查看是否複製成功?來來來 看一下!!!!