DevOp经验谈:直接操作线上数据库…

    首先声明尽量避免这么干,直接动手修改线上数据库是很没有节操 的运维方式。当你这么做的时候,得认识到这不是一个好主意,是否有可能避免?比如很多这种问题是由于同步错误导致的,举个例子:写入mysql的时候,由于ooxx的问题,写入redis缓存失败,最后导致redis里的数据和mysql不一致。这种时候,应该要写一个校正的工具,根据mysql的数据重新生成redis缓存数据。
    但有时候,直接修改线上的数据库还是最为短平快的解决问题的方式。如果真的准备要动手了,我总结几点注意事项:
    1、尽量使用图形界面来修改。因为可以减少很多误操作。有人可能会问,怎么可能从开发机器上直接连上服务器的数据库? 使用ssh tunnel! 推荐使用xshell客户端,ssh连接远程服务器后,可以在forwarding rule窗口点击右键,增加规则,如图所示:
     DevOp经验谈:直接操作线上数据库的注意事项
    比如我想连上服务器的Mysql(默认是3306端口),通过本机13306端口(任意端口,只要不要和已绑定端口冲突),设置如下:
     DevOp经验谈:直接操作线上数据库的注意事项
    点击确定后,就可以建立ssh tunnel,注意观察下Status必须是Open,不能是Failed,如果是Failed一般是端口冲突了。这样设置完后,访问本机的13306端口就类似于从服务器上访问3306端口了。
     采用图形界面,可以降低误操作的可能,不过有时候需要批量操作数据,或者很有信心,感觉用图形界面很麻烦,还是会直接敲SQL命令,请继续往下看。
    2、如果要批量地修改数据,首先进行数据备份。我一般使用Navicat Premium的导出功能来进行数据备份。这个操作很简单,就不截图啦。如果使用其他Mysql客户端软件,也应该有类似的功能。
    3、写Update和Delete的SQL,一定要先写where语句,写完where语句用select count(*)判断记录数是否和预期一致。最近刚有同事犯了惨痛错误:她要修改某一条记录,写了update table set column='', 在准备敲where的时候手抖敲了回车,于是把所有记录都修改了。所以一定要先写where语句!注意:写完where语句后先别急着update/delete,首先执行select count(*),判断影响的记录数是否和预期一致。以前发生过where语句错误导致本来只是想删除一行,结果把整张表记录都删除了的惨剧。
    




你可能感兴趣的:(编程)