美文网首页
mySql主从同步复制(log-bin日志)

mySql主从同步复制(log-bin日志)

作者: 最底层的技术渣 | 来源:发表于2019-04-30 01:29 被阅读0次

    环境

    (主)环境 :  linux(centos 7.0.2)  Mysql(5.6.37)  IP:192.168.1.3
    (从)环境 :  linux(centos 7.0.2)   Mysql(5.6.36)  IP:192.168.1.4
    

    随便说说(也可忽略)

    为了配置准确无误,先将权限、防火墙等等处理
    1、关闭windows、linux防火墙:
    windows:控制面板->防火墙->打开或关闭Windows防护墙关闭Windows防火墙。
    linux:service iptables stop 如果不行,参考centos下关闭防火墙和Selinux
    2、权限
    linux授权远程访问(2句话):

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'  IDENTIFIED BY '123456' WITH GRANT OPTION;
    FLUSH   PRIVILEGES; 
    

    正文开始

    主环境配置

    1.修改mysql的配置文件  my.cnf  my.ini  我的配置文件路径是  /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin    #(必须配置)   启用二进制日志
       server-id=1          #(必须配置)    为本台服务器配置唯一的Server ID
       binlog-do-db=aco_game_server #(可选配置)要同步的数据库名,要同步多个数据库,就多加几个replicate-db-db=数据库名
       binlog-ignore-db=mysql  #(可选配置)//要忽略的数据库
    #二进制日志自动删除的天数,默认值为0,表示“没有自动删除”,启动时和二进制日志循环时可能删除  
    expire_logs_days = 7    
    2.添加从库权限账号
      mysql -uroot -p
      CREATE USER 'mysync'@'116.62.126.1' IDENTIFIED BY 'abC123456##'; #创建用户
      GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'116.62.126.1';#分配权限
      flush privileges;   #刷新权限
    
    3.重启主服务器
      /bin/systemctl restart mysqld.service(centos)  
      /bin/systemctl restart mysql.service(ubuntu)
    
    4.查看主服务器状态
     show master status;
    

    从环境配置

    1.修改mysql的配置文件  my.cnf  my.ini  我的配置文件路径是  /etc/my.cnf
       [mysqld]
       log-bin=mysql-bin    #(必须配置)   启用二进制日志
       server-id=2          #(必须配置)    为本台服务器配置唯一的Server ID
       replicate-do-db=mstest  #(可选配置)#在master端不指定binlog-do-db,在slave端用replication-do-db来过滤,要同步多个数据库,就多加几个replicate-db-db=数据库名
       binlog-ignore-db=mysql #(可选配置)//要忽略的数据库
       relay-log=mysqld-relay-bin #//启用中继日志relay log
    
    2.配置连接主服务器的信息
      change master to 
      master_host='47.111.188.1',
      master_user='mysync',
      master_password='abC123456##',
      master_log_file='mysql-bin.000002', 
      Master_Port=3306,
      master_log_pos=154;
    
    
      flush privileges;     #刷新权限
      start slave;
    
    3.重启从服务器
      /bin/systemctl restart mysqld.service(centos)  
      /bin/systemctl restart mysql.service(ubuntu)
    
     4.查看从服务器状态
      show slave status \G;
    
    

    到此可以进行主从测试了。

    注:在本次实验中,由上述my.cnf配置文件可得知,主从同步针对的数据库(除了mysql,sys,information_schema,performance_schema这些以外)的其它所有数据库都会进行同步(含数据库、表、数据等)

    1、如当前数据库情况如下:

    image

    2、在master主库容器中,创建数据库master_demo,并在此库下创建表userinfo,并插入一条记录

    create database master_demo;
    use master_demo;
    create table userinfo(username varchar(50),age int);
    insert into userinfo values('Tom',18);
    
    image

    3、此时,进入从库容器中,查看:

    image

    确实已经将在master主库新建的数据库和表记录都同步过来了。

    既然是主从同步,那反过来验证一下,在从库下插入记录后,会不会同步到主库中来呢?

    在从库上操作插入记录:

    insert into userinfo values('slave',20);
    

    查看:

    image

    切到master主库中,查看:

    image

    发现在master主库中,还是只有一条记录,说明与预期设想的一样,在从库中插入记录,是不会同步到master主库中来的

    再来一波,在主库master上,插入新记录:

    insert into userinfo values('master',25);
    
    image

    在从库中,查看

    image

    发现在master主库中新加入的master记录,在从库中同步过来了。

    提示:

    主服务器:
    提示1:如果你不配置server-id或者配置值为0,那么主服务器将拒绝所有从服务器的连接。
    提示2:在使用InnoDB的事务复制,为了尽可能持久和数据一致,你应该在my.cnf里配置innodb_flush_log_at_trx_commit=1 和 sync_binlog=1;
    For the greatest possible durability and consistency in a replication setup using InnoDB with transactions, you should useinnodb_flush_log_at_trx_commit=1 and sync_binlog=1 in the master my.cnf file.
    提示3:确保主服务器里的skip-networking选项未启用,如果网络被禁用,你的从服务器将不能与主服务器通信并且复制失败。
    
    从服务器:
    提示1:如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
    提示2:一般你不需要在从服务器上启用二进制日志,如果你在从服务器上启用二进制日志,那你可用它来做数据备份和崩溃恢复,或者做更复杂的事情(比如这个从服务器用来当作其它从服务器的主服务器)
    

    FAQ

    在搭建mysql主主复制的时候,创建一个新的具有replicaion权限的新用户,刚开始的操作如下: 
    mysql> GRANT REPLICATION SLAVE ON test.* TO ‘server01’@’%’ IDENTIFIED BY ‘server01’; 
    会提示错误:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
    
    错误的原因是因为,replication权限是一个全局权限,不可以指定在某一个库上,所以,把创建用户语句更改为如下即可:
    
    mysql> GRANT REPLICATION SLAVE ON . TO ‘server01’@’192.168.40.129’ IDENTIFIED BY ‘568888’; 
    Query OK, 0 rows affected (0.00 sec)
    
    ok,一切正常,但是,为了安全起见,在创建新的用户的时候,最好指定登陆地址,不然别人拿着你的账号就要干坏事儿了,虽然这个账号只具备replication权限,但是也是具有危险性的。所以,最后的语句更改为:
    
    mysql> GRANT REPLICATION SLAVE ON . TO ‘server01’@’192.168.40.129’ IDENTIFIED BY ‘568888’; 
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> flush privileges; 
    Query OK, 0 rows affected (0.01 sec)
    

    报错ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
    解决办法:

    reset slave;
    start slave;
    

    相关文章

      网友评论

          本文标题:mySql主从同步复制(log-bin日志)

          本文链接:https://www.haomeiwen.com/subject/nhlpnqtx.html