设为首页 收藏本站
查看: 1174|回复: 0

[经验分享] Windows下MySQL的主从复制

[复制链接]

尚未签到

发表于 2019-2-19 10:38:05 | 显示全部楼层 |阅读模式
  首先需要的环境:我在本地安装了两个MySQL,分别是5.7和5.5的版本:安装结束后如下:
http://i2.运维网.com/images/blog/201812/15/c0696ee95fe0f5b9785918d5df1c40b0.png
  1、复制原理:
原理:
在MySQL中有一种叫做bin的二进制日志,这个日志文件里面记录了关于此数据库的所有修改的sql语句(包括insert,update,delete,grant等等)。而主从复制就是利用这个二进制bin日志,在主库上创建一个用户,从数据库通过此用户去读取bin日志,然后再在从数据库上再执行一次。
  2、主数据库配置文件修改:
我在改配置文件过程中碰到的一个问题就是:我的主数据库选择5.7版本,但是并没有my.ini这个文件,只有my-default.ini.如果你是安装在C盘,你还可能发现一个路径:C:\programData\mysql\my.ini,改这个就好了。
http://i2.运维网.com/images/blog/201812/15/31dd7a3f6fae00fb4cd84a4cb60ba84d.png
还有其他几个值可以配置:
binlog-do-db=su      #要同步的数据库名称,多个写多行,如果没配置,则所有都同步;
binlog_format=mixed      #日志混合
  3、主数据库启动过程:
cmd以管理员方式运行,然后输入命令:net start MySQL57(安装时自己取的名字),如下:
http://i2.运维网.com/images/blog/201812/15/f7372446a7065037d399fe976e18b1d1.png
4、连接主数据库:
启动成功后,连接数据库命令:mysql -u root -p,如下:
http://i2.运维网.com/images/blog/201812/15/0575e525c6d158725cfffa90db6ae9d7.png
这个命令如果环境变量没有配置的话,这个命令是没法用的。
  5、为从数据库创建用户:
先可以看一下二进制日志文件的状态,命令为:show global variables like '%log_bin%';(注意后面有分号),结果如下:
http://i2.运维网.com/images/blog/201812/15/583b8e04f0b0d09db793cba518e796a0.png
为从服务器创建用户,即授权给从数据库,命令为:grant replication slave on . to 'myslave'@'%' identified by '123456';   
%表示除了本地可以访问,还可以远程访问,localhost则只能本地访问。
replication slave表示只授予slave的权限,也可以加select,insert等等。
授权以后查看主数据库状态,如下:
http://i2.运维网.com/images/blog/201812/15/e4cefd3b50395dd427c4a83c518b7ee2.png
记录下 File及 Position 的值,在后面进行从服务器操作的时候需要用到。
  6、从数据库配置:
http://i2.运维网.com/images/blog/201812/15/63ecd4d13026ab784607cb92ec0f1984.png
也可以加其他的:
relay_log = mysql-relay-bin // 中继日志
log_slave_updates = 1  // slave将复制事件写进自己的二进制日志
  7、从数据库执行过程:
首先启动从数据库,然后执行同步SQL语句,如下:
http://i2.运维网.com/images/blog/201812/15/61eb59a60f022cc25f444dbc53d66314.png
然后启动Slave同步进程,主从同步检查,如下:
http://i2.运维网.com/images/blog/201812/15/171fd2b7e63eb5713ad07e9878e86959.png
当这两个值都为YES的时候,表示状态正常。
现在出现的状态为不正常的,提示的原因如下:
http://i2.运维网.com/images/blog/201812/15/f6265be2d926837251c43bf029e99981.png
说是server-id相同,但是我配置的分别为1和2。则解决办法可以试试以下:
a、MySQL的一个配置文件auto.cnf里面记录了mysql服务器的uuid,server_uuid:服务器身份ID。在第一次启动Mysql时,会自动生成一个server_uuid并写入到数据目录下auto.cnf文件里,改一下这个值试试看。
b、找一找是不是存在其他的my.ini文件,找到后删除;
c、通过命令来设置server-id=2:
mysql> set global server_id=2; #此处的数值和my.cnf里设置的一样就行
mysql> slave start;
  修改成功后进行测试:
http://i2.运维网.com/images/blog/201812/15/0c72a5e0b500b48527d267a9df7b20a0.png
然后从数据库的这张表会自动加入这条数据,这样就算完成了数据库的主从复制了。
  最后来介绍一下MySQL主从复制的过程:
a、主节点启用这个bin二进制日志(log-bin);
b、从节点开启一个线程(I/O Thread),连接主节点上的用户,读取这个日志文件中的事件;
c、主节点启动一个线程(dump Thread),检查自己二进制日志中的事件,跟对方请求的位置对比,如果不带请求位置参数,则主节点就会从第一个日志文件中的第一个事件一个一个发送给从节点;
d、从节点接收到主节点发送过来的数据把它放置到中继日志(Relay log)文件中。并记录该次请求到主节点的具哪个二进制日志文件的哪个位置;
e、从节点启动另外一个线程(sql Thread ),把replaylog中的事件读取出来,并在本地再执行一次。
解释:
I/O Thread:从Master请求二进制日志事件,并保存于中继日志中;
Sql Thread:从中继日志中读取日志事件,在本地完成重放;
Dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向从节点发送二进制事件;
注意:如果从节点需要作为其他节点的主节点时,需要开启二进制日志文件的(log-bin)。这种情况叫做级联复制。如果只是作为从节点,则不需要创建二进制文件。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674301-1-1.html 上篇帖子: 如何在Windows上从源代码构建OpenJFX 8 下篇帖子: Windows快捷键
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表