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....'
阅读(6236) | 评论(0) | 转发(0) |