Mysql主从模式复制
时间:2010-08-10 来源:zhgbwin
Mysql主从模式复制
第一章 Mysql复制介绍
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。
如果你想要设置链式复制服务器,从服务器本身也可以充当主服务器。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
单向复制有利于健壮性、速度和系统管理:
· 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。
· 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。
· 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。
第二章 mysql replication 环境搭建简明步骤
master ip: 192.168.1.40
slave ip: 192.168.1.43
注意搭建环境按以下顺序:
1.安装完成后配置/etc/my.cnf
master: /etc/my.cnf
server-id=1
log-bin
binlog-do-db=backup
slave: /etc/my.cnf
server-id=2
master-host=192.168.1.40
master-user=backup40
master-password=backup40a
master-port=3306 #主服务器端口
master-connect-retry=60 #同步时间间隔为60秒
replicate-do-db=backup
log-bin
binlog-do-db=backup
2.分别启动主、从数据库服务器
/usr/local/mysql-5.0.67/bin/mysqld_safe --user=mysql &
3.建立slave访问master的用户
master:
grant select,file,replication slave on *.* to backup40@'192.168.1.43' identified by 'backup40a' ;
flush privileges;
4.如果master数据为空:
在主数据库服务器上建立backup ,在backup数据库里面建立数据表,在从库上面应该立即都能看到。
如果master backup库有数据:
需要执行以下操作:
1).锁主库表
(master)mysql>FLUSH TABLES WITH READ LOCK;
2).记录File和Position,从库设置将会用到
(master)mysql>SHOW MASTER STATUS ;
3).另开一个终端,打包主库
(master)/var/ # tar zcvf backup.tar.gz backup
4).拷贝上述backup.tar.gz包到从库机器数据目录,并解包
5).解锁主库表
(master)mysql>UNLOCK TABLES;
6).设置连接MASTER MASTER_LOG_FILE为主库的File
MASTER_LOG_POS为主库的Position
(slave)mysql>CHANGE MASTER TO
MASTER_HOST='192.168.1.40',
MASTER_USER='backup40',
MASTER_PASSWORD='backup40a',
MASTER_LOG_FILE='File',
MASTER_LOG_POS=Position;
7).启动SLAVE服务
(slave)mysql>slave start;
需要注意地方:
1.在进行同步之前必须保证两个数据库是完全相同的,不然可能出错.
2.slave工作原理:
Slave上Mysql的Replication工作有两个线程,I/O thread和SQL thread,
I/O thread的作用是从master 3306端口上把它的binlog取过来,然后写到本地的relay-bin,
而SQL thread则是去读本地的relay-bin,再把它转换成本机Mysql所能理解的东西,于是同步就这样一步一步的完成.
决定I/O thread的是var/master.info,而决定SQL thread的是var/relay-log.info.
3.如果更改了master服务器,
slave服务器需要修改/etc/my.cnf文件,删除master.info、relay-log.info和relay-log.index文件,重起slave.
http://dev.mysql.com/doc/refman/5.0/en/replication.html