MySQL数据库主从同步

主从同步,听名字是不是挺高大上的,其实原理很简单,就是两个mysql数据库,一个设置为主库,一个设置为从库,当我们对主库进行操作(比如新增、删除数据)的时候,将操作记录下来(比如记录在一个约定的文件中),然后从库去检测主库的操作记录,如果发现主库的数据有变更,那么从库就根据操作记录,同步的对自己的数据进行变更,这样就保证了主库、从库的数据一致性,这就是所谓的主从同步。

那么为什么要使用主从同步呢,主要有两个原因:

一是可以提高数据库的效率,比如一个数据库读写操作很平凡,mysql数据库在进行写操作的时候,是会进行锁库的,所以就会造成数据库性能下降,这时我们用主从方式配置多台数据库,主库进行增、删、改操作,从库进行查询操作,这样就能大大提高数据库的效率;

二是可以进行数据备份,我们配置了多台数据库,假如其中一台挂掉了,也不至于造成数据全部丢失的损失;

所以现在mysql的主从应用十分广泛,很多大型项目都会采用多主多从的mysql集群,实现高可用的数据访问;这里只是讲讲最基本的一主一从两台数据库的集群方式,更多高级的应用,留待后面深入学习研究。

开始前的准备工作:两台安装了mysql的电脑。这里我在自己的本机上,用VMware虚拟机来模拟两台电脑,因为基本所有的项目都部署在linux环境,所以我在虚拟机上安装的ubuntu系统,系统安装好之后,再安装mysql数据库,最好保持两台电脑上的数据库版本一致,至于怎么在虚拟机上安装ubuntu系统,还有怎么在ubuntu中安装mysql这些问题,可以自行百度,有各种教程,这里就不一一讲述。

如下图,我已经安装好了两台ubuntu,也在上面安装好了mysql数据库,两个mysql的版本都是5.7.19

 

我们以Ubuntu64上的mysql为主数据库,以Ubuntu65上的mysql为从数据库,来进行配置操作

步骤一:记下两台电脑的ip地址,在ubuntu上打开终端窗口,输入命令ifconfig,可以查看IP地址,我的两个地址为 192.168.244.128 和 192.168.244.129

步骤二:数据库配置,ubuntu下mysql的默认安装目录是 /etc/mysql ,配置文件路径为 /etc/mysql/mysql.conf.d/mysqld.cnf

【主数据库配置】

  1、新建数据库test_db(这就是我们用来测试数据同步的数据库),开始里面什么东西都没有;

  2、打开配置文件 mysqld.cnf ,找到配置项 #server-id=1 ,修改如下

    server-id=1    #服务器 id,随便写,但是不能和从数据库一致
    log-bin=/var/log/mysql/mysql-slow.log  #日志文件存放路径
    binlog-do-db=test_db    #待同步的数据库

  3、注释掉 #bind-address= 127.0.0.1   #只允许本地访问

  4、保存并重启mysql服务,命令为 service mysql restart

  5、登陆数据库:mysql -u用户名 -p密码 (mysql -uroot -p123456)

  6、给要连接的从服务器设置权限:grant replication slave,reload,super on *.* to test@192.168.244.129 identified by '123456'; 

  7、输入命令 show master status ,找到File 和 Position 的值记录下来;如下图

  

  这个File,就是记录主库操作的文件,Position就是文件中记录开始的位置,从数据库就是通过这两个值来确定需要同步的数据

 

【从数据库配置】

  1、新建数据库test_db;

  2、打开配置文件 mysqld.cnf ,找到配置项 #server-id=1 ,修改如下

    server-id=2    #服务器 id,不能和主数据库一致
    log-bin=/var/log/mysql/mysql-slow.log  #日志文件存放路径
    binlog-do-db=test_db    #待同步的数据库

  3、注释掉 #bind-address= 127.0.0.1   #只允许本地访问

  4、保存并重启mysql服务,命令为 service mysql restart

  5、从服务器上测试:mysql -utest -p123456 -h 192.168.244.128,查看能否连接主数据库成功(我这里显示连接成功);

  6、输入exit;断开主库连接,连接本地从库(mysql -uroot -p123456),修改从数据库对主数据库的连接的参数

  change master to master_host='192.168.244.128',master_user='test',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=466;

  (这里输入的mysql-bin.000001和466就是主数据库配置中7记录下来的值)  

  7、设置完之后,执行 start slave ; 开启slave线程;执行show slave status\G  ,查看

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    
    
  到这里,我们的主从配置就完成了,看上图可以看到我的配置已经生效,接下来验证一下是否可以主从同步
 
步骤三:验证
  1、现在从库(Ubuntu65)上,连接数据库(mysql -uroot -p123456),进行如下操作
  
  可以看到,数据库test_db里面是空的,一个数据表都没有。    
 
  2、在主库(Ubuntu64)上,连接数据库(mysql -uroot -p123456),进行如下操作,创建数据表my_user
 
CREATE TABLE `my_user` (
  `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_name` varchar(100) NOT NULL COMMENT '用户名',
  `user_password` varchar(100) NOT NULL COMMENT '用户密码',
  `user_age` int(5) NOT NULL COMMENT '用户年龄',
  `user_phone` varchar(50) NOT NULL COMMENT '用户手机号',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

  

  在数据表my_user中插入4条数据

INSERT INTO `my_user` VALUES ('2', '李四', '222222', '21', '18111112222');
INSERT INTO `my_user` VALUES ('3', '王五', '333333', '22', '18211112222');
INSERT INTO `my_user` VALUES ('4', '赵六', '444444', '23', '18511112222');
INSERT INTO `my_user` VALUES ('5', '马七', '555555', '24', '18711112222');

  

  3、接下来,到从库(Ubuntu65),进行如下操作

  

  可以看到,已经有了数据表my_user,这就是通过主从同步,数据库自动帮我们进行的操作,再来查询一下数据,如下

  

  可以看到,数据也同步了过来。

 

  注意:如果对从数据库进行修改,是不会同步对主数据库进行修改的,所以insert,delete update 操作都应该是对主数据库的操作, 而select操作则对从数据库进行操作,如果想

  要操作从数据库也能同步到主数据库,这就是主主同步模式,除此之外还有更加复杂的一主多从,多主多从模式,后面有机会再写文章进行介绍。

 

到这里,mysql的主从同步已经全部配置完成,后买我们讲到数据库读写分离的时候,就会利用这个主从同步来做,欢迎持续关注!

 

 

 

  

转载于:https://www.cnblogs.com/tian5017/p/7489158.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值