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

[经验分享] mysql主主双机互备(二)

[复制链接]

尚未签到

发表于 2018-10-10 11:52:38 | 显示全部楼层 |阅读模式
  了解了原理之后, 我们来实战。 这里有两个重点, 要想同步数据库状态, 需要相同的初态,然后配置同步才有意义。 当然你可以不要初态,这是你的自由。 我们这里从头开始配置一遍
DSC0000.png

  我们先以A服务器为起点,  配置它的数据库同步到B。  这就是主-从复制了。 之后再反过来做一次,就可以互相备份了。
  1, 第一步,
  在A上面创建专门用于备份的 用户:

  mysql>grant replication slave on *.* to 'repl_user'@'192.***.***.***'>  上面把ip地址换成B机器的ip地址。 只允许B登录。安全。
  用户名为: repl_user
  密码为: hj34$********nkb
  这个等会在B上面要用。
  2. 开启主服务器的 binarylog。
  很多服务器是默认开启的,我们这里检查一下:
  打开 /etc/my.cnf
DSC0001.png

  我来解释一下红框中的配置:
  前面三行, 你可能已经有了。
  binlog-do-db 用来表示,只把哪些数据库的改动记录到binary日志中。 可以写上关注hello数据库。 但是我把它注释掉了。 只是展示一下。 可以写多行,表示关注多个数据库。
  binlog-ignore-db 表示,需要忽略哪些数据库。我这里忽略了其他的4个数据库。
  后面两个用于在 双主(多主循环)互相备份。  因为每台数据库服务器都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突。   解决这个问题的办法就是让每个数据库的自增主键不连续。  上图说是, 我假设需要将来可能需要10台服务器做备份,所以
  auto-increment-increment 设为10. 而 auto-increment-offset=1 表示这台服务器的序号。从1开始, 不超过auto-increment-increment。
  这样做之后, 我在这台服务器上插入的第一个id就是 1, 第二行的id就是 11了, 而不是2.
  (同理,在第二台服务器上插入的第一个id就是2, 第二行就是12, 这个后面再介绍) 这样就不会出现主键冲突了。 后面我们会演示这个id的效果。
  3.  获取主服务器状态, 和同步初态。
  假设我现在有这些数据库在A上面。
  如果你是全新安装的, 那么不需要同步初态,直接跳过这一步,到后面直接查看主服务器状态。
  这里我们假设有一个 hello 数据库作为初态。
DSC0002.png

  先锁定 hello数据库:
  mysql>FLUSH TABLES WITH READ LOCK;
  然后导出数据:
  我这里只需要导出hello数据库, 如果你有多个数据库作为初态的话, 需要导出所有这些数据库:
DSC0003.png

  然后查看A服务器的binary日志位置:
  记住这个文件名和 位置, 等会在从服务器上会用到。
DSC0004.png     主服务器已经做完了,可以解除锁定了:

DSC0005.png

  4.设置从服务器 B 需要复制的数据库
  打开从服务器 B 的 /etc/my.cnf 文件:
DSC0006.png DSC0007.png

  解释一下上面的内容。
  server-id 必须保证每个服务器不一样。 这可能和循环同步有关。 防止进入死循环。
  replicate-do-db 可以指定需要复制的数据库, 我这里注掉了。 演示一下。
  replicate-ignore-db 复制时需要排除的数据库, 我使用了,这个。 除开系统的几个数据库之外,所有的数据库都复制。

  >  log-slave-updates 意思是,中继日志执行之后,这些变化是否需要计入自己的binarylog。 当你的B服务器需要作为另外一个服务器的主服务器的时候需要打开。  就是双主互相备份,或者多主循环备份。 我们这里需要, 所以打开。
  保存, 重启mysql。
  5. 导入初态, 开始同步。
  把刚才从A服务器上导出的 hello.sql 导入到 B的hello数据库中, 如果B现在没有hello数据库,请先创建一个, 然后再导入:
  创建数据库:
  mysql> create database hello default charset utf8;
  把hello.sql 上传到B上, 然后导入:
DSC0008.png     如果你刚才导出了多个数据库, 需要把他们都一一上传导入。

  开启同步, 在B服务器上执行:
  mysql> CHANGE MASTER TO
  MASTER_HOST='192.***.***.***',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='hj3****',
  MASTER_LOG_FILE='mysql-bin.000004',
  MASTER_LOG_POS=7145;
  mysql>start slave;
  重启mysql,  然后查看slave线程开启了没:
DSC0009.png     注意图中的红框, 两个都是Yes, 说明开启成功。

  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  如果其中一个是No, 那就说明不成功。需要查看mysql的错误日志。 我在第一次做的时候就遇到这个问题。有时候密码填错了, 有时候防火墙的3306没有打开。ip地址不对,等等。 都会导致失败。
  我们看错误日志: mysql的错误日志一般在:
DSC00010.png     文件名应该是你的机器名, 我这里叫做host1.err 你换成你自己的。

  到这里主-从复制已经打开了。 我们先来实验一下。
  我们在A的数据库里面去 添加数据:
DSC00011.png

  我在A的 hello数据库的test表中 连续插入了3条数据,  注意看他们的自增长id, 分别是1,11,21.  知道这是为什么吗。 前面已经说过了,不懂再回去看。
  我们去看一下B数据库有没有这三条数据,发现已经在这了.
  此时不要在B中修改数据。 我们接着配置从B到A的复制。  如果你只需要主从复制的话, 到这里就结束了。 所有A中的修改都能自动同步到B, 但是对B的修改却不能同步到A。 因为是单向的。 如果需要双向同步的话,需要再做一次从B到A的复制。
  B---->A
  基本跟上面一样,不需要导出B的初态,因为它刚刚才从A导过来。  直接记住它的master日志状态.
  配置完查看slave状态是否正常:
  出现了两个No。
  Slave_IO_Running: No
  Slave_SQL_Running: No
  说明slave没有成功, 即,从B到A的同步没有成功。 我们去查看mysql错误日志
DSC00012.png

  看图中的error信息。说找不到中继日志文件。
  这是因为我们在配置A的中继文件时改了中继文件名,但是mysql没有同步。解决办法很简单。
DSC00013.png

  先停掉mysql服务。  找到这三个文件,把他们删掉。 一定要先停掉mysql服务。不然还是不成功。     你需要重启一下机器了。 或者手动kill mysqld。
  如果还不行,尝试
  mysql>start slave;


运维网声明 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-619931-1-1.html 上篇帖子: linux下apache服务器,mysql日常命令 下篇帖子: mysql主主双机互备(三)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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