mysql 主从复制

Posted 半醉半醒的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 主从复制相关的知识,希望对你有一定的参考价值。

一、准备环境:
    主(Master)机IP: 192.168.0.83
    从(Slave) 机IP: 192.168.0.80

二、向主(Master)机添加远程登录的授权用户
1.向主(Master)服务器添加用户:
      @ 用户名: slave1
      @ 密  码: 789
      @ 允许自: 192.168.0.80 机器登录
 授权方式1: 此种授权是可远程登录Master,仅用于主从复制没有其它任何select insert update等权限【推荐】
 mysql> grant replication slave on *.* to slave1@192.168.0.80 identified by 789;
2.刷新授权表:
 mysql> flush privileges;
3.查看授权结果:
mysql> show grants for slave1@192.168.0.80;
4.测试从Slave端登录远程主(Master)机:
# mysql -h 192.168.0.83 -u slave1 -p  

789

5.从主(Master)机查看所有连接登录本机的客户端情况:
mysql> show processlist G

 

 

三、主(Master)机配置
    vi编辑打开mysql配置文件
    # vi /usr/local/mysql/etc/my.cnf

    找到从约第56行开始确认以下三项:
    [mysqld]
log-bin=mysql-bin    # 确认开启binlog日志
binlog_format
=mixed # 确认binlog日志格式为mixd混合类型 server-id = 1 # 在整个主从架构内指定一个唯一的server-id,范围:1^32

 

 

四、从(Slave)机配置-【基本】
    vi编辑打开mysql配置文件
    # vi /usr/local/mysql/etc/my.cnf

    找到从约第56行开始确认以下三项: 
    [mysqld]
log-bin=mysql-bin    # 确认也开启binlog日志
binlog_format=mixed  # 确认binlog日志格式为mixd混合类型
server-id = 2        # 在整个主从架构内指定一个唯一的server-id,范围:1^32
五、在主(Master)机端操作:执行命令刷新主机binlog日志记录,查看主机的最后日志文件及最后pos起始点
    mysql> flush logs;
    mysql> show master status;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000009 |      107 |              |                  |
    +------------------+----------+--------------+------------------+

 

六、在从(Slave)机启动slave服务

 1.使用root用户登录到从(Slave)机
      # /usr/local/mysql/bin/mysql -uroot -p123456

    2.在从(Slave)上执行命令,动态改变连接到主(Master)机的配置,生成或更新master.info文件:
      注: 在生产环境中,如果心跳感应到主机意外宕机,应用程序应该按预案选定出一台新主机,而其它的从机都需要执行一次下面
          的 change master to ...语句,切换自己从属到新主机,这样比较灵活,操作的实质是更新master.info文件,查看此文件也
          能发现MySQL其实是只能支持“一主多从”架构,而不能像Redis那样还可以支持多主一从架构。

      mysql> change master to master_host=‘192.168.0.83‘, master_user=‘slave1‘, master_password=‘789‘, MASTER_LOG_FILE=‘mysql-bin.000006‘, MASTER_LOG_POS=107;

      善于使用?查看详细选项
      mysql> ? change master to

      常用选项:
       master_host=‘192.168.137.26‘ 远程主(Master)机IP      
       master_user=‘slave4‘,        登录远程主(Master)机 用户名
       master_password=‘789‘,       登录远程主(Master)机 密码

      不常用选项:      
       MASTER_LOG_FILE=‘mysql-bin.000009‘ 指定从哪个binlog文件复制(如果不加此参数默认是最早的binlog日志)
       MASTER_LOG_POS=107                 指定从哪个binlog文件的哪个pos点开始复制(如果不加此参数默认是最早的pos点)
       MASTER_PORT=3306,                  远程主(Master)机端口
       MASTER_HEARTBEAT_PERIOD=60         多长时间探测一次主服务器是否在线 单位:秒
       MASTER_CONNECT_RETRY=10;           无法连接主服务器的时候重试连接的间隔时间 单位:秒


    3.启动IO线程和SQL线程,生成master.info文件,查看从(Slave)机状态:
      mysql> start slave;
      mysql> show slave status G

      如果看到如下状态说明同步成功:             
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
      Seconds_Behind_Master: 0


    4.报错处理!如果“Slave_SQL_Running: No”,程序可能在slave上进行了写操作,也可能是slave机器重起后,事务回滚造成的。
      解决方法一: 
      mysql> stop slave;
      mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
      mysql> start slave;
      mysql> show slave status G;

      解决方法二:
      主(Master)上:
      mysql> show master status;  //主机上查看最新的binlog日志名及pos点

      从(Slave)机上:
      mysql> stop slave;          //从机停掉slave服务
      mysql> change master to master_host=‘192.168.137.26‘, master_user=‘slave4‘, master_password=‘789‘, MASTER_LOG_FILE=‘主机最新binlog日志名‘, MASTER_LOG_POS=最新pos点;
      mysql> start slave;
      mysql> show slave status G;
      










以上是关于mysql 主从复制的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中主从复制不同步?

MySQL主从复制和读写分离

MySQL主从复制和读写分离

Linux----------mysql主从复制和基于GTID主从复制

MySQL主从复制

mysql主从复制概述以及配置mysql5.7.10实现简单主从复制