• MySQL单向主从同步实践


    一、背景目的

      在生产环境有个mysql数据库,体验有限,开发的时候经常会出现由于数据错误导致的程序问题,而且日志经常写的也不清不楚,但是直接连接生产数据库风险太大,所以我就想把生产环境的数据同步到本地环境过来,然后在本地进行调试

    首先百度了一大篇,反正很多,大部分都有些过时了,实践起来不怎么成功,我照着做成功的文章地址:https://blog.csdn.net/qq_26819733/article/details/59557712,而且这篇文章把原理也说的很清楚了

    二、操作

      Master数据库配置

      1)、Master数据库配置

          第一步肯定是创建同步数据所要使用的数据库账户了和分配权限了,slave的ip是因为我只想用这个账户在从数据库服务器上登录,其他地方就不允许登录

    CREATE USER '{用户名}'@'{slave的IP地址}' IDENTIFIED BY '{密码}';
    

      分配权限

    grant replication slave on *.* to '{上一步创建的用户}'@'{slave的ip地址}' identified by '{密码}';
    

      2)、数据库配置文件配置(xxx.cnf配置文件)

      

    #设置服务器id,为1表示主服务器,
    server-id=1                             #设置服务器id,为1表示主服务器,
    log_bin=mysql-bin                  #启动MySQ二进制日志系统
    binlog_format=mixed
    binlog_do_db=lotteryticket      #需要同步的数据库名,如果有多个数据库,可重复此参数,
    binlog_ignore_db=mysql         #不同步mysql系统数据库
    binlog_ignore_db=information_schema  #不同步information_schema系统数据库
    
    
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    

      都有注释应该不用在详细说明

      这里说一下我遇到的坑,其实主从配置的关键内容只有server-id、log_bin、binlog_format、binlog_do_db、binlog_ignore_db这些配置。我之所以把下面的也贴出来,是因为我开始的时候把主从的配置写到了[mysql]这些下面,

      数据库启动没什么问题,但是在用命令登录的时候会报错。unknown variable server-id,最终换个位置就行了

    3)、配置完以后重启一下,OK,主数据库配置就完成了

      登录上Master数据,使用show master status;查看状态

     记住那个file有用,否则会不成功

      Slave数据库配置

    1)、数据库配置文件(xxx.cnf配置文件)

      跟Master的配置差不多,主要就是server-id不能写成1就行了

    #设置服务器id,为1表示主服务器,
    server_id=2
    log_bin=mysql-bin
    binlog_format=mixed
    replicate_do_db=lotteryticket
    replicate_ignore_db=mysql
    replicate_ignore_db=information_schema
    
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    

    2)、登录上slave数据库进行配置

      

    mysql> stop slave;
    mysql> change master to master_host='xx.xx.xx.xx', master_user='root',master_password='123456',
    master_log_file='mysql-bin.000001',
    master_log_pos=154;(保证是最新的position)
    mysql> start slave;
    

      注意这里的master_log_file需要配置上面查看状态得到的file名字,否则启动的时候Slave_IO_Running参数会是No导致同步不成功

    3)、show slave status;查看从数据库状态,看到Slave_IO_Running为YES和Slave_SQL_Running也是YES说明就成功了。很奈斯

  • 相关阅读:
    Java实现 LeetCode 537 复数乘法(关于数学唯一的水题)
    Java实现 LeetCode 537 复数乘法(关于数学唯一的水题)
    Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
    Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
    如何在 Linux 中统计一个进程的线程数
    linux下查看线程数的几种方法
    深入理解linux系统下proc文件系统内容
    嵌入式 如何定位死循环或高CPU使用率(linux)
    Linux 下查看线程信息
    Linux netstat命令详解
  • 原文地址:https://www.cnblogs.com/txb1989/p/12964205.html
Copyright © 2020-2023  润新知