MySQL-主從複製之同步主從資料

Anbang713發表於2018-10-14

前面兩篇部落格中,我們分別介紹瞭如何搭建主資料庫以及從資料庫,但是到此為止,緊緊只是安裝好了兩個MySQL資料庫例項,並沒有設定主從的關係,更不用說將主資料庫同步到從資料庫了。所以接下來,我們做最後一步的同步動作。

一、原理

MySQL主(稱master)從(稱slave)複製的原理:

(1)master將資料改變記錄到二進位制日誌(binary log)中,也即是配置檔案log-bin指定的檔案(這些記錄叫做二進位制日誌事件,binary log events)。

(2)slave將master的binary log events拷貝到它的中繼日誌(relay log)。

(3)slave重做中繼日誌中的事件,將改變反映它自己的資料(資料重演)。

二、主從配置需要注意的地方

(1)主DB server和從DB server資料庫的版本一致。

(2)主DB server和從DB server資料庫資料一致,我們在主從資料庫分別建立test資料庫和user表,並插入同樣的資料:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL COMMENT '使用者名稱',
  `password` VARCHAR(32) NOT NULL COMMENT '密碼,加密儲存',
  `phone` VARCHAR(20) DEFAULT NULL COMMENT '註冊手機號',
  `email` VARCHAR(50) DEFAULT NULL COMMENT '註冊郵箱',
  `created` DATETIME NOT NULL,
  `updated` DATETIME NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE,
  UNIQUE KEY `phone` (`phone`) USING BTREE,
  UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='使用者表';

-- ----------------------------
-- Records of tb_user
-- ----------------------------
INSERT INTO `user` VALUES ('7', 'zhangsan', '11111111', '13888888888', '360@qq.com', '2016-08-17 11:44:01', '2016-08-17 11:44:03');
INSERT INTO `user` VALUES ('8', 'zhangsan1', 'a99442d2a736365f5fe637e299b0e339', '13888888889', NULL, '2016-08-17 14:53:40', '2016-08-17 14:53:40');

(3)主DB server開啟二進位制日誌,主DB server和從DB server的server_id都必須唯一。

(4)server-uuid必須不同。

三、主資料庫配置(3380)

(1)在my.ini修改如下:

(2)執行SQL語句查詢狀態:SHOW MASTER STATUS

(3)建立同步使用者

#授權使用者slave01使用123456密碼登入mysql
grant replication slave on *.* to 'slave01'@'127.0.0.1' identified by '123456';
flush privileges;

四、從資料庫配置(3381)

(1)設定主資料庫配置

CHANGE MASTER TO
 master_host='127.0.0.1', # 主資料庫地址
 master_user='slave01', # 主資料庫同步使用者
 master_password='123456', # 主資料庫同步使用者密碼
 master_port=3380, # 主資料庫埠
 master_log_file='ANBANG713-bin.000001', # 主資料庫二進位制檔案
 master_log_pos=2443; # 主資料庫二進位制檔案當前位置

(2)啟動slave同步:START SLAVE;(停止slave同步:STOP SLAVE;)

(3)檢視同步狀態:SHOW SLAVE STATUS;(是否同步成功的標誌即這兩個值都為Yes)

五、測試

(1)我們修改主庫的user表資料,將id為7的password修改為222。

update user a set a.password=222 where a.`id` = '7';

(2)檢視從庫的user表,可以看到已成功同步過來。

相關文章