精华内容
下载资源
问答
  • mysql主从复制

    2015-01-14 18:47:34
    mysql主从复制mysql主从mysql主从复制复制
  • MySQL 主从复制

    2021-07-01 14:02:30
    MySQL 主从复制一、MySQL 主从复制原理1.MySQL的复制类型2.mysq支持的复制类型3.MySQL主从复制的工作过程二、MySQL主从复制延迟三、搭建 MySQL 主从复制1.Mysq1主从服务器时间同步 在企业应用中,成熟的业务通常数据...

    在企业应用中,成熟的业务通常数据量都比较大
    单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求
    配置多台主从数据库服务器以实现读写分离

    一、MySQL 主从复制原理

    1.MySQL的复制类型

    基于语句的复制(STATEMENT, MySQL默认类型)
    基于行的复制(ROW)
    混合类型的复制(MIXED)

    2.mysq支持的复制类型

    (1) STATEMENT:基于语句的复制。在服务器上执行sq1语句,在从服务器上执行同样的语句,mysql 默认采用基于语句的复制,
    执行效率高。
    (2) ROW: 基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一 遍。
    (3)MIXED:混合类型的复制。默认采用基于语句的复制,一-旦发现基于语句无法精确复制时,就会采用基于行的复制。

    3.MySQL主从复制的工作过程

    在这里插入图片描述

    (1)在每个事务更新数据完成之前,Master在二进制日志(Binary log)记录这些改变。写入二进制日志完成后,Master通知存储引擎提交事务。

    (2) Slave 将Master 的复制到其中继日志(Relay log)。首先slave开始一个工作线程(I/O) ,I/O线程在Master上打开一个普通的连接,然后开始Binlog dump process。 Binlog dump process 从Master的二进制日志中读取事件,如果已经跟上Master,它会睡眠并等待Master 产生新的事件,I/O线程将这些事件写入中继日志。
    (3) SQL slave thread (SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新Slave 数据,使其与Master 中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小。

    复制过程有一个很重要的限制,即复制在Slave. 上是串行化的,也就是说Master上的并行更 新操作不能在Slave 上并行操作。

    二、MySQL主从复制延迟

    1、master服务 器高并发,形成大量事务

    2、网络延迟

    3、主从硬件设备导致

    cpu主频、内存io、硬盘io

    4、本来就不是同步复制、而是异步复制

    从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。
    从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o方面性。
    从库使用SSD磁盘
    网络优化,避免跨机房实现同步

    三、搭建 MySQL 主从复制

    Master 服务器: 192.168.100.100        mysql5.7
    Slave1 服务器: 192.168.100.110        mysql5.7
    Slave2 服务器: 192.168.100.120        mysql5.7
    

    1.Mysql主从服务器时间同步

    主服务器设置
    
    yum install ntp -y
    vim /etc/ntp.conf
    
    末尾添加
    server 127.127.100.0              #设置本地是时钟源,注意修改网段
    fudge 127.127.100.0 stratum 8     #设置时间层级为8 (限制在15)
    
    service ntpd start
    

    在这里插入图片描述
    在这里插入图片描述

    从服务器设置
    
    yum install ntp ntpdate - y
    service ntpd start
    /usr/sbin/ntpdate 192.168.100.100
    
    #进行时间同步
    crontab -e
    */10 * * * * /usr/sbin/ntpdate 192.168.100.100
    

    在这里插入图片描述

    主服务器的mysql配置
    vim /etc/my.cnf
    
    [mysqld]
    server-id = 11
    log-bin=master-bin        #添加,主服务器开启二进制日志
    binlog_format = MIXED
    log-slave-updates=true    #添加,允许从服务器更新二进制日志
    
    systemctl restart mysqld
    
    mysql -u root -pabc123
    GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.100.%' IDENTIFIED BY '123456';
    
    给从服务器授权
    FLUSH PRIVILEGES;
    show master status;
    

    在这里插入图片描述
    在这里插入图片描述

    从服务器的mysql配置
    vim /etc/my.cnf
    server-id = 22                             #修改,注意id与Master的不同,两个Slave的id也要不同
    relay-log=relay-log-bin                    #添加,开启中继日志,从主服务器上同步日志文件记录到本地
    relay-log-index=slave-relay-bin.index      #添加,定义中继日志文件的位置和名称
    
    systemctl restart mysqld
    mysql -u root -pabc123
    
    CHANGE master to master_host='192.168.100.100',master_user='myslave',
    master_password='123456',master_log_file='master-bin.000001',master_log_pos=604;
    #配置同步,注意master_log_file和master_log_pos的值要与Master查询的一致
    
    start slave;                        #启动同步,如有报错执行reset slave;
    show slave status\G                 #查看Slave 状态
    
    确保I0和SQL线程都是Yes,代表同步正常。
    Slave_IO_Running:Yes       #负责与主机的io通信
    Slave_SQL_Running:Yes      #负责自己的slave_mysql进程
    

    在这里插入图片描述
    在这里插入图片描述

    2.验证主从复制

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结

    主从复制
    MySQL主服务器master将事件写入自己的二进制日志中(binary log) 这时从服务器slave通过I/O线程读取master二进制日志,如同步则进入睡眠并等待master事件更新,I/O线程会将master二进制日志写入到自己的中继日志(存在缓存中),SQL线程将重放中继日志中的事件,写入到slave的数据库中,从而使得slave与master数据一致。

    展开全文
  • MySQL主从复制

    千次阅读 2018-11-30 14:55:48
    MySQL主从复制前言MySQL主从复制准备工作配置详情1.Master数据库配置2.Slave数据库配置3.验证主从复制效果结尾语 前言 最近在学习了Mysql主从复制+Mycat读写分离后,一直想写一遍关于自己的使用心得,开始只写了...

    前言

    最近在学习了Mysql主从复制+Mycat读写分离后,一直想写一遍关于自己的使用心得,开始只写了Mycat的读写分离使用,但是总感觉缺少点什么,就像事情制作了一半的感觉,所以今天就将前面说的Mysql中从复制补上吧,也算是对这部分的总结。

    MySQL主从复制

    准备工作

    在开始MySQL主从复制之前,需要准备好以下几项工作:
    工具

    环境/工具 说明
    MySQL 对于版本没有特殊要求,推荐使用5.7.X
    VMware 这个一个虚拟环境工具,也可以使用其他的工具,这里不做限制
    Linux系统 在虚拟机上安装的操作系统
    服务器1 安装MySQL,用于做主数据库
    服务器2 安装MySQL,用于做从数据库

    说明:这里不对上述的工具安装做介绍,如果安装疑问,请自行百度搜索。

    配置详情

    主数据库服务器:MySQL-Master,从数据库服务器:MySQL-Slave,均已安装MySQL,并且无应用数据。

    1.Master数据库配置

    Master数据库上进行设置,修改配置文件/etc/my.cnf,添加如下配置
    设置:log-bin=mysql-bin
    用yum安装的mysql数据库/etc/my.cnf文件只是满足基本要求,mysql主从时,查看master日志时没有数据显示,因此在/etc/my.cnf文件中添加一行
    设置:server-id = 1
    此值不能和从数据库的一样
    设置:binlog-ignore-db=mysql
    表示哪些库不同步,每个不同步的库写一行
    在这里插入图片描述

    配置完成后重新启动Master数据库。
    在这里插入图片描述

    进入Master数据库安装目录 /usr/local/mysql/bin/

    # cd /usr/local/mysql/bin/	
    

    执行以下命令登录MySQL数据库

    # mysql -uroot -p123456
    

    -u:数据库用户名
    -p:数据库密码

    在这里插入图片描述
    执行以下命令查看Master的状态

    mysql> show master status;
    

    记录File的mysql-bin.000006与 Position的154,等会要用到。
    在这里插入图片描述
    分配一个数据库账号给Slave从数据库 Server,使从服务器能够访问Master数据库;

    grant replication slave on *.* to 'slave'@'%' identified by '123456'
    

    查询mysql 数据库中的user表,查看已分配的用户权限;select * from user;
    在这里插入图片描述

    2.Slave数据库配置

    从服务器Slave server数据库配置, 修改配置文件/etc/my.cnf,添加如下配置

    # vi /etc/my.cnf
    

    设置:server-id=2
    此值不能和主数据库的一样,唯一
    设置:replicate-do-db = test
    可以指定要复制的库
    设置:replicate-ignore-db = mysql
    忽略的库
    在这里插入图片描述
    配置完成重新启动Slave数据库。
    在这里插入图片描述
    进入Salve数据库安装目录 /usr/local/mysql/bin/

    # cd /usr/local/mysql/bin/
    

    执行以下命令登陆本地数据库:

    # mysql -uroot -p123456
    

    在这里插入图片描述
    执行同步SQL语句

    mysql> CHANGE MASTER TO 
        -> Master_Host=192.168.xxx.xxx,
        -> Master_User=slave,
        -> Master_Password=123456,
        -> Master_Port=3306,
        -> Master_Log_File=mysql-bin.0000006,
        -> Master_Log_Pos=154;
    

    启动Slave同步进程

    mysql> start slave;
    

    主从同步检查:

    mysql> show slave status\G
    

    在这里插入图片描述
    特别注意:如果Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,表明成功了,其中任意一个如果不是YES都说明同步失败。

    3.验证主从复制效果

    在Master服务器test数据库上创建一个表t_class,查看是否在Slave从服务器test数据库中自动创建t_class;
    执行建表SQL

    mysql> create table t_class(id int ,name varchar(16));
    

    分别查看master数据库和slave数据库
    在这里插入图片描述
    在这里插入图片描述
    发现master和slave数据库中都已经有了t_class这张表,这说明此时MySQL主从复制已经生效,大功告成。

    结尾语

    由于之前第一次使用MySQL主从,不小心对slave数据库进行了插入数据,结果导致,两个数据库立刻出现了不同步的现象,再次特别说明以下,主从复制是将master数据库的数据复制到slave数据库上,所以如果再slave数据库做了任何的修改都会导致两个数据库出现不同步的现象,如果出现不同步的情况,需要自行解决同步问题。

    展开全文
  • Mysql主从复制

    千次阅读 2016-05-09 17:08:00
    Mysql主从复制

    修改配置文件

    主服务器下:

    修改主服务器master:vim /etc/my.cnf

    [mysqld]
    log-bin=mysql-bin   //[必须]启用二进制日志
    server-id=100      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

    从服务器下:

    修改从服务器slave:vim /etc/my.cnf

    [mysqld]
    log-bin=mysql-bin   //[不是必须]启用二进制日志
    server-id=101      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

    重启两台服务器的mysql

    phpstudy restart

    配置主从

    主服务器下:

    在主服务器上建立帐户并授权slave:
    /phpstudy/mysql/bin/mysql -uroot -p

    mysql>GRANT REPLICATION SLAVE ON *.* to 'vice'@'192.168.1.101' identified by 'password';
    
    #查询master的状态
    mysql>show master status;
    
    登录主服务器的mysql,
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000004 |      308 |              |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    #注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

    从服务器下:

    配置从服务器Slave:

    mysql>change master to master_host='192.168.1.100',master_user='vice',master_password='password',master_log_file='mysql-bin.000004',master_log_pos=308;   #注意不要断开,308数字前后无单引号。
    #注:master_host(主服务器ip),master_user(给从服务器授权的用户名),master_password(授权的密码),master_log_file(主服务器mysql状态-File),master_log_pos(主服务器mysql状态-Position)
    
    Mysql>start slave;    #启动从服务器复制功能
    
    #检查从服务器复制功能状态:
    mysql> show slave status\G
    
       *************************** 1. row ***************************
    
          Slave_IO_State: Waiting for master to send event
          Master_Host: 192.168.1.100  //主服务器地址
          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均属错误)。

    以上操作过程,主从服务器配置完成。

    以下为测试

    主从服务器测试:

    主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:

    mysql> create database hi_db;
      Query OK, 1 row affected (0.00 sec)
    
    mysql> use hi_db;
      Database changed
    
    mysql>  create table hi_tb(id int(3),name char(10));
      Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into hi_tb values(001,'bobu');
      Query OK, 1 row affected (0.00 sec)
    
    mysql> show databases;
       +--------------------+
       | Database           |
       +--------------------+
       | information_schema |
       | hi_db                |
       | mysql                |
       | test                 |
       +--------------------+
       4 rows in set (0.00 sec) 

    从服务器Mysql查询:

    mysql> show databases;
    
       +--------------------+
       | Database               |
       +--------------------+
       | information_schema |
       | hi_db                 |       //I'M here,大家看到了吧
       | mysql                 |
       | test          |
       +--------------------+
       4 rows in set (0.00 sec)
    
    mysql> use hi_db
       Database changed
    mysql> select * from hi_tb;           //查看主服务器上新增的具体数据
       +------+------+
       | id   | name |
       +------+------+
       |    1 | bobu |
       +------+------+
       1 row in set (0.00 sec)

    完成

    展开全文
  • MYSQL主从复制

    2017-10-15 21:00:08
    最近刚看了mysql高级教程先写一篇关于mysql主从复制的配置 mysql优化的话后续补上 首先得有两台服务器安装了mysql本文以mysql5.6为例 在虚拟机上安装两台centos7的服务器,并且都安装了mysql 先修改mysql的...

    最近刚看了mysql高级教程先写一篇关于mysql主从复制的配置
    mysql优化的话后续补上
    首先得有两台服务器安装了mysql本文以mysql5.6为例
    在虚拟机上安装两台centos7的服务器,并且都安装了mysql
    这里写图片描述
    先修改mysql的配置 my.cnf

    vim /etc/my.cnf

    这里写图片描述
    先配置主机文件

    ##mysql 主从复制的二进制文件
    log-bin=mysql-bin
    ##忽略哪个库
    binlog-ignore-db=mysql

    每个slave只有一个master
    且每个slave只能有唯一的服务器id也就是

    server-id       = 1

    这样主机文件就配置好了
    接着配置从机服务器
    这里写图片描述
    将原有配置的server-id = 1注释掉
    这里写图片描述
    打开下面的service-id=2的注释
    这样简易版的配置就配置好了
    还有一些配置参考
    这里写图片描述

    配完之后
    重启mysql服务,主机从机都要重启

    service mysql stop
    
    service mysql start

    用客户端连接进入主机mysql
    这里写图片描述

    ##自己安装的时候的用户名密码
    mysql -u root -p123456

    之后在主机上建立帐户并授权slave

    ##建立帐户并授权slave
    GRANT REPLICATION SLAVE ON *.* TO 'zhangsan'@'192.168.1.104' IDENTIFIED BY '123456';
    ##刷新
    FLUSH PRIVILEGES;

    这里写图片描述
    查看主机状态

    show master status;

    这里写图片描述
    到此,主机这边已经弄好了,现在开始弄从机的,也用client登进mysql服务
    执行这条sql
    其中
    HOST对应的是自己的主机ip
    USER和PASSWORD对应的是自己刚刚建立的用户和密码
    FILE对应的上在主机show master status查看来的FILE
    POS对应的上在主机show master status查看来的Position

    CHANGE MASTER TO MASTER_HOST='192.168.1.102',
    MASTER_USER='zhangsan',
    MASTER_PASSWORD='123456',
    MASTER_LOG_FILE='mysql-bin.000009',
    MASTER_LOG_POS=120;

    之后执行

    start slave;

    查看slave状态 \G以键值对的格式输出,方便查看

    show slave status\G;

    这里写图片描述
    主要查看slave_io_running跟SLAVE_SQL_RUNNING是否都为yes
    现在已经都已经准备好了
    查看从机库

    show databases;

    这里写图片描述
    现在开始在主机上建库与建表,并且插入数据,从机会自动复制,说明已经配置好了主从复制
    这里写图片描述

    create database testDB1;
    create table test(id int not null,name varchar(20));
    insert into test values(1,'test');
    select * from test;

    现在开始查看从机
    这里写图片描述
    多出了testdb1这个库
    查看数据是否一致
    这里写图片描述
    数据一致,此时已经完成主从复制了
    关闭从机复制 执行

    stop slave;

    这里写图片描述
    此时这两个数均为NO
    到此已经完成了MYSQL的主从复制

    展开全文
  • mysql 主从复制 mysql 主从同步 mysql 主从配置 主MySQL设置 1、编辑主MYSQL 服务器的MySQL配置文件my cnf,在[mysqld]下面添加以下参数: log-bin=mysql-bin 开启MYSQL二进制日志 server-id=1 主MySQL设置 1、...
  • MySQL主从复制详解

    千次阅读 多人点赞 2018-06-10 20:03:09
    1 MySQL主从复制原理 2 MySQL主从复制原理图 3 MySQL主从复制小结 4 MySQL多实例主从复制 5 MySQL主从复制步骤小结 6 快速添加MySQL从库 7 MySQL主从复制故障解决 1 MySQL主从复制原理 1、MySQL的主从复制是...
  • 1、mysql主从复制原理主从复制实现的核心是mysql二进制日志,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。当一个从服务器连接主服务器时,从服务器通过复制主服务器在二进制日志中的...
  • mysql 主从复制

    2014-06-19 10:04:03
    mysql主从复制 (超简单) 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1、主从服务器分别作以下操作:  1.1、版本一致  1.2、初始化表,并在后台启动mysql  1.3、修改root的密码 ...
  • 文章目录什么是主从复制为什么需要主从复制mysql的主从复制mysql主从复制数据一致性问题方法 1:异步复制方法 2:半同步复制方法 3:组复制三种复制总结redis的主从复制 什么是主从复制 是一种数据备份的方案。 简单...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 94,849
精华内容 37,939
关键字:

mysql主从复制

mysql 订阅