概念理解:
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:
主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个:
一是作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作;
二是可在从数据库作备份、数据统计等工作,这样不影响主数据库的性能;
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
整体上来说,复制有3个步骤:
下图描述了复制的过程:
实践:
环境
数据库版本-->mysql-5.5.35-win32
主数据库---->widows10 专业版,192.168.88.106
主数据库---->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,必须的
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;
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',
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;
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',
start SLAVE;
查看从数据库的信息
show slave status;
step3,完成上述配置后,回到主数据库,将表解锁
unlock tables;
之后在主数据库的修改就能同步到从数据库上了。