• mysql主从数据不一致的解决方法(转)


    当使用MySQL主从服务器时。一个必须考虑的问题就是要有方法检测数据是否已经出现了不一致,幸好mk-table-checksum提供了这样的功能:

    先安装依赖的模块:DBI,DBD::mysql(相关链接):

    perl -MCPAN -e 'install DBI'
    perl -MCPAN -e
    'install DBD::mysql'

    如果自动安装不好使,就手动下载安装,地址:http://search.cpan.org/

    再安装Maatkit软件包,基本步骤很简单:

    tar
    zxvf maatkit-3519.tar.gz
    cd
    maatkit-3519

    剩下的就是Perl软件安装的固定打法:

    perl Makefile.PL
    make
    make
    install

    下面进入正题,看看如何核对主从服务器的数据一致性,操作都在主服务器上完成,所以是localhost:

    mk-table-checksum
    --createreplicate --replicate=test.checksum
    localhost

    需 要说明的是test.checksum表示的是test数据库的checksum数据表(也可以使用别的数据库或数据表,只要保证它在主从服务器间没被忽 略复制即可),有了createreplicate参数,系统会自动创建这个表,里面会保存一些核对数据,手册里还有很多其他的参数可以使用,恕不详述。

    命令执行速度的快慢要视数据量的大小而定,执行完之后,就可以用下面的命令来查询是否存在不一致:

    mk-table-checksum
    --replicate=test.checksum --replcheck 1
    localhost

    其实就是查询test.checksum表里this_crc != master_crc的行,所以你也可以不用上面的命令而是手动查找。

    需要说明的是replcheck参数指明了核对的级联深度,比如1表示此服务器和它的从服务器。

    至于如何同步不一致的数据,可以使用Maatkit提供的另一个软件:mk-table-sync

    mk-table-sync --execute --replicate
    test.checksum
    localhost

    注意:如果你用的MySQL不支持触发器语法的话,记得在上面的命令里加上--ignore-triggers参数。

    提示:虽然我们的操作都是在主服务器上完成的,但是mk能通过两个途径来自动找到从服务器,一个是SHOW
    PROCESSLIST,另一个是SHOW SLAVE HOSTS(不过这个方法要求在从服务器上设定report-host等参数)

    补充链接:OnlineDataDrift是Google针对mk-table-checksum的一个优化版本,可以看看。

    BTW:ICC版二进制MySQL环境下DBD::mysql安装问题。

    所谓ICC指的是Intel
    C/C++ compiled,据说MySQL的ICC编译版本比一般的GCC编译版本效率要好一些。

    不过如果采用ICC版本的话,在安装DBD::mysql时一不留神可能会遇到一些小问题,比如:

    undefined
    symbol:
    _intel_fast_memcpy

    究其原因,是因为MySQL是用ICC编译的,而缺省安装DBD::mysql时,使用的是GCC,所以出现未定义符号也是在所难免的事儿,解决方法是下载ICC库,解压缩安装到/usr/local/lib/icc目录。

    tar zxvf
    DBD-mysql-4.011.tar.gz
    cd DBD-mysql-4.011

    然后使用ICC参数手动安装DBD::mysql

    perl Makefile.PL
    \
    --cflags='-I/usr/local/mysql/include' \
    --libs='-L/usr/local/mysql/lib
    -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/local/lib/icc
    -lirc'

    make
    make install

    和正常的编译参数相比,其实就是多了“-L/usr/local/icc
    -lirc”而已,这样就OK了。

  • 相关阅读:
    django如何给上传的图片重命名(给上传文件重命名)
    Nginx 常见问题解决
    nginx 出现413 Request Entity Too Large问题的解决方法
    python判断一个对象是否可迭代
    InnerClass annotations are missing corresponding EnclosingMember annotations. Such InnerClas...
    Android Studio中新建和引用assets文件
    android 登录效果
    Android (争取做到)最全的底部导航栏实现方法
    抽屉效果的导航菜单
    Android开发之自定义局部导航菜单
  • 原文地址:https://www.cnblogs.com/orochihuang/p/2518395.html
Copyright © 2020-2023  润新知