主从同步

主从同步

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

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

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

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

做的不好,多多指教
原文地址:https://www.cnblogs.com/xingStudy/p/14118248.html