mysql的主从复制(基于pos和gtid)两种形式与并行复制

一、主从复制

原理:

  • 主从复制一共有三个进程,从库生成两个线程,一个I/O线程,一个SQL线程;
  • i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
  • 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
  • SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致

###mysql的主从复制,基于pos的
首先得到一个mysql包
    6  tar    xf  mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar
    7  ls
    8  rpm  -qa |   grep  mysql    ##查看你虚拟机有什么关于mysql的包
     yum  install mysql-community-client-5.7.17-1.el6.x86_64.rpm   mysql-community-common-5.7.17-1.el6.x86_64.rpm   mysql-community-libs-5.7.17-1.el6.x86_64.rpm  mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm


   19  scp    mysql-community-client-5.7.17-1.el6.x86_64.rpm   mysql-community-common-5.7.17-1.el6.x86_64.rpm   mysql-community-libs-5.7.17-1.el6.x86_64.rpm  mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm   mysql-community-server-5.7.17-1.el6.x86_64.rpm  server2/3:     ##复制给server2/3


   20  vim   /etc/my.cnf
在最后面加  server-id=1       log-bin=mysql-bin


   23  /etc/init.d/mysqld  start
   30  grep    password   /var/log/mysqld.log    ##获取初始密码


   43  mysql  -p   ##可以进去,但不能show  databases;
   44  mysql_secure_installation   ##进行数据库初始化,首先写初始密码,在改新密码,新密码必须是大小写加数字加特殊字符,不改超户,其他为yes


   45  mysql  -p
       show  databases;
       show   master  status;   ##显示主的状态


       grant  replication  slave  on  *.*  to repl@'%'  identified  by 'Wb@123456'; ##给slave授权


在server2里面做
首先切换到所有包的位置
yum  install  *
mysql -h   172.25.17.1  -u repl  -p    ##验证是否可以登上去


show  databases;     ###看不到数据库
   46  vim  /etc/my.cnf
server-id=2


   47  /etc/init.d/mysqld   start
 grep  password  /var/log/mysqld.log   ##截取密码


mysql_secure_installation
mysql  -p
show    slave  status\G;   ##什么都没有
change   master  tom master_host='172.25.17.1',master_user='repl',master_password='Wb@123456',master_log_file='mysql-bin.000004',master_log_pos=710;   ##数据从show   master   status;中获得


start slave;   ##开启slaves
show   slave  status\G;  ##i/o 异步复制  myl  线程都是yes;
测试:
在master里面增加个库和表
create database    wubian;
use   wubian;
create   table     usertb(  username   varchar(10)  not  null,
                            password    varchar(10)  not  null);
insert  into     usertb  values('user1','111');
select  *  from   usertb;   ##显现有没有进去


在slave里面做
show  databases;
use  wubian;   ##数据库有同步过来
show  tables;
select  *   from  usertb;   ##观看数据有没有同步过来


###基于gtid同步
在server1里面做;
vim  /etc/my.cnf
继续在最后里面加
gtid_mode=ON
enforce-gtid-consistency=true


/etc/init.d/mydqld  restart
在server2里面做
vim  /etc/my.cnf
继续在最后里面加
gtid_mode=ON
enforce-gtid-consistency=true


/etc/init.d/mydqld  restart
在server2里面做
stop   slave;
change    master  to  master_host='172.25.17.1',master_user='repl',master_password='Wb@123456',MASTER_AUTO_POSITION = 1;
start  slave;
show  slave  status\G;   ##i/o  sql  都为yes;


测试:
在master里面增加个库和表
use   wubian;
insert  into     usertb  values('user2','222');
insert  into     usertb  values('user3','333');
select  *  from   usertb;   ##显现有没有进去


在slave里面做
show  databases;
use  wubian;   ##数据库有同步过来
show  tables;
select  *   from  usertb;   ##观看数据有没有同步过来


use   mysql;
select   * from   gtid_executed;     ##有两行数据,因为我们在做gtid的时候,插入了两个信息


show   processlist;   ##显示进程


####并行复制
在slave端
mysql  -p
use  mysql;
select  *   from    slave_master_info;  ##什么都不显示,因为没有线程


vim  /etc/my.cnf
在最地下加
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16       ##开启16个线程
master_info_repository=TABLE
relay_log_info_repository=TABLE    ##用表的形式保存数据
relay_log_recovery=ON


/etc/init.d/mysqld    restart
mysql -p
show   processlist;    ##是否有16个线程


 

猜你喜欢

转载自blog.csdn.net/weixin_42709236/article/details/83280076