Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1485292
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2012-04-22 23:49:51

环境:
    master: 192.168.0.4     mysql-5.5.3-m3
    slave:  192.168.0.2     mysql-5.5.20
    先回答上一篇提出的问题:有一部分是myisam类型的表, 有一部分是innodb类型的表, 该如何对master做“快照”呢?
    其实答案有很多:
        a) 先锁表, 记录binlog文件和位置信息。 然后用mysqldump --single-transaction和--master-data=1 这两个选项, 把所有要同步的库dump出来就OK
        b) 先锁表, 记录binlog文件和位置信息。 然后用用系统命令拷贝好数据目录, 另外对于innodb表, 使用mysqldump --single-transaction把这些innodb表单独dump出来就OK , 到slave上也要做相应的两步操作, 详细如下:
    这里假设master/slave上的配置文件以及相关的授权都已经OK。
    STEP 1. 登录master服务器, 打开两个虚拟终端, 一个在系统命令行用来操作拷贝, 一个用来进入mysql命令行进行锁表操作
        mysql命令行: mysql> FLUSH TABLES WITH READ LOCK;   # 锁表
        mysql命令行: mysql> show master status;            # 查看当前binlog文件名及binlog的位置信息, 并记录下来。 比如 binlog.000049 |  3560393
        系统命令行:  # cd master的数据文件目录
        系统命令行:  # tar cf /www/master.tar.gz db1 db2   # 把数据文件打包到/www/master.tar.gz文件, 这里为了速度, 并没有执行压缩。  在打包的过程中, 在mysql命令行执行show master status; 会发现打印出来的信息一直没改变。
        系统命令行:  # mysqldump -uroot --single-transaction --flush-logs --hex-blob db1 t1 t2 t3 > /www/innodb1.sql   # 这里执行完后, 使用show master status;  会发现新生成了一个新的binlog, 至于为什么, 我也不知道, 问部门的DBA同事 , 说没关系
       
        待上面几步都OK , 再在mysql命令执行解锁操作:
        mysql命令行: mysql> UNLOCK TABLES;                 # 解锁
        在master服务器上的最后操作就是把刚刚打包好的/www/master.tar.gz 及/www/innodb1.sql文件传送到slave服务器上。
    STEP 2. 登录到slave服务器
        系统命令行: # mysqladmin shutdown      # 先把mysql停掉
        系统命令行: # tar xf master.tar.gz -C mysql的数据目录      # 把master上的数据文件解压到slave上的数据目录
        系统命令行: # mysqld_safe &            # 启动mysql
        mysql命令行:mysql> slave stop;         # 停掉同步
        系统命令行: # mysql -uroot db1 < ./innodb1.sql
        mysql命令行:mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.4', MASTER_PORT=3306, MASTER_USER='slave', ;
        mysql命令行:mysql> slave start;        # 开启同步
        mysql命令行:mysql> show slave status\G
    发现各项信息都比较正常
   
    不过过了一段, 又出现错误信息:
        Last_Errno: 1690
        Last_Error: Error 'BIGINT values is out of range in....'
 

    
    最后在网上搜了下, 发现原来是因为slave的版本跟master的版本不一直导致, 把slave的版本更换成master一致的版本就OK 。
    具体参考: http://blog.chinaunix.net/uid-20788470-id-3184785.html
阅读(6236) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~