您的位置:首页 > 数据库 > MySQL

MySQL 主从复制理解与实践(WINDOWS环境)

2016-09-27 17:44 399 查看
概念理解:

主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:

一是作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;

二是可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;

  Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的
数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更 新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服 务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

整体上来说,复制有3个步骤:   
       (1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
       (2)    slave将master的binary log events拷贝到它的中继日志(relay log);
       (3)    slave重做中继日志中的事件,将改变反映它自己的数据。
下图描述了复制的过程:



实践:
环境 
数据库版本-->mysql-5.5.35-win32

主数据库---->widows10 专业版,192.168.88.106
从数据库---->vmware windows XP , 192.168.88.13

step1,主节点配置

创建一个数据库 CREATE DATABASE clark DEFAULT character set 'UTF8';

修改my.ini配置

server-id=1 #指定唯一的ID,1至32,必须的
log-bin=mysql-log-bin #指定开启二进制日志存放路径,必须的
binlog-do-db=clark #指定要同步的数据库,必须的
#binlog-ignore-db=mysql #指定不要同步的数据库,如果指定了binlog-do-db就不用再指定该项

重启数据库服务
创建一个用户slave,赋予数据备份权限,只允许192.168.88.13 
grant replication slave on *.* to slave@192.168.88.13
identified by '123456' ;
flush privileges;
显示主服务器的状态信息,并且找到File 和 Position 的值记录下来;

SHOW MASTER status;

step2,从节点配置
创建一个数据库 CREATE DATABASE clark DEFAULT character set 'UTF8';
修改my.ini配置

server-id=2 #指定唯一的ID,2至32,必须的,并且不能跟主数据库一样
replicate-do-db=clark #指定要同步的数据库,必须的
#replicate-ignore-db=mysql #指定不要同步的数据库

重启从数据库,设置登录主数据库的账号和密码等信息,然后启动slave

CHANGE MASTER TO master_host = '192.168.88.106',
 master_user = 'slave',
 master_password = '123456',
 master_log_file = 'mysql-log-bin.000001',#即前面记录的File值
 master_log_pos = 105; #即前面记录的Position值

start SLAVE;

查看从数据库的信息
show slave status;
如果出现: Slave_IO_Running: YesSlave_SQL_Running: Yes以上两项都为Yes,那说明没问题了

step3,测试
在主数据库添加表或插入数据,到从数据库可以查看到同步更新信息。

以上是对于系统设计之初就考虑采用主从复制的解决方法,如果是运行过一段时间的数据库,再考虑使用主从复制架构,需要对主表做数据锁定与复制操作,具体如下:
假设主数据库已有数据库clark_2,包含表school。
step1,主节点配置
修改my.ini,增加
binlog-do-db=clark_2 #指定要同步的数据库,必须的,可添加多个
重启主数据库,然后在主数据库中锁定所有的表
flush tables with read lock;
显示主服务器的状态信息,并且找到File 和 Position 的值记录下来;
SHOW MASTER status;
step2,从节点配置
将主数据库数据文件夹data目录下clark_2与ibdata1拷贝到从数据库data目录下
编辑my.ini,增加
replicate-do-db=clark_2 #指定要同步的数据库,可配置多个
重启从数据库,因为主数据库在重新配置my.ini后,日志文件变成新的文件,所以需要再次设置登录主数据库的账号和密码等信息

STOP SLAVE;

CHANGE MASTER TO master_host = '192.168.88.106',
 master_user = 'slave',
 master_password = '123456',
 master_log_file = 'mysql-log-bin.000005',
 master_log_pos = 107;

start SLAVE;

查看从数据库的信息
show slave status;





step3,完成上述配置后,回到主数据库,将表解锁

unlock tables;
之后在主数据库的修改就能同步到从数据库上了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: