启荣's profile四喜·散渡幽灵PhotosBlogListsMore Tools Help

Blog


    6/16/2006

    使用mysqldump导入数据需小心.

         mysqldump导出数据生成的脚本中,默认是在insert之前将表中的非唯一索引disable掉,insert完成之后再enable,如果在inert过程中发生了错误而退出,索引没有被enable,有对索引所在的列进行筛选的查询,就会有麻烦了.
     
     
    解决主案:
    mysqldump --force
     
    这样无论如何,mysqldump会执行完的(除非你停掉MySQL或服务器).
     
     
     
     
                                                 散渡幽灵
     
                                                 2006-6-16
    6/14/2006

    不重启MySQL架设master/slave镜像

    细数了一下,整整两个月没有更新Blog了,最近工作有点小收获,便P.P.记下来了.
     
     

    不重启MySQL架设master/slave镜像

    刘启荣

    2006-6-14

    镜像机制

    MySQL镜像的灵魂就是通过二进制变更日志来“传输”master机上的更新到slave机,记录传输信息的主要是在slave机上的两个文件master.inforelay-log.info

    Master.info文件

    log-bin.041          /*master机上的二进制更新文件*/

    1411737              /*slave机读取该二进制文件的位置*/

    192.168.1.1           /*masterIP*/

    Master_user          /*slave访问master的用户*/

    Master_psword     /*slave访问master的密码*/

    3306                    /*master机端口*/

    60                        /*连接重试间隔()*/

    Relay-log.info

    ./host-relay-bin.001       /*中继日志*/

    81774                          /*slave机上的relay-log读取位置*/

    log-bin.041                   /*正在读取的master上的log*/

    81736                          /*SQL执行的位置*/

    传统的m/s架设大致是:

    1.         配置slave(master-host,master-port,master-user,master-password etc)

    2.         赋于slave机对于master机的replication slave , super, reload等权限;

    3.         停止master机,拷贝数据到slave,清空master上所有的二进制变更日志;

    4.         重起master

    5.         重起slave

    上面几步中关键的一步是第3步,目的很多,停止master是为了访止在拷贝过程中数据不被修改,清空二进制日志(如果服务器激活了该日志)是为了让日志从log-bin.001开始,因为slave机将会自动创建master.inforelay-log.info两个文件,文件中所有的值都是初始值,log001开始编号,所有的位置也都是FIRST

    不重启架设

    知道了m/s的机制,不重启架起来就很方便了,也就三四步

    1,              拷贝master机上数据,刷新日志。这个过程要防止拷贝过程中的数据修改,如果数据更新不是很频繁的话,可以用mysqlhotcpy工具,它在拷贝前锁上所有的表,拷贝完成后又将日志flush一下(就是再新建一个日志文件),真是人性化呀。如果更新频繁的话,用mysqlhotcpy可能因为锁表过久而影响前端服务,这时有一个不太安全的做法,就是直接copy,然后手动flush日志(mysqladmin flush-logs),然后在slave机上将所有的表repair一下就OK了。

    2,              手动创建master.inforelay-log.info

    master.info文件

    log-bin.041          /*master机上的二进制更新文件,就是你flush之后的新日志*/

    4                 /*slave机读取该二进制文件的位置 ,一定是4 经验*/

    192.168.1.1         /*masterIP*/

    Master_user         /*slave访问master的用户*/

    Master_psword       /*slave访问master的密码*/

    3306               /*master机端口*/

    60                 /*连接重试间隔()*/

    Relay-log.info

    ./host-relay-bin.001           /*中继日志*/

    0                          /*slave机上的relay-log读取位置*/

    log-bin.041                  /*正在读取的master上的log*/

    0                          /*SQL执行的位置*/

    3,              修改my.cnf文件,如果你在第二步是直接copy的数据,记得加上--slave-skip-errors=1062,因为1062错误是主键冲突错误。

    4,              启动slave上的MySQL。如果你在第二步是直接copy的数据,记得mysqlcheck –auto-repair,原因是copy数据的过程中你的数据表可能会损坏。

     

    一点经验之谈,其实要架镜像,没必要非要这么折腾,大可将日志呀info文件的删个清洁溜溜,然后拷贝重启,干净利落。我这么做,一为是因为停掉要master数据库对前端访问有一些影响,二来也想通过这个了解一个m/s的机制,没想到一来二去,也没费多少周折,就比较理想的架起来了,比想象的容易了很多。

    所以,就抽时间写了出来,与大家一同分享心得。

    6/10/2005

    郁闷死的-r

    scp数据,忘了加local-file 就存成-r了

    mv rm都无效,原来是

    mv -- -r

    6/9/2005

    MySQL 4.1

    晕死人的character...