zoukankan      html  css  js  c++  java
  • 主从同步

    主从同步

    PS: 知识来自颜群老师,为了加强知识,记录博客。bilibili搜索:颜群老师

    主从复制(集群在数据库的一种实现)

    搭建环境:基于5.5.58版本

    1、以Windows为主数据库(master)

    2、以Linux上的centos中的MySQL为从数据库(slave)

    安装windows版mysql

    1、如果之前计算机中安装过MySQL,如果要重新再安装 则需要:先卸载 再安装

    2、卸载

    • 通过电脑自带卸载工具卸载Mysql (电脑管家也可以)
    • 删除一个mysql缓存文件C:ProgramDataMySQL
    • 删除注册表regedit中所有mysql相关配置
    • 重启计算机(最好执行一次)

    安装MYSQL

    这里提供一个链接:
    链接:https://pan.baidu.com/s/1g_vxXOVuSVrh0nJwFCvnag 
    提取码:skc9 
    linux版本:或者可以加我联系方式QQ 发给你 2437732817
    

    安装时可以自行百度,基本上是傻瓜式安装。

    如果不会的话,这里也给一个别人的博客:https://blog.csdn.net/qq_40128682/article/details/82714869

    如果没问题的话,则说明安装成功了!!

    但是安装时,如果出现未响应:则重新打开D:MySQLMySQL Server 5.5inMySQLInstanceConfig.exe,在尝试把之前的配置一次。

    操作MySQL数据库的图形化客户端:sqlyog navicat DataGrip

    如果要远程连接数据库,则需要授权远程访问。

    授权远程访问 :(A->B,则在B计算机的MySQL中执行以下命令)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;  #授权
    
    FLUSH PRIVILEGES;  #刷新
    

    如果仍然报错:可能是防火墙没关闭 : 在B关闭防火墙 systemctl stop firewalld systemctl disable firewalld

    思考问题:如何能连接上别人的mysql?

    实现主从复制

    主从同步 同步的核心:二进制日志 binary log

    具体的步骤

    1、master将改变的数据记录在本地的二进制日志中(binary log )该过程称之为 二进制日志事件

    2、slave将master的binary log 拷贝 到自己的relay log(中继日志文件)中(通过IO线程

    3、中继日志文件通过 SQL线程 将 数据 读取到自己的数据库之中

    可以得出的结论:MySQL实现主从复制:是异步的,串行化的,有延迟的

    延迟:数据在传输的时候需要时间,并不是时时的的,是有延迟的。

    配置一般的比例
    master:slave = 1:n

    配置

    1、Windows(mysql:my.ini)

    2、Linux(mysql:my.cnf)

    防火墙

    关闭windows的防火墙:右键”网络“

    Linux:service iptables stop

    权限

    mysql设置成可以远程访问(windows/centos)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; 
    //大致意思是授予全部权限 root用户 任意IP 密码root
    
    windows在安装的时候已经勾上了 ,如果没有也可以执行一下
    
    FLUSH PRIVILEGES;       //刷新数据
    

    主机配置:(以下代码和操作,全部在主机Windows中操作):

    注意斜杠 /

    server-id=1
    #二进制日志文件
    log-bin="D:/Program Files/MySQL/MySQL Server 5.5/data/mysql-bin"
    #错误日志文件
    log-error="D:/Program Files/MySQL/MySQL Server 5.5/data/mysql-error"
    #主从同步时 忽略的数据库
    binlog-ignore-db=mysql
    #可选 指定同步时 同步那些数据库
    binlog-do-db=test
    

    windows中的数据库授权 哪台计算机中的数据库 是自己的从数据库 slave

    GRANT REPLICATION slave,reload,super ON *.* TO 'root'@'192.168.2.%' IDENTIFIED BY 'root';  
    flush privileges;
    

    查看主计算机的状态:(每次在主从同步前 需要观察状态、主机的最新值)

    show master status ;
    mysql-bin.000001 |  107 | test | mysql
    

    从机(以下代码和操作 全部在从机Centos中操作)

    my.cnf

    server-id=2
    log-bin=mysql-bin
    relicate-do-db=test
    

    Linux中的数据库 授权哪台计算机 是 自己的主计算机 master

    CHANGE MASTER TO
    MASTER_HOST='192.168.2.2',
    MASTER_USER='root',
    MASTER_PASSWORD='1234',
    MASTER_PORT=3306,
    master_log_file='mysql-bin.000001',
    master_log_pos=107;
    

    如果报错:this operation cannot …. run STOP SLAVE first

    原因:就是以前处理过主从同步。

    解决:STOP SLAVE; 再次执行上条授权语句

    CHANGE MASTER TO
    MASTER_HOST='192.168.2.2',
    MASTER_USER='root',
    MASTER_PASSWORD='1234',
    MASTER_PORT=3306,
    master_log_file='mysql-bin.000001',
    master_log_pos=107;
    

    开启主从同步

    从机Linux:start slave

    检验 show slave status G

    PS可能出现的问题,如果没有请忽略

    主要观察: Slave_IO_RunningSlave_SQL_Running确保二者都是yes

    如果不都是yes,则看下方的 Last_IO_Error

    Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; # 错误所在
    these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; 
    please check the manual before using it). # 这是在我电脑上的的错误
    

    本次 通过 Last_IO_Error发现错误的原因是 主从使用了相同的server-id

    检查:在主从中分别查看serverid

    show variables like 'server_id' ;
    

    可以发现,在Linux中的my.cnf中设置了server-id=2,但实际执行时 确实server-id=1

    原因:可能是 linux版Mysql的一个bug,也可能是 windows和Linux版本不一致造成的兼容性问题。

    解决改bug:

    stop slave ;
    set global server_id =2 ;
    start slave ;
    show slave status G
    

    演示主从同步

    主 Windows -----> 从 Linux

    Windows

    Linux

    到此,就已经成功了,如果不放心,可以尝试再插入一条数据。

    当然我们可以配置多个从数据库,配置的方法是一致的!!

    拜拜!------------恢复内容开始------------

    主从同步

    PS: 知识来自颜群老师,为了加强知识,记录博客。bilibili搜索:颜群老师

    主从复制(集群在数据库的一种实现)

    搭建环境:基于5.5.58版本

    1、以Windows为主数据库(master)

    2、以Linux上的centos中的MySQL为从数据库(slave)

    安装windows版mysql

    1、如果之前计算机中安装过MySQL,如果要重新再安装 则需要:先卸载 再安装

    2、卸载

    • 通过电脑自带卸载工具卸载Mysql (电脑管家也可以)
    • 删除一个mysql缓存文件C:ProgramDataMySQL
    • 删除注册表regedit中所有mysql相关配置
    • 重启计算机(最好执行一次)

    安装MYSQL

    这里提供一个链接:
    链接:https://pan.baidu.com/s/1g_vxXOVuSVrh0nJwFCvnag 
    提取码:skc9 
    linux版本:或者可以加我联系方式QQ 发给你 2437732817
    

    安装时可以自行百度,基本上是傻瓜式安装。

    如果不会的话,这里也给一个别人的博客:https://blog.csdn.net/qq_40128682/article/details/82714869

    如果没问题的话,则说明安装成功了!!

    但是安装时,如果出现未响应:则重新打开D:MySQLMySQL Server 5.5inMySQLInstanceConfig.exe,在尝试把之前的配置一次。

    操作MySQL数据库的图形化客户端:sqlyog navicat DataGrip

    如果要远程连接数据库,则需要授权远程访问。

    授权远程访问 :(A->B,则在B计算机的MySQL中执行以下命令)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;  #授权
    
    FLUSH PRIVILEGES;  #刷新
    

    如果仍然报错:可能是防火墙没关闭 : 在B关闭防火墙 systemctl stop firewalld systemctl disable firewalld

    思考问题:如何能连接上别人的mysql?

    实现主从复制

    主从同步 同步的核心:二进制日志 binary log

    具体的步骤

    1、master将改变的数据记录在本地的二进制日志中(binary log )该过程称之为 二进制日志事件

    2、slave将master的binary log 拷贝 到自己的relay log(中继日志文件)中(通过IO线程

    3、中继日志文件通过 SQL线程 将 数据 读取到自己的数据库之中

    可以得出的结论:MySQL实现主从复制:是异步的,串行化的,有延迟的

    延迟:数据在传输的时候需要时间,并不是时时的的,是有延迟的。

    配置一般的比例
    master:slave = 1:n

    配置

    1、Windows(mysql:my.ini)

    2、Linux(mysql:my.cnf)

    防火墙

    关闭windows的防火墙:右键”网络“

    Linux:service iptables stop

    权限

    mysql设置成可以远程访问(windows/centos)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; 
    //大致意思是授予全部权限 root用户 任意IP 密码root
    
    windows在安装的时候已经勾上了 ,如果没有也可以执行一下
    
    FLUSH PRIVILEGES;       //刷新数据
    

    主机配置:(以下代码和操作,全部在主机Windows中操作):

    注意斜杠 /

    server-id=1
    #二进制日志文件
    log-bin="D:/Program Files/MySQL/MySQL Server 5.5/data/mysql-bin"
    #错误日志文件
    log-error="D:/Program Files/MySQL/MySQL Server 5.5/data/mysql-error"
    #主从同步时 忽略的数据库
    binlog-ignore-db=mysql
    #可选 指定同步时 同步那些数据库
    binlog-do-db=test
    

    windows中的数据库授权 哪台计算机中的数据库 是自己的从数据库 slave

    GRANT REPLICATION slave,reload,super ON *.* TO 'root'@'192.168.2.%' IDENTIFIED BY 'root';  
    flush privileges;
    

    查看主计算机的状态:(每次在主从同步前 需要观察状态、主机的最新值)

    show master status ;
    mysql-bin.000001 |  107 | test | mysql
    

    从机(以下代码和操作 全部在从机Centos中操作)

    my.cnf

    server-id=2
    log-bin=mysql-bin
    relicate-do-db=test
    

    Linux中的数据库 授权哪台计算机 是 自己的主计算机 master

    CHANGE MASTER TO
    MASTER_HOST='192.168.2.2',
    MASTER_USER='root',
    MASTER_PASSWORD='1234',
    MASTER_PORT=3306,
    master_log_file='mysql-bin.000001',
    master_log_pos=107;
    

    如果报错:this operation cannot …. run STOP SLAVE first

    原因:就是以前处理过主从同步。

    解决:STOP SLAVE; 再次执行上条授权语句

    CHANGE MASTER TO
    MASTER_HOST='192.168.2.2',
    MASTER_USER='root',
    MASTER_PASSWORD='1234',
    MASTER_PORT=3306,
    master_log_file='mysql-bin.000001',
    master_log_pos=107;
    

    开启主从同步

    从机Linux:start slave

    检验 show slave status G

    PS可能出现的问题,如果没有请忽略

    主要观察: Slave_IO_RunningSlave_SQL_Running确保二者都是yes

    如果不都是yes,则看下方的 Last_IO_Error

    Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; # 错误所在
    these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; 
    please check the manual before using it). # 这是在我电脑上的的错误
    

    本次 通过 Last_IO_Error发现错误的原因是 主从使用了相同的server-id

    检查:在主从中分别查看serverid

    show variables like 'server_id' ;
    

    可以发现,在Linux中的my.cnf中设置了server-id=2,但实际执行时 确实server-id=1

    原因:可能是 linux版Mysql的一个bug,也可能是 windows和Linux版本不一致造成的兼容性问题。

    解决改bug:

    stop slave ;
    set global server_id =2 ;
    start slave ;
    show slave status G
    

    演示主从同步

    主 Windows -----> 从 Linux

    Windows

    Linux

    到此,就已经成功了,如果不放心,可以尝试再插入一条数据。

    当然我们可以配置多个从数据库,配置的方法是一致的!!

    拜拜!
    ------------恢复内容结束------------

    做的不好,多多指教
  • 相关阅读:
    安装LAMP服务器(Apache,MariaDB的,PHP)在CentOS / RHEL / Linux
    查看centos的内核版本,位数,版本号等信息
    linux 出现中文乱码,该如何处理?
    docker
    面试
    linux命令
    springboot整合微软的ad域,采用ldap的api来整合,实现用户登录验证、
    idea实用插件
    将lits集合转化为树状结构
    windos上安装jenkins部署springboot的jar包(未运行,只是在打包并上传linux成功了)
  • 原文地址:https://www.cnblogs.com/xingStudy/p/14118248.html
Copyright © 2011-2022 走看看