• www.tb0002.com,www.tb0002.com第一官网》》》

  • 发布时间:2016-01-13 07:20 | 作者:yc | 来源:互联网 | 浏览:1200 次
  • www.tb0002.com,www.tb0002.com第一官网》》》

    3 要是还弗成,反省同伴日志,看看是卡在那个binlog上了,比方 : 卡在

    则:

    SLAVE STOP;

    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.', MASTER_LOG_POS=0;

    SLAVE START;

    4 要是同伴提示: [mysql]Table tblName is marked as crashed and should be repaired

    Mysql提示tblName表格已毁坏,需求修正,处置惩罚法子:

    进入到对应的数据库目录:

    cd /var/lib/mysql/dbname

    运用myisamchk修正:

    shell> myisamchk -r tblName

    要是提示failed

    shell> myisamchk -f tblName

    强行修正

    康复光阴对照长,耐性期待修正完结

    然后重启mysql就行

    二、mysql主从效劳器报错描画:

    报警mysqla is down...机房职员反映是HARDWARE ERROR(后边省掉落),让机房职员记下同伴 信息,让他们赞助重启,成果又正常功课了,(导出数据),过 了一会又出现报警,mysql_AB error

    MySQL数据库ab主从仿制犯错及处置惩罚进程

    一、mysql主从效劳器报错描画:

    Slave_IO_Running=NO,Slave_SQL_Running=YES,Last_Errno=0 mysql slave stop ; mysql slave start; mysql show slave status ; 要是Slave_IO_Running=YES ...

    处置惩罚进程 :

    1 要是:Slave_IO_Running=NO,Slave_SQL_Running=YES,Last_Errno=0

    mysql> slave stop ;

    mysql> slave start;

    mysql> show slave status ;

    要是Slave_IO_Running=YES,Slave_SQL_Running=YES,Last_Errno=0

    那么,数据库的replication现已成功发动

    2 要是提示有duplicated数据,直接delete那条数据今后的,然后

    mysql> slave stop ;

    mysql> slave start;

    mysql> show slave status ;

    要是Slave_IO_Running=YES,Slave_SQL_Running=YES,Last_Errno=0

    那么,数据库的replication现已成功发动

    处置惩罚进程 :1、反省从库show slave status \G;显现

    Slave_IO_Running:Yes

    Slave_SQL_Running:No

    还出现 了1062同伴,还提示:

    Last_SQL_Error: Error 'Duplicate entry '1001--0' for key 'PRIMARY''on query. Default database: 'bug'. Query: 'insert into misdata (uid,mid,pid,state,mtime) values (,1001,0,-1,)'

    www.tb0002.com,www.tb0002.com第一官网》》》很显然,由于主库重启致使 从库数据不合步并且主键矛盾反省error 日志发明error日志文件变得好大年夜,比曾经大年夜了快到好几倍,

    tail -f mysql_error.log 最起头反省到的是这条信息

    发明这条信息

    [ERROR] Slave SQL: Error 'Duplicate entry '1007--0' for key 'PRIMARY'' on query. Default database: 'ufo'. Query: 'insert into misdata (uid,mid,pid,sta

    te,mtime) values (,1007,0,-1,)', Error_code: 1062

    17:39:05 [Warning] Slave: Duplicate entry '1007--0' for key 'PRIMARY' Error_code: 1062

    17:39:05 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'ufolog.

    8' position

    报错和上面的意思差不多,最早想到的等于重要手动同步一下,从库上重要 stop slave;中止同步

    进入主库锁表,

    FLUSH TABLES WITH READ LOCK;

    mysql> show master status;

    +-------------------+-----------+--------------+------------------+

    | File| Position| Binlog_Do_DB | Binlog_Ignore_DB |

    +-------------------+-----------+--------------+------------------+

    | ufo. | |||

    +-------------------+-----------+--------------+------------------+

    1 row in set (0.00 sec)

    进入从库

    mysql>change master to master_host='192.168.1.141', master_user='slave',

    master_password='xxx',

    master_port=3306,

    master_log_file='ufo.',

    master_log_pos=;

    完结上面这些后

    start slave;

    回到主库

    unlock tables; 解锁

    回到从库 反省

    show slave status \G;

    发明正常了,长处了一口气可是还没过一分钟,发明又起头报错了,仍是最起头那个同伴,再次反省一下日志,让我认为意外的是tail -f mysql_error.log 出现许多的

    .......

    16:54:21 [Warning] Statement may not be safe to log in statement format. Statement: delete from `system_message_1` where `to_uid` = ORDER BY `id` ASC LIMIT 1

    .........

    日志里边有许多的这种正告,意思应该是statement 格局不安然,用vim 翻开他看了一下,发明许多这类正告,我说为何同伴日志如何变这么大年夜了呢!!

    statement format 应该是 binlog的一种格局,进入从库反省一下 www.it165.net

    show global variables like 'binlog_format';

    果真当前的格局为statemen789fff.comt

    我需求把格局改为 mixed格局

    修正从库的 my.cfg

    在[mysqld]下面参加下面这行

    binlog_format=mixed

    然后重启mysql效劳,发明同伴日志里的 正告 都中止了

    三、报错描画:

    MySQL5.6之前的备库仿制有两个功课线程:IO线程和SQL线程SQL线程反常致使仿制被中止

    许多DBA会遭受备库仿制线程中止的报警,详细说来多见的同伴有如下几类:

    1032同伴 – HA_ERR_KEY_NOT_FOUND

    1062同伴 – HA_ERR_FOUND_DUPP_KEY (HA_ERR_FOUND_DUPP_KEY 或 HA_ERR_FOUND_DUPP_UNIQUE)

    疑问布景:

    主备数据一不致,每每是由于MySQL的Bug致使,其间MySQL仿制有关的Bug从每次Release Notes都能够看到有关的身影,就咱们迩来两周线上碰到的枚举如下:

    Table map set to 0 after altering MyISAM table (对InnoDB表也会触发)

    Failing assertion: trx->active_trans when renaming a table with active trx

    Querying I_S.GLOBAL_TEMPORARY_TABLES or TEMPORARY_TABLES crashes threads working with temp tables(非DEBUG版别也存在)

    当然,最大年夜的一个不知道的要素是主库宕机,以致为确保效劳可用而做的主备切换,有若干数据不合营,咱们心里没有谱只要寄托后续的守时扫描来做过后反省只管咱们现在做的MHA从必定程度上回减少数据不合营的数量,但也无法做到数据严峻合营这个疑问是MySQL社区的一大年夜难题,在此不展开评论争论

    其余,有发生发火反常时,DBA的不严峻操作也可能会加重这种数据不合营的影响,例如,碰到同伴时,超出多少同伴,直到仿制能正常功课

    root@(none) 09:43:26>set global sql_slave_skip_counter=1;

    处置惩罚思路:

    关于咱们线上最多见的两种类型进行智能化地处置惩罚,即 HA_ERR_KEY_NOT_FOUND 或 HA_ERR_FOUND_DUPP_KEY的同伴,运用ROW要领仿制的特色,在实行工作碰到同伴时,进行如下转化:

    HA_ERR_KEY_NOT_FOUND:

    关于update工作 UPDATE_ROWS_EVENT 直接刺进前镜像再做更新

    关于delete工作 DELETE_ROWS_EVENT 直接刺进前镜像再做删去

    HA_ERR_FOUND_DUPP_KEY:

    关于update工作 UPDATE_ROWS_EVENT先删去后镜像再更新

    关于insert工作 WRITE_ROWS_EVENT 直接以掩饰笼罩要领刺进(即先删再插或转化成更新)

    新增变量及状况

    对slave_exec_mode添加 SMART 要领(STRICT | IDEMPOTENT | SMART)

    root@(none) 01:39:34>set global slave_exec_mode=SMART;

    Query OK, 0 rows affected (0.00 sec)

    root@(none) 01:39:39>select @@slave_exec_mode;

    +——————-+

    | @@slave_exec_mode |

    +——————-+

    | SMART |

    +——————-+

    1 row in set (0.00 sec)

    添加对smart处置惩罚成果的谋略:

    root@(none) 01:46:51>show status like ‘smart%’;

    +———————+——-+

    | Variable_name | Value |

    +———————+——-+

    | Smart_handle_dup_pk | 1 |

    | Smart_handle_failed | 0 |

    | Smart_handle_no_pk | 1 |

    +———————+——-+

    3 rows in set (0.00 sec)

    运转状况:

    从线上运转状况下,此patch处置惩罚了绝大年夜部分仿制中止反常,大年夜大年夜减少DBA半夜三更被正告惊醒手动修正反常仿制的频率整体而言,是一个十分成功的补丁

    但仍旧存一此没有完善的场景,例如独一键束缚或外键束缚状况下,更新掉利仍是无法处置惩罚在线上某个利用上,SMART仍是不能处置惩罚unique key更新掉利疑问

    四、slave日志中的同伴代码1:

    [ERROR] Error reading packet from server: Client requested master to start replication from impossible position; the last event was read from 'mysql-bin.' at , the last byte read was read from 'mysql-bin.' at 4. ( server_errno=1236)

    23:19:17 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position; the last event was read from 'mysql-bin.' at ', Error_code: 1236

    处置惩罚法子:

    先反省主效劳器中对应日志文件是不是有此行,运用的指令是

    mysqlbinlog/YOURPATH/'mysql-bin. >>/test

    查找有没有对应的行 或许和这个数字很靠拢的行 然后运用chang master to 指令超出这行,指令格局如下

    stop slave;

    CHANGE MASTER TO MASTER_HOST='192.168.192.45',MASTER_USER='XXXX',MASTER_PASSWORD='XXXX',MASTER_LOG_FILE='mysql-bin.',MASTER_LOG_POS=;

    start slave;

    要是你找不到或许和这个数字很靠拢的行,你能够运用如下指令反省'mysql-bin. 的行数

    ls -la mysql-bin.

    要是谋略的行数远远少于,你能够超出这个日志,从下一个日志起头仿制,指令如下

    stop slave;

    CHANGE MASTER TO MASTER_HOST='192.168.192.45',MASTER_USER='backup',MASTER_PASSWORD='weiphone',MASTER_LOG_FILE='mysql-bin.',MASTER_LOG_POS=4;

    start slave;

    五、同伴类型代码2:

    mysql slave Error_code:

    处置惩罚进程 :

    要这天志中出现了这么代码,可能是同伴的select,或update操作,master是超出这些博彩首存一元送体验金操作,可是被纪录到了二进制日志中,slave会根据二进制中的句子做相同的动作,就会报错,知道道理了要做的操作就很大略了

    stop slave;

    set gloablesql_slave_skip_counter=n;//n为你想超出同伴句子的个数

    start slave;

    要是你不想再碰到这种同伴,能够写到slave设置设置设备摆设摆设文件中格局如下:

    slave_skip_errors = 1062

    slave_skip_errors = all//超出统统类型的同伴码

    六、同伴提示:

    mysql> start slave;

    ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log

    [root@slave ~]# tail /var/log/mysqld.log

    11:53:52 [ERROR] Failed to open the relay log '/var/run/mysqld/mysqld-relay-bin.' (relay_log_pos 235)

    11:53:52 [ERROR] Could not find target log during relay log initialization

    ...

    [root@slave mysql]# ls /var/run/mysqld/

    mysqld-relay-bin.mysqld-relay-bin.mysqld-relay-bin.mysqld-relay-bin.index

    mysqld-relay-bin.mysqld-relay-bin.mysqld-relay-bin.

    [root@slave mysql]# cat master.info

    14

    mysql-bin.

    1235

    192.168.3.21

    slave

    3307

    60

    0

    [root@slave mysql]# cat relay-log.info

    /var/run/mysqld/mysqld-relay-bin.

    235

    mysql-bin.

    1235

    3

    50703

    处置惩罚进程:

    [root@slave ~]# service mysqld stop

    [root@slave mysql]# rm -fr master.info

    [root@slave mysql]# rm -fr relay-log.info

    [root@slave ~]# grep skip-slave-start /etc/my.cnf

    skip-slave-start

    [root@slave ~]# service mysqld start

    [root@master ~]# mysql -uroot -p

    mysql> show master status;

    +------------------+----------+--------------+------------------+

    | File| Position | Binlog_Do_DB | Binlog_Ignore_DB |

    +------------------+----------+--------------+------------------+

    | mysql-bin. |98 |||

    +------------------+----------+--------------+------------------+

    [root@slave ~]# mysql -uroot -p

    mysql> change master to

    master_log_file='mysql-bin.',

    master_log_pos=98,

    master_host='192.168.3.21',

    master_port=3307,

    master_user='slave',

    master_password='';

    Query OK, 0 rows affected (0.02 sec)

    mysql> start slave;

    Query OK, 0 rows affected (0.00 sec)

    mysql> show slave status\G

    奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫 1. row 奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫

    Slave_IO_State: Waiting for master to send event

    Master_Host: 192.168.3.21

    Master_User: slave

    Master_Port: 3307

    Connect_Retry: 60

    Master_Log_File: mysql-bin.

    Read_Master_Log_Pos: 98

    Relay_Log_File: mysqld-relay-bin.

    Relay_Log_Pos: 235

    Relay_Master_Log_File: mysql-bin.

    Slave_IO_Running: Yes

    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: 98

    Relay_Log_Space: 235

    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: 0

    1 row in set (0.00 sec)

    致使 mysql 主从仿制犯错的身分有许多修正的法子大概多,期望碰到和此次相同疑问的兄弟看到这篇文章后会获得 一些启示和处置惩罚疑问的法子

  • 相关内容

友情链接: