MySQL-主从复制之同步主从数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Anbang713/article/details/83045420

前面两篇博客中,我们分别介绍了如何搭建主数据库以及从数据库,但是到此为止,紧紧只是安装好了两个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', '[email protected]', '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表,可以看到已成功同步过来。

猜你喜欢

转载自blog.csdn.net/Anbang713/article/details/83045420