码迷,mamicode.com
首页 > 数据库 > 详细

mysql 主从复制

时间:2018-12-30 17:27:57      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:art   成功   执行   用户名   无法连接   nec   记录   code   改变   

一、准备环境:
    主(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 主从复制

标签:art   成功   执行   用户名   无法连接   nec   记录   code   改变   

原文地址:https://www.cnblogs.com/sbfnxk201/p/10199721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!