MySQL主从复制实现

上回提到了用ThinkPHP框架来实现数据库的读写分离,现在就来简单说说MySQL的主从复制。

形式

  • 一主一从(也就是这里要实现的形式)
  • 主主复制
  • 一主多从
  • 多主一从(MySQL5.7开始支持)
  • 联级复制

如图:图来自互联网

条件

  • 主库开启binlog日志(设置log-bin参数)
  • 主从server-id不同(这个要小心)
  • 从库服务器能连通主库

原理

  • 从库生成两个线程,一个I/O线程,一个SQL线程;
  • i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
  • 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
  • SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

步骤

  • 在主数据库配置文件中加入以下代码
  • [[email protected] ~]# vim /etc/my.cnf
log-bin=mysql-bin // 将mysql二进制日志取名为mysql-bin
binlog_format=mixed // 二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed
server-id=111 // 为服务器设置一个独一无二的id便于区分,这里使用ip地址的最后一位充当server-id
  • 配置完成后,保存并重启主MySQL数据库
  • 在从数据库重复同样的操作,不一样的是server-id要写主数据库的,这里写的是server-id=110;
  • 保存并重启从MySQL数据库
  • 登录主MySQL数据库,在主数据库为从数据库分配一个账号,用于从数据库共享主数据库的日志文件
GRANT replication slave ON *.* TO ‘slave‘@‘%‘ IDENTIFIED BY ‘123456‘;
  • mysql> GRANT replication slave ON *.* TO ‘slave‘@‘%‘ IDENTIFIED BY ‘123456‘;
    Query OK, 0 rows affected (0.00 sec)
  • 查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变);
  • mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 | 315 | | | |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
  • 进入从数据库
  • 如果之前有配置过主从复制,一定要先关闭slave
  • 关闭命令为:stop slave
  • 配置开始:change master to master_host=‘192.168.33.110‘,master_user=‘slave‘,master_password=‘123456‘,
             master_log_file=‘mysql-bin.000001‘,master_log_pos=315;
  • 参数解释:

       master_host=‘192.168.33.110‘ // 设置要连接的主服务器的ip地址

    master_user=‘slave‘ // 设置要连接的主服务器的用户名

    master_password=‘123456‘ // 设置要连接的主服务器的密码

    master_log_file=‘mysql-bin.000001‘ // 设置要连接的主服务器的bin日志的日志名称,即show slave status命令得到的信息File列名称

    master_log_pos=315 // 设置要连接的主服务器的bin日志的记录位置,即show slave status命令得到的信息Position列名称,(这里注意,最后一项不需要加引号。否则配置失败)

    从数据库配置完成,重启MySQL服务

  • mysql> start slave;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
  • mysql> show slave status \G
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 192.168.33.110
    Master_User: slave
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000001
    Read_Master_Log_Pos: 1036
    Relay_Log_File: localhost-relay-bin.000002
    Relay_Log_Pos: 1004
    Relay_Master_Log_File: mysql-bin.000001
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Replicate_Do_DB:
    Replicate_Ignore_DB:
    Replicate_Do_Table:
    Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
    Replicate_Wild_Ignore_Table:
    Last_Errno: 0
    Last_Error:
    Skip_Counter: 0
    Exec_Master_Log_Pos: 1036
    Relay_Log_Space: 1181
    Until_Condition: None
    Until_Log_File:
    Until_Log_Pos: 0
    Master_SSL_Allowed: No
    Master_SSL_CA_File:
    Master_SSL_CA_Path:
    Master_SSL_Cert:
    Master_SSL_Cipher:
    Master_SSL_Key:
    Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
    Last_IO_Errno: 0
    Last_IO_Error:
    Last_SQL_Errno: 0
    Last_SQL_Error:
    Replicate_Ignore_Server_Ids:
    Master_Server_Id: 111
    Master_UUID: 39a19e0a-7957-11e6-aa19-0800272020f4
    Master_Info_File: /Data/data/mysql/data/master.info
    SQL_Delay: 0
    SQL_Remaining_Delay: NULL
    Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
    Master_Retry_Count: 86400
    Master_Bind:
    Last_IO_Error_Timestamp:
    Last_SQL_Error_Timestamp:
    Master_SSL_Crl:
    Master_SSL_Crlpath:
    Retrieved_Gtid_Set:
    Executed_Gtid_Set:
    Auto_Position: 0
    1 row in set (0.00 sec)
  • 如果这两个全部是yes,才表示成功,否则失败;Slave_IO_Running: Yes;Slave_SQL_Running: Yes

最后就可以测试是否可以了~~~

时间: 2024-09-29 00:21:26

MySQL主从复制实现的相关文章

mysql主从复制与读写分离

MySQL主从复制与读写分离 MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面. 因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部

42-4 mysql主从复制

04 mysql主从复制架构及实现 实战:主主复制 [[email protected] ~]# systemctl stop mariadb.service  [[email protected] ~]# systemctl stop mariadb.service [[email protected] ~]# rm -rf /var/lib/mysql/* [[email protected] ~]# rm -rf /var/lib/mysql/* [[email protected] ~]

MySQL主从复制、读写分离、高可用集群搭建

MySQL主从复制.读写分离.高可用集群搭建  一.服务介绍   1.1 Keepalived     Keepalived,见名知意,即保持存活,其目的是解决单点故障,当一台服务器宕机或者故障时自动切换到其他的服务器中.Keepalived是基于VRRP协议实现的.VRRP协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成虚拟设备,可以对外提供虚拟路由器IP(一个或多个),即漂移IP(VIP). 1.2 ProxySQL ProxySQL是一个高性能,高可用性的MySQL

MySQL主从复制介绍

1.1 MySQL主从复制原理介绍 MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个MySQL数据库(我们称之为Master)复制到另一个MySQL数据库(我们称之为Slave),在Master与Slave之间实现整个主从复制的过程是由三个线程参与完成的,其中有两个线程(SQL线程和IO线程)在Slave端,另外一个线程(I/O线程)在Master端. 要实现MySQL的主从复制,首先必须打开Master端的binlog记录功能,否则就无法实现.因为整个复制过

mysql主从复制延迟问题的相关知识与解决方案

一.如何监控发生了主从延迟? 在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值为0. Mysql主从延迟一个重要的原因之一是:mysql是以单线程串行执行. 主从复制数据时,在从服务器上的mysql,是一个线程在同步数据. 串行的方式,它是指,执行一个后才继续执行下一个.如果一个卡住了,要等待时间,才会继续下一个.串行与并行是相反的. 二.同步延迟发生的场景 当主库的TPS并

生产环境 MySQL主从复制(同步)

服务器信息 1.主服务器信息 [email protected]:~$ lsb_release -a No LSB modules are available. Distributor ID:  Ubuntu Description:     Ubuntu 14.04.4 LTS Release:   14.04 Codename:  trusty [email protected]:~$ mysql -V mysql  Ver 14.14 Distrib 5.5.50, for debian-

linux笔记 第四十课 mysql主从复制

1.MYSQL复制的基础概念 2.MYSQL复制的实现 3.MYSQL复制架构及双主模型演示 4.MYSQL复制监控/常见问题及解决方案 5.MariaDB  GTID及多源复制 6.MariaDB  GTID读写分离及mysql-proxy的使用 一.MySQL主从复制的基础知识 二.MySQL主从复制实现(以mariadb 5.5.36为例) 实验环境:主服务器(node1)172.16.100.7 从服务器(node2)172.168.100.8 软件:mariadb-5.5.36-lin

浅谈mysql主从复制的高可用解决方案

1.熟悉几个组件(部分摘自网络)1.1.drbd     —— DRBD(Distributed Replicated Block Device),DRBD号称是 "网络 RAID",开源软件,由 LINBIT 公司开发.DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中.他是有内核 模块和相关程序而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能.也就是说当你将数据写入本地的DRBD设备上的文件系统 时, 数据会同时被发送到网

Mysql主从复制排错案例一

MYSQL主从复制排错案例一: 问题:主从无法同步现象:MASTER: mysql> show master status;              Empty set (0.00 sec)      SLAVE:  mysql> show slave status \G;              Slave_IO_Running: Connecting              Slave_SQL_Running: Yes              Seconds_Behind_Mast

mysql主从复制--mysql-5.5异步、半同步配置

背景介绍 mysql5.5之前版本,mysql主从复制比较简单 mysql5.6:gtid,multi-thread replication master 1 启用二进制日志 log-bin = master-bin log-bin-index = master-bin.index 2 选择一个唯一的server id server-id = [0~2^32] 3 创建具有复制权限的用户 replication slave,复制的从节点 replication client,联系master,获