zoukankan      html  css  js  c++  java
  • Mysql主从复制 环境搭建

    Master -server配置

    1.关闭防火墙

    systemctl stop firewalld.service
    

    2.停掉mysql

    systemctl stop mysqld.service
    

    3.开启binlog

    vim /etc/my.cnf
    [mysqld]
    log-bin=mysql-bin
    server-id=1
    

    4.启动mysql

    systemctl start mysqld.service
    

    5.登录mysql,并创建用户

    mysql -uroot -p
    CREATE USER 'slave'@'192.168.11.128' IDENTIFIED BY 'slave';
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.11.128';
    或者
    CREATE USER 'slave'@'%' IDENTIFIED BY 'slave';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    

    Slave-server配置

    1.停掉mysql

    systemctl stop mysqld.service
    

    2.修改my.cnf

    vim /etc/my.cnf
    [mysqld]
    server-id=2
    

    3.启动mysql

    systemctl start mysqld.service
    

    4.登录mysql

    mysql -uroot -p	
    

    5.在Master中执行,查询Master状态

    mysql> show master status
    

    6.Slave中设置Master信息

    change master to master_host='192.168.11.128', master_user='slave', master_password='slave', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=155, master_connect_retry=30;
    
    注意:如果该线程在运行,停掉slave io线程
    STOP SLAVE IO_THREAD FOR CHANNEL '';
    

    说明:

    master_log_file='mysql-bin.000001' #指定Slave从哪个日志文件开始读复制数据(Master上执行命令的结果的File字段)

    master_log_pos=1797 # 从哪个POSITION号开始读(Master上执行命令的结果的Position字段)

    master_user='slave' # 用于同步数据的用户(在Master中授权的用户)

    master_password='123456' # 同步数据用户的密码

    master_host='192.168.11.128' # Master的IP地址

    7.查看主从同步状态
    在Slave中执行命令

    mysql> show slave statusG;
    

    可看到Slave_IO_State为空, Slave_IO_Running和Slave_SQL_Running是No,表明Slave还没有开始复制过程。相反Slave_IO_Running和Slave_SQL_Running是Yes表明已经开始工作了

    8.开启主从同步

    在Slave中执行命令

    # 开启同步
    start slave;
    

    9.检查主从复制通信状态

    mysql> show slave statusG;
    

    Slave_IO_State #从站的当前状态
    Slave_IO_Running: Yes #读取主程序二进制日志的I/O线程是否正在运行
    Slave_SQL_Running: Yes #执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
    Seconds_Behind_Master #是否为0,0就是已经同步了

    必须都是 Yes

    如果不是原因主要有以下 4 个方面:

    1、网络不通
    2、密码不对
    3、MASTER_LOG_POS 不对 ps
    4、mysql 的 auto.cnf server-uuid 一样(可能你是复制的mysql)

    vim /var/lib/mysql/auto.cnf
    [auto]
    server-uuid=6b831bf3-8ae7-11e7-a178-000c29cb5cbc # 按照这个16进制格式,修改server-uuid,重启mysql即可
    

    10. 测试
    (1.)在 Master-Server 创建测试库

     mysql> CREATE DATABASE `replication_wwww.ymq.io`;
     mysql> use `replication_wwww.ymq.io`;
     mysql> CREATE TABLE `sync_test` (`id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    

    (2.)在 Slave-Server 查看是否同步过来

    mysql> show databases;
    mysql> use replication_wwww.ymq.io
    mysql> show tables;
    

    其他常用命令

    查看主服务器的运行状态

    mysql> show master status;
    

    查看从服务器主机列表

    mysql> show slave hosts;
    

    获取binlog文件列表

    mysql> show binary logs;
    

    只查看第一个binlog文件的内容

    mysql> mysql> show binlog events;
    

    查看指定binlog文件的内容

    mysql> mysql> show binlog events in 'mysql-bin.000001';
    

    启动从库复制线程

    mysql> START SLAVE;
    

    停止从库复制线程

    mysql> STOP SLAVE;
    

    相关链接

    Mysql主从服务器搭建

    基于binlog主从复制

    Linux下搭建Mysql集群

  • 相关阅读:
    springboot之手动控制事务
    Java的几种常见排序算法
    Java之协程(quasar)
    中文字符和中文标点符号的正则表达式
    【转】SignalR与ActiveMQ结合构建实时通信
    【转】根据Quartz-Cron表达式获取最近几次执行时间
    【转】IIS请求筛选模块被配置为拒绝超过请求内容长度的请求
    【转】C# 中Linq查询所有上级节点或所有下级节点
    【转】FluentAPI详细用法
    【转】SQL数据库日志文件收缩
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/12403645.html
Copyright © 2011-2022 走看看