mysql主從複製與主主複製

mysql主從複製與主主複製
1、MySQL簡介
MySQL是一種關係數據庫管理系統,關係數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件採用了雙授權政策,分爲社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作爲網站數據庫。
由單臺MySQL數據庫服務器不能滿足實際的需求。此時數據庫集羣就很好的解決了這個問題了。採用MySQL分佈式集羣,能夠搭建一個高併發、負載均衡的集羣服務器(這篇博客暫時不涉及)。在此之前我們必須要保證每臺MySQL服務器裏的數據同步。數據同步我們可以通過MySQL內部配置就可以輕鬆完成,主要有主從複製和主主複製。
2、基礎環境搭建:
2.1 環境說明
IP:192.168.92.143
IP:192.168.92.156
CentOS 7.4.1708
mysql 5.7.22

2.2 設置主機名、靜態解釋:/etc/hosts
2.3 ssh免密登錄
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub 192.168.92.143
2.4 ntp同步
yum install chrony -y
編輯 /etc/chrony.conf 文件
server master iburst
allow 192.168.92.0/24
systemctl enable chronyd.service
systemctl start chronyd.service
chronyc sources
2.5 安裝數據庫:
(因使用的是公司腳本,後期更新mysql的安裝)
3、MySQL主從複製
3.1 配置文件
一般Linux中的MySQL配置文件都在/etc/my.cnf(windows中的配置文件爲mysql.ini)
log-bin=mysql-bin #開啓二進制日誌
server_id=1#兩臺服務器的ID要不一樣
注意:二進制日誌必須開啓,因爲數據的同步實質上就是其他的MySQL數據庫服務器將這個數據變更的二進制日誌在本機上再執行一遍。
192.168.92.143 爲主數據庫服務器
log-bin=mysql-bin
server_id=1
192.168.92.156 爲從數據庫服務器
log-bin=mysql-bin
server_id=2
配置完成後要記得重啓服務
systemctl restart mysqld
3.2 開始構建主從複製
第一步:
在192.168.92.143中創建一個192.168.92.156主機中可以登錄的MySQL用戶
用戶:backup
密碼:1234
mysql>grant replication slave on . to 'backup'@'192.168.92.156' identified by '1234';
mysql>flush privileges;
第二步:
查看192.168.92.143MySQL服務器二進制文件名與位置
mysql>SHOW MASTER STATUS;

       第三步:
        告知二進制文件名與位置
        在192.168.92.156中執行:

mysql> change master to MASTER_HOST='192.168.92.143', MASTER_USER='backup', MASTER_PASSWORD='1234', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=604;
完成主從複製配置
3.3 測試主從複製
在192.168.92.156中
mysql>SHOW SLAVE STATUS\G #查看主從複製是否配置成功

當看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明狀態正常

        實際測試:

--登陸192.168.92.143主MySQL
mysql>SHOW DATABASES;

--登陸192.168.92.156從MySQL
mysql>SHOW DATABASES;

192.168.92.143主MySQL操作:

        mysql>create database aa;
        mysql>use aa;
        mysql>create table tab1(id int auto_increment,name varchar(10),primary key(id));

       mysql>show databases;
       mysql>show tables;

192.168.92.156從MySQL操作:
mysql>show databases;
mysql>use aa;
mysql>show tables;

由上面兩個結果圖可得知,兩主機達到了數據同步。主從複製的配置就是如此的簡單。
4、MySQL主主複製
4.1 實現原理
主主複製即在兩臺MySQL主機內都可以變更數據,而且另外一臺主機也會做出相應的變更。聰明的你也許已經想到該怎麼實現了。對,就是將兩個主從複製有機合併起來就好了。只不過在配置的時候我們需要注意一些問題,例如,主鍵重複,server-id不能重複等等。
4.2 配置文件
--192.168.92.143
server-id=1 #任意自然數n,只要保證兩臺MySQL主機不重複就可以了。
log-bin=mysql-bin #開啓二進制日誌
auto_increment_increment=2 #步進值auto_imcrement。一般有n臺主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n臺主MySQL。此時爲第一臺主MySQL
binlog-ignore=mysql #忽略(或不同步)mysql庫【我一般都不寫】
binlog-ignore=information_schema #忽略(或不同步)information_schema庫【我一般都不寫】
replicate-do-db=aa #要同步的數據庫,默認所有庫
--192.168.92.156
server-id=2
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=aa

       配置好後重啓MySQL

4.3 開始構建主主複製
因爲主主複製是兩個主從複製組合一起,所以我就接着上面主從複製接着配置。
第一步:
在192.168.92.156中創建一個192.168.92.143主機中可以登錄的MySQL用戶
用戶:backup2
密碼:1234
mysql>grant replication slave on . to 'backup2'@'192.168.92.143' identified by '1234';
mysql>flush privileges;
第二步:
查看192.168.92.156MySQL服務器二進制文件名與位置
mysql>show master status;

        第三步:
       告知二進制文件名與位置
       在192.168.92.143中執行: 

mysql> change master to MASTER_HOST='192.168.92.156', MASTER_USER='backup2', MASTER_PASSWORD='1234', MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=615;

完成主主複製配置
重啓MySQL服務
4.4 測試主主複製
登錄mysql查看:
mysql>SHOW SLAVE STATUS\G #查看主從複製是否配置成功
192.168.92.143

當看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明狀態正常
測試:
--192.168.92.143

       mysql>use aa;
       mysql>select*from tab1;
       tab1無數據

       --192.168.92.156
       mysql>use aa;
       mysql>select*from tab1;
       tab1無數據

       --192.168.92.1443插入數據
       mysql>insert into tab1 (name) value(‘11’),(‘11’),(‘11’);
       --192.168.92.156插入數據
       mysql>insert into tab1 (name) value ('12'),('12'),('12');

查看數據:
兩個主機數據結果一樣!

5、注意事項
5.1 常見出錯點:
(1)兩臺數據庫都存在db數據庫,而第一臺MySQL db中有tab1,第二臺MySQL db中沒有tab1,那肯定不能成功。
(2)已經獲取了數據的二進制日誌名和位置,又進行了數據操作,導致POS發生變更。在配置CHANGE MASTER時還是用到之前的POS。
(3)stop slave後,數據變更,再start slave。出錯。這步可以省略,但要記得重啓服務。
終極更正法:重新執行一遍CHANGE MASTER就好了。
(4)當配置完成Slave_IO_Running、Slave_SQL_Running不全爲YES時,大多數問題都是數據不統一導致。這時先重啓服務,再進行查看。
5.2mysql error code(備忘):
1005:創建表失敗
1006:創建數據庫失敗
1007:數據庫已存在,創建數據庫失敗
1008:數據庫不存在,刪除數據庫失敗
1009:不能刪除數據庫文件導致刪除數據庫失敗
1010:不能刪除數據目錄導致刪除數據庫失敗
1011:刪除數據庫文件失敗
1012:不能讀取系統表中的記錄
1020:記錄已被其他用戶修改
1021:硬盤剩餘空間不足,請加大硬盤可用空間
1022:關鍵字重複,更改記錄失敗
1023:關閉時發生錯誤
1024:讀文件錯誤
1025:更改名字時發生錯誤
1026:寫文件錯誤
1032:記錄不存在
1036:數據表是隻讀的,不能對它進行修改
1037:系統內存不足,請重啓數據庫或重啓服務器
1038:用於排序的內存不足,請增大排序緩衝區
1040:已到達數據庫的最大連接數,請加大數據庫可用連接數
1041:系統內存不足
1042:無效的主機名
1043:無效連接
1044:當前用戶沒有訪問數據庫的權限
1045:不能連接數據庫,用戶名或密碼錯誤
1048:字段不能爲空
1049:數據庫不存在
1050:數據表已存在
1051:數據表不存在
1054:字段不存在
1065:無效的SQL語句,SQL語句爲空
1081:不能建立Socket連接
1114:數據表已滿,不能容納任何記錄
1116:打開的數據表太多
1129:數據庫出現異常,請重啓數據庫
1130:連接數據庫失敗,沒有連接數據庫的權限
1133:數據庫用戶不存在
1141:當前用戶無權訪問數據庫
1142:當前用戶無權訪問數據表
1143:當前用戶無權訪問數據表中的字段
1146:數據表不存在
1147:未定義用戶對數據表的訪問權限
1149:SQL語句語法錯誤
1158:網絡錯誤,出現讀錯誤,請檢查網絡連接狀況
1159:網絡錯誤,讀超時,請檢查網絡連接狀況
1160:網絡錯誤,出現寫錯誤,請檢查網絡連接狀況
1161:網絡錯誤,寫超時,請檢查網絡連接狀況
1062:字段值重複,入庫失敗
1169:字段值重複,更新記錄失敗
1177:打開數據表失敗
1180:提交事務失敗
1181:回滾事務失敗
1203:當前用戶和數據庫建立的連接已到達數據庫的最大連接數,請增大可用的數據庫連接數或重啓數據庫
1205:加鎖超時
1211:當前用戶沒有創建用戶的權限
1216:外鍵約束檢查失敗,更新子表記錄失敗
1217:外鍵約束檢查失敗,刪除或修改主表記錄失敗
1226:當前用戶使用的資源已超過所允許的資源,請重啓數據庫或重啓服務器
1227:權限不足,您無權進行此操作
1235:MySQL版本過低,不具有本功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章