zoukankan      html  css  js  c++  java
  • mysql主从复制

    大型网站为了解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。

    到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是不堪设想。

    这时候,我们会考虑如何减少数据库的接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:memcached,redis。如果资金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力这就涉及到之前讲到的负载均衡

    概述:搭设一台Master服务器,搭设两台Slave服务器

    原理:主服务器(Master)负责网站Query操作,从服务器负责nonQuery操作,用户可以根据网站功能特性,模块访问Slave服务器,为请求分配从服务器连接。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。

    具体实现:


    主服务器配置

     

    1.Master MySQL上创建一个用户‘repl’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

    create user repl; //创建新用户

    //repl用户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,密码为mysql。说明一下192.168.1.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.1.0-192.168.1.255的Server都可以以repl用户登陆主服务器。当然你也可以指定固定Ip。

    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%' IDENTIFIED BY 'mysql';

    2.找到MySQL安装文件夹修改my.cnf文件。mysql复制有好几种日志方式,这不是今天的重点。我们只要启动二进制日志log-bin就ok。

    [mysqld]下面增加下面几行代码

    //给数据库服务的唯一标识,一般为大家设置服务器Ip的末尾号

    server-id=1   

    log-bin=master-bin //启用二进制日志

    log-bin-index=master-bin.index //二进制日志索引

    3.查看日志

    SHOW MASTER STATUS;

     

    看到上方的信息后,不要再操作主服务器MYSQL,防止主服务器状态值变化,然后重启MySQL服务

    从服务器配置

    1.找到MySQL安装文件夹修改my.cnf文件,在[mysqld]下面增加下面几行代码

    server-id=2

    relay-log-index=slave-relay-bin.index

    relay-log=slave-relay-bin

    重启MySQL服务

    2.连接Master

    change master to master_host='192.168.1.187', //Master 服务器Ip
    master_port=3306,//Master 服务器端口
    master_user='repl',//Master 服务器用户
    master_password='mysql', //Master 服务器密码
    master_log_file='master-bin.000001',//Master服务器产生的日志
    master_log_pos=0;//Master 服务器二进制日志的位置,是IO线程

    关于log_pos参数,详情:http://blog.haohtml.com/archives/11529

    3.启动slave

    start slave;

    所有配置都完成了,这时候大家可以在Master Mysql 中进行测试了,因为我们监视的时Master mysql所有操作日志,所以,你的任何改变主服务器数据库的操作,都会同步到从服务器上。创建个数据库,表试试吧。。

     

    检查从服务器复制功能状态:

    show slave statusG

       *************************** 1. row ***************************

                  Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.222  //主服务器地址
                  Master_User: mysync   //授权帐户名,尽量避免使用root
                  Master_Port: 3306    //数据库端口,部分版本没有此行
                  Connect_Retry: 60
                  Master_Log_File: mysql-bin.000004
                  Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
                  Relay_Log_File: ddte-relay-bin.000003
                  Relay_Log_Pos: 251
                  Relay_Master_Log_File: mysql-bin.000004
                  Slave_IO_Running: Yes    //此状态必须YES
                  Slave_SQL_Running: Yes     //此状态必须YES

    注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

    扩展:

    数据库主主复制-双机热备

    https://www.cnblogs.com/kristain/articles/4142970.html

    数据库复制的方式

    http://blog.csdn.net/ztianming/article/details/72876609

    Mysql日志种类

    http://blog.csdn.net/dbdoctor/article/details/53184019

    二级制日志-binlog详细介绍

    https://www.cnblogs.com/martinzhang/p/3454358.html

  • 相关阅读:
    前端入门flutter-05Image组件
    前端入门flutter-03Flutter目录结构介绍、入口、自定义Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
    前端入门flutter-02Dart语言学习
    前端入门flutter-01配置环境
    恋上数据结构使用什么编程语言讲解
    centOS7+:docker版本过低升级到高版本
    JAVA中List数组判断是否有重复元数
    连接数据库时username冲突
    Quartz的学习
    MySQL 服务无法启动解决途径
  • 原文地址:https://www.cnblogs.com/miaozhihang/p/9455442.html
Copyright © 2011-2022 走看看