主从同步
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_Running和Slave_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_Running和Slave_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
到此,就已经成功了,如果不放心,可以尝试再插入一条数据。
当然我们可以配置多个从数据库,配置的方法是一致的!!
拜拜!
------------恢复内容结束------------