来自 操作系统 2019-12-26 03:20 的文章
当前位置: 网上澳门金莎娱乐 > 操作系统 > 正文

ubuntu 16.04配置MySQL主从同步的配置方法_Mysql_脚本之家

一,某游戏公司例行上线与更新流程示例

例行维护/更新流程

准备工作

1.1 更新前天

提前确认好要更新的是什么,更新会有人通知你,一般是运营人员
比如:我们明天做什么什么更新

1.主从数据库版本最好一致

1.2 第2天更新

一般固定点更新,会先收到更新邮件
运营人员会发公告给玩家,说我们什么什么游戏,几点进行维护
比如:10点更新:

(1)关闭游戏端口,禁止外部访问,对自己公司开放(更新完要测试)

通过防火墙脚本实现(参考公司已有并在线上正常使用的脚本)

(2)停止游戏程序

如果做了监控,停服前可以关闭监控,如果你知道是自己在停服,也可以不关
这个问题具体要问开发,我们公司就是停止游戏程序的时候会把数据写到数据库,所以等程序关闭后再备份。(如果不先停止游戏程序,那么会导致数据库的数据不一致)

(3)备份数据库

通过脚本实现数据备份并问下研发需要备份哪些库
备份完毕后,检查备份的数据大小,判断是否与前几天备份的数据有没有太大的差异(差距太大表明有问题,需要检查)

(4)通知相关人员进行更新操作(一般是开发,也可能是自己,根据公司情况而定)

如果是你自己做更新,先看看是什么更新(促销更新,版本更新,web更新等)
那就得根据是什么更新,就执行什么更新操作(开发会给更新流程),如果有老人带,做完后总结下(这样自己会更明白些)
更新内容,比如添加几个文件,数据库添加字段等,熟练后可以写成脚本

(5)启动游戏程序

当更新完毕后,就启动游戏程序,以便进行下面的测试

(6)通知相关人员进行测试(研发,测试人员,运营人员等)

游戏能不能正常打开,能不能正常登录,该更新的东西有没有更新好

(7)打开游戏端口,允许外部访问

如果测试没有问题,运营人员会说,可以开服了;就可以把游戏端口对外,就是玩家可以登陆游戏
和相关人员确认好什么时候可以停止游戏程序操作(停之前备份数据库还是之后)

2.主从数据库内数据保持一致

1.3 总结

  1. 接收到更新邮件
  2. 查看是什么更新
  3. 不同的更新执行不同的更新流程
  4. 和相关人员确认好什么时候可以进行更新操作
  5. 到了更新时间后进行更新流程
  6. 连上需要更新的服务器
  7. 执行防火墙脚本,关闭游戏端口,禁止外部访问,对自己公司开发
  8. 停止游戏程序
  9. 备份数据库
  10. 通知相关人员进行更新操作
  11. 更新完毕后,启动游戏程序
  12. 通知相关人员进行测试
  13. 测试没问题,执行防火墙脚本,开放游戏端口,让玩家登陆游戏

主数据库:121.199.27.227 /ubuntu 16.04 MySQL 5.7.21

1.4 注意事项

更新前操作:

(1)收到更新邮件,可以先确认邮件中更新文件是否能够正常下载

机器比较多,开发也很忙,有时会出现,开发并没有把包上传到固定的机器或者没有传好之类的。

(2)确认好更新维护时间

一般是固定时间,然后运营人员要对玩家发布公告

(3)可以先连上需要操作的机器

(4)如果做了监控,停服前可以关闭监控,如果你知道是自己在停服,也可以不关

(5)检查游戏开放的端口

进行更新时:

(1)第一步关闭游戏端口并确认端口确实关闭了

(2)停止游戏程序并确认确实关闭了(可以通过查看进程的方式,如果是java写的程序,直接ps -ef | grep java即可)

(3)执行备份数据库的脚本并验证备份文件的大小是否正常

(4)备份好了后,通知相关人员进行更新操作并确认更新正确,比对md5,文件时间等(如果是自己更新,就提取准备好更新的步骤;熟练后,可以写成脚本)

(5)所有服更新完毕后,启动游戏程序并确认启动成功

(6)通知相关人员进行测试,比如,是否能登陆游戏,登陆游戏后需要改变的地方有没有改变(一般运营人员操作)

(7)测试没有问题,执行防火墙脚本,开放游戏端口,让玩家登陆游戏

从数据库:182.254.149.39 /ubuntu 16.04 MySQL 5.7.21

1.5 游戏业务类专业术语解释

  • [x] 合服:其实就是合并玩家数据(例如:1服和2服合并,其实就是合并玩家的数据,将1服数据导入2服数据库,然后1服就能用来开3服了)
  • [x] 混服:就是同一个服务器,运营两款不相同的游戏
  • [x] 同服:在一个配置比较高的服务器上,同时部署两款相同的游戏,比如火影忍者,可以部署1服2服等(就是将程序拷贝一份,修改端口等在启动====>类似多实例)
  • [x] 跨服:多个服的玩家在一起玩,比如1,2,3,4服玩家都在一起玩。

防火墙配置

配置主服务器只允许特定 IP 访问数据库的端口,避免不必要的攻击。

主库防火墙配置

# iptables -A INPUT -p tcp -s slave_ip --dport 3306 -j ACCEPT#删除可能已经存在的配置,避免出现多条重复记录$ sudo iptables -D INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT $ sudo iptables -D INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT $ sudo iptables -D INPUT -p tcp --dport 3306 -j DROP $ sudo iptables -D INPUT -p udp --dport 3306 -j DROP $ sudo iptables -D INPUT -p sctp --dport 3306 -j DROP#增加配置,只允许特定地址访问数据库端口$ sudo iptables -A INPUT -p tcp -s 182.254.149.39 --dport 3306 -j ACCEPT$ sudo iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT$ sudo iptables -A INPUT -p tcp --dport 3306 -j DROP$ sudo iptables -A INPUT -p udp --dport 3306 -j DROP$ sudo iptables -A INPUT -p sctp --dport 3306 -j DROP$ sudo iptables -L -n#保存配置$ sudo apt-get install iptables-persistent$ sudo netfilter-persistent save#配置被保存到/etc/iptables/rules.v4 /etc/iptables/rules.v6这两个文件下面,#最好确认一下实际保存的内容,尤其是安装了denyhosts等其他安全软件的情况下,#可能会记录了多余的规则,需要手工删除从库防火墙配置# iptables -A OUTPUT -p tcp -d master_ip --dport 3306 -j ACCEPT#删除可能已经存在的配置,避免出现多条重复记录$ sudo iptables -D OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT#增加配置$ sudo iptables -A OUTPUT -p tcp -d 121.199.27.227 --dport 3306 -j ACCEPT$ sudo iptables -L -n#保存配置$ sudo apt-get install iptables-persistent$ sudo netfilter-persistent save#配置被保存到/etc/iptables/rules.v4 /etc/iptables/rules.v6这两个文件下面,#最好确认一下实际保存的内容,尤其是安装了denyhosts等其他安全软件的情况下,#可能会记录了多余的规则,需要手工删除

主数据库master配置

1.修改mysql配置

$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

在[mysqld]部分进行如下修改:

[mysqld]log-bin = /var/log/mysql/mysql-bin.log #开启二进制日志,默认是注释掉的,我们去掉注释server-id = 1 #设置server-idbind-address = 0.0.0.0 #默认是127.0.0.1,此处我们设置为任意地址,放开远程访问,这么操作之前一定要确保防火墙配置正确,否则会产生安全风险

2.重启mysql,创建用于同步的用户账号

创建用户并授权:用户:repl 密码:slavepass

$ sudo service mysql restart$ mysql -u root -p -e "CREATE USER 'repl'@'182.254.149.39' IDENTIFIED BY 'slavepass';" #创建用户$ mysql -u root -p -e "GRANT REPLICATION SLAVE ON *.* TO 'repl'@'182.254.149.39';" #分配权限$ mysql -u root -p -e "flush privileges;" #刷新权限

3.查看master状态,记录二进制文件名和位置:

$ mysql -u root -p -e "SHOW MASTER STATUS;"Enter password: +------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 | 333802 | | | |+------------------+----------+--------------+------------------+-------------------+

4.主库备份,为从库的第一次数据同步准备数据

使用如下脚本产生数据库备份文件

本文由网上澳门金莎娱乐发布于操作系统,转载请注明出处:ubuntu 16.04配置MySQL主从同步的配置方法_Mysql_脚本之家

关键词: