MySQL5.5的数据同步

前不久因为速度问题,在LA又买了一个月付的vps,结果速度还是不咋地(好吧其实怎么换速度都还是那样慢= =),所以现在就有两个vps了哇哈哈哈。。。

之前的vps要到12月才到期,所以打算把它当成一个backup来用。原来上面有个5个站,现在迁移了3个过去,效率是不是很低呢哇哈哈。。。既然要当backup,主要是做好网页代码和数据库的同步,今天先搞数据库的。

mysql本身就提供了master-slave的同步功能,有两种方式进行同步,分别是双向和单向的。由于我的域名只解析到一个固定的ip,所以我只要单向同步就好了。假设主mysql的ip是:192.168.0.100 ,从mysql的ip是:192.168.0.200

首先配置master端 :

(1)修改mysql配置文件(win:my.ini , linux:my.cnf)

server-id=1             #master标志号
log-bin=mysql-bin       #设置记录日志程序
binlog-do-db=test       #要同步的数据库,多个数据库重复此参数多行
binlog-ignore-db=mysql     #不要同步的数据库,多个数据库重复此参数多行

(2)给master mysql新增一个备份专用的账号

mysql> GRANT REPLICATION SLAVE ON *.* TO backup@'192.168.0.200' IDENTIFIED BY 'lalala';

其中backup是账号,lalala是密码,@ 后面指定slave mysql的ip地址(当然也可以任意地址,不过要注意安全o~)

(3)重启mysql,检查配置是否出错

(4)主从数据库在设置同步时需要保证两个数据库内容一致,所以先进行锁表操作(此时网站无法写入数据库,注意影响!):

mysql> FLUSH TABLES WITH READ LOCK;

(5)记录数据库的同步点:

mysql> SHOW MASTER STATUS;

这里的 File 和 Position 对应的值之后要用到。

(6)导出需要同步的数据库的数据,准备导入到slave mysql

接下来配置slave端:

(1)把master mysql的数据导入slave mysql中。

(2)修改mysql配置文件(win:my.ini , linux:my.cnf)

server-id=2             #slave标志号,不能与master编号一样
replicate-do-db = 要同步的库1
replicate-do-db = 要同步的库2
#replicate-do-table = 某库.要同步的表1
#replicate-do-table = 某库.要同步的表2参数多行

(3)设置MASTER参数,MASTER_LOG_FILE和MASTER_LOG_POS就是Master步骤3记录下的参数,这一点很重要,否则Slave找不到同步点会导致同步失败。

mysql> CHANGE MASTER TO
  MASTER_HOST='192.168.0.100',
  MASTER_USER='backup',
  MASTER_PASSWORD='lalala',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=796,
  MASTER_CONNECT_RETRY=10;

(4)启动同步服务

mysql> START SLAVE;

到这配置就大功告成了,这时在master mysql上插入一条新数据,slave mysql 10s内就会同步修改了

« 返回