迁移数据库,sqlserver避免sql脚本中出现除零错误

刚处理完“挖矿”事件,在做最后一个MySQL NBU备份的时候,发现从库有问题,好奇的是怎么主从状态异常没有告警呢?先不管这么多了,处理了这个问题再完善告警内容。

由于当初安装sqlserver 的时候选择默认安装的路径,导致现在c盘爆满,安装不了其它软件。因此想到了迁移数据库,网上搜索了一些简介,但是缺少一些步骤,导致数据库附加的时候失败。现总结如下:

摘自:

一、错误信息

1、将当前数据库和文件的链接 “分离”。

摘要:
下文介绍sql server中,sql脚本避免出现除零错误的方法分享

从库show slave status G看到的错误信息如下:

图片 1


Slave_IO_Running: No
Slave_SQL_Running: Yes
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.000081' at 480141113, the last event read from './mysql-bin.000081' at 4, the last byte read from './mysql-bin.000081' at 4.'

2、将C:Program Files (x86)Microsoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATA下需要迁移的数据库移到目标文件。

在各种业务系统开发中,通常会遇到除零的错误,下文分享了两种处理方法:
方法1: case when end 

二、错误原因

3、打开服务窗口  快捷键win+r输入services.msc打开服务窗口重启SQL server服务

declare @a int ---分子
declare @b int ---分母
select  case  when @b=0 then NULL else @a/@b end  as [a除以b]

这里看到从库的io_thread已经终止,错误编号是1236,具体是由于读取主库的binlog日志位置(the first event 'mysql-bin.000081' at 480141113, the last event read from './mysql-bin.000081' at 4)不对导致主从失败建立失败。

图片 2


三、解决方案

3、附加数据库  打开数据库  在右键databases  选择附加--attach。在附加框中点击“Add”--添加

方法2:nullif
nullif(表达式A,表达式B)
—-如果表达式A不等于表达式B,则返回表达式A
—-反之返回NULL 

1.检查从库状态以及读取、执行的binlog信息

图片 3

 

mysql> show slave status G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: xx.xx.xx.xx
                  Master_User: username
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000081
          Read_Master_Log_Pos: 480141113
               Relay_Log_File: mysql9017-relay-bin.000163
                Relay_Log_Pos: 480141259
        Relay_Master_Log_File: mysql-bin.000081
             Slave_IO_Running: No
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 480141113
              Relay_Log_Space: 480141462
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the first event 'mysql-bin.000081' at 480141113, the last event read from './mysql-bin.000081' at 4, the last byte read from './mysql-bin.000081' at 4.'
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 17
1 row in set (0.00 sec)

图片 4

declare @a int ---分子
declare @b int ---分母
select @a/nullif(@b,0) as [a除以b]

2.查看主库的binlog内容

4、选择要附加的数据库。点击确定

 

[backup]# mysqlbinlog  mysql-bin.000081 >mysql-bin.log

图片 5

图片 6

以上操作完成后点击OK,但是报错了。。。。。

看到主库binlog日志mysql-bin.000081最大的pos为480140557,但从库要读取的是'mysql-bin.000081' at 480141113,显然从库要读的pos值比主库本身存在的pos值大,导致读取不到,进而失败。

图片 7

可通过下面语句查看binlog的pos信息和日志内容
mysql> show binlog events in  'mysql-bin.000081' from 480140557 limit 10;       
Empty set (0.04 sec)
3.更改从库的同步位置,完成数据重新同步

这是因为目标文件夹的访问权限限制了     注意错误码5120   我们需要为当前系统用户访问目标文件夹添加完全控制权限

本文由澳门新葡亰平台官网发布于数据库,转载请注明出处:迁移数据库,sqlserver避免sql脚本中出现除零错误

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。