`
Adan-Chiu
  • 浏览: 21805 次
社区版块
存档分类
最新评论

mysql数据库主从同步

 
阅读更多

 

什么是主从同步

        所谓主从同步,是指两个或多个数据库数据一致,一个库数据的更新会同步更新到所有的数据库上。

主从同步的必要性

      在实际项目中,为了产品的高可用,我们常常会搭建多台数据库,实现冗余,达到负载均衡、容灾等目的。比如,只有一台数据库的时候,大量的用户请求,或者由于一些硬件故障导致的宕机,将会导致整个应用的crash,此时如果能够有多余的服务器提供服务,就可以将请求分配到别的可用的服务器,从而保证用户的正常使用!摆在我们跟前的问题就是,如何能够保证两台或多台数据库服务器上数据的一致性!

主从同步的作用

  • 服务器容灾,一旦主服务器出现问题,可以快速切换到从服务器,继续提供服务
  • 负载分担,查询请求可以交给从服务器,从而减少主服务器的压力
  • 数据备份,在从服务器上进行数据备份,以避免备份期间主服务器性能收到影响

主从同步原理

  1. 主服务器验证连接。
  2. 主服务器为从服务器开启一个线程。
  3. 从服务器将主服务器日志的偏移位告诉主服务器。
  4. 主服务器检查该值是否小于当前二进制日志偏移位。
  5. 如果小于,则通知从服务器来取数据。
  6. 从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠
  7. 当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。
  8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态2

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

master主库配置

      如何能够保证两台或多台数据库服务器上数据的一致性呢,我已经准备好主从库的相关环境,接下来完成主从配置,针对主库配置

  • 打开修改my.cnf
    server-id=128 #(一个集群中必须保证唯一,一般取ip最后一段)
    #开启binlog,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中
    log-bin=mysql-bin
  • 创建同步账号并授权
    create user '用户名'@'%' identified with mysql_native_password by '密码';
    
    grant replication slave on *.* to '用户名'@'%';
  • 如有需要,可以重置主库从库日志 reset master/slave
  •  查询主数据库状态 show master status

slave从库配置

  • 打开修改my.cnfmy.cnf/ini中server-id
    server-id=129
    #从库可以打开logbin,也可以不打开
    relay-log-index=slave-relay-bin.index
    relay-log=slave-relay-bin 
  • 启动服务配置同步参数
    change master to
           master_host='192.168.1.128',   #master IP
           master_user='',                #master数据库通过GRANT授权的账号
           master_password='',            #master数据库通过GRANT授权的密码
           master_port=3306,              #master数据库的端口号
           master_log_file='mysql-bin.000010', #master数据库中通过show master status显示的File名称
           master_log_pos=16306           #master数据库的通过show master status显示的Position的值,表示从1144操作的步骤开始执行同步 
  • 启动主从同步进程
    start slave
  • 检查状态
    show slave status

       Slave_IO_Running:负责从库去主库读取二进制日志,并写入到从库的中继日志

       Slave_SQL_Running:负责将中继日志换成SQL语句执行

      以上两个状态都为yes即OK

主库配置同步策略

  • 不允许跨库
    --binlog-do-db=db_name
    
    --binlog-ignore-db=db_name

从库配置同步策略

  • replicate-do-db=database1 //同步的数据库
  • replicate-do-db=database2
  • replicate-ignore-db=mysql //被忽略的数据库
  • replicate-do-table=db_name.tbl_name
  • replicate-ignore-table=db_name.tbl_name

以下都允许跨库

  • replicate-wild-do-table=db_name.tbl_name
  • replicate-wild-ignore-table=db_name.tbl_name

使用主从同步来备份(测试)

  •   主库备份
    mysqldump -uroot -p test>dump.sql
    scp dump.sql root@192.168.134.129:路径
  •    从库恢复
    方法一
    mysql -uroot -p test<dump.sql
    方法二
    [root@localhost ~]# mysql -uroot -p test
     mysql> source dump.sql

操作主库数据进行主从同步测试

常见问题

Slave_IO_Running: NO

这是一个很常见的错误(我也曾对这个错误咬牙切齿),总结起来就三个原因:

  1. 主服务器的网络不通,或者主服务器的防火墙拒绝了外部连接3306端口(检查网络,开放端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent
    firewall-cmd --reload)
  2. 在配置从服务器时,输错了ip地址和密码,或者主服务器在创建用户时写错了用户名和密码
  3. 在配置从服务器时,输错了主服务器的二进制日志信息,出现slave的position比master大

     slave上执行以下操作:

  • stop slave
  •  reset slave
  • change master(比如:change master to master_host='192.168.1.128',master_user='',master_password='',master_log_file='mysql-bin.000010',MASTER_LOG_POS=16306)
  • start slave

虽然上述可以解决问题,但是可能会导致数据不统一,所以建议导出主库数据,然后在从库恢复。 

 

分享到:
评论

相关推荐

    MySQL数据库主从同步服务器部署

    MySQL数据库主从同步服务器部署 MySQL数据库主从同步服务器部署是指将一个 MySQL 数据库分成主服务器和从服务器,以提高数据库的可用性和性能。本文档将详细介绍 MySQL 数据库主从同步服务器的部署过程,包括配置...

    MYSQL数据库主从复制高可用技术改造环境部署方案

    ### MySQL数据库主从复制高可用技术改造环境部署方案 #### 安装部署DRBD DRBD(Distributed Replicated Block Device)是一种分布式复制块设备,主要用于实现数据在两台或多台服务器之间的实时同步,以此来构建高...

    MySQL数据库主从配置

    MySQL 数据库主从配置 MySQL 数据库主从配置是指在 MySQL 数据库中实现主从复制的...MySQL 数据库主从配置是实现数据库实时同步的重要步骤,该过程需要在主服务器和从服务器上进行配置,以确保数据的安全和一致性。

    MySQL数据库主从复制的实现.pdf

    MySQL数据库主从复制的实现 MySQL数据库主从复制是指在生产环境中,当主数据库出现故障时,备用机器能够实时接管,这就需要两台数据库的数据要实时保持一致。MySQL提供单向异步同步功能,同步机制是基于master主...

    mysql数据库主从数据同步配置文档

    mysql数据库主从数据同步, vim /etc/mysql/my.cnf server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog-do-db=proxy 注:binlog-do-db提供数据同步服务的数据库 #忽略的数据库复制 binlog-ignore-db=...

    mysql 数据库主从配置

    mysql 数据库主从配置是指将一个 mysql 服务器设置为主服务器,另一个 mysql 服务器设置为从服务器,并将主服务器上的数据实时同步到从服务器上,以达到数据备份和负载均衡的目的。该配置可以提高数据库的可用性和可...

    配置Mysql数据库主从同步

    以下是对配置MySQL数据库主从同步的详细步骤和相关知识点的说明: 1. **设置环境**: - 在这个项目中,我们有两个服务器,一个是主数据库(IP: 192.168.1.31),另一个是从数据库(IP: 192.168.1.32)。 2. **主...

    Mysql+Mycat实现数据库主从同步与读写分离.docx

    【MySQL+Mycat 实现数据库主从同步与读写分离】 MySQL 主从同步是一种常见的数据库高可用解决方案,它通过复制技术将数据从主数据库实时地、无损地同步到从数据库,确保在主库发生故障时可以从从库接管服务,从而...

    数据库主从同步

    详细介绍了mysql主从同步的步骤,和可以轻松实现mysql数据库主从同步。

    MySQL数据库的主从同步备份在windows下实现

    MySQL数据库的主从同步备份是一种常见的高可用性和数据冗余策略,它允许在一个主服务器(Master)上执行写操作,而这些更改会自动复制到一个或多个从服务器(Slave)。在Windows环境下,这个过程需要一些特定的配置...

    mysql-replication mysql数据库主从复制步骤

    根据提供的文件信息,我们可以深入探讨MySQL数据库主从复制的相关配置及步骤。MySQL主从复制是一种常用的数据冗余机制,能够实现数据的实时备份,并在主服务器出现故障时快速切换到从服务器,保证业务的连续性。接...

    MySQL主从同步配置过程.docx

    MySQL 主从同步配置是指将 MySQL 数据库的数据从一台服务器(主服务器)同步到另一台服务器(从服务器)的过程。这种配置可以实现数据的高可用性和灾难恢复,提高系统的整体性能和安全性。 二、 主从同步配置的基本...

    mysql主从数据库不同步的2种解决方法

    今天发现Mysql的主从数据库没有同步 先上Master库: mysql&gt;show processlist; 查看下进程是否Sleep太多。发现很正常。 show master status; 也正常。 mysql&gt; show master status; +——————-+———-+————–...

Global site tag (gtag.js) - Google Analytics