网站地图    收藏   

主页 > 后端 > mysql数据库 >

mysql主从复制 - mysql数据库栏目 - 自学php

来源:自学PHP网    时间:2015-04-16 10:50 作者: 阅读:

[导读] 1、mysql主从复制原理对于主服务器来讲,会不停的吧当前数据库中产生的信息记录进二进制日志中,如果服务器端接收到客户端一个需要改变数据的语句之后,这个数据如果采用的是I...

1、mysql主从复制原理

对于主服务器来讲,会不停的吧当前数据库中产生的信息记录进二进制日志中,如果服务器端接收到客户端一个需要改变数据的语句之后,这个数据如果采用的是InnoDB的话,这些数据本身首先被记录进事务日志,这些会影响数据的语句会被记录进二进制日志中,而复制讲的是,另外一个从服务器上,被动的接受数据,本身并不接受客户端链接进来做任何写操作,复制是单向的,只能从主服务器到从服务器,因此,从服务器中的数据都是来自于主服务器,主服务是监听在3306端口上,从服务器启动了一个客户端进程,这个进程会向服务器点提供数据服务的端口发起请求,请求读取二进制日志中的事件,在主服务器点上,mysql主要提供认证服务,同时会启动一个sqldump线程,这个线程在接收到用户的请求后,并确保这个用户具有权限之后,会去读取二进制日志中的事件,如果客户端是第一次来请求,那么这个进程就读取日志中的第一个事件,读一个就发送给客户端一个,从服务的进程在接收到主服务器发行过来的数据之后,会保存在本地的中继日志,然后再启动一个具有特殊功能的线程,去中继之日中读取事件,读一行,在本地执行一下,以此类推,最终生成本地的数据库。mysql的复制时异步的,因此在接收到用户的请求之后,将结果返回给用户。并将信息存放在内存中,之后再记录进二进制文件中,这样会造成从服务器落后与主服务器,但是这样也是有好处的,如果你有一个错误操作,在这个时间内,立即去从服务器上备份数据就OK,这需要mysql管理员把握。

2、mysql主从复制的实现

[1]首先确保主从服务器上的Mysql版本相同
[2]在主服务器上操作
(1)设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如:

 

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.99' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES; 
(2)修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务

 

 

log-bin = mysql-bin
server-id=10
(3)之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复

 

 

mysql> show master status\G;
(4)将主数据库数据导入到从服务器,可以将数据库原始文件拷贝过去,也可以通过导出脚本,然后倒入到从服务器中,导出脚本前,为确保数据一致,需要对主数据库进行READ LOCK

 

 

mysql> flush tables with read lock;
然后进行数据库导出

 

 

mysqldump -h127.0.0.1 -p3306 -uroot -p test > /home/ceshi/test.sql
数据备份好之后,需要对主服务器恢复写错做

 

 

mysql> unlock tables;

[3]在从服务器上操作
(1)将导出的test.sql导入到从数据库上。
(2)修改从数据库的配置文件my.cnf,指定主数据库的基本信息

 

 

server-id      = 20                
read-only = 1  //开启只读模式 
(3)配置从服务器连接主服务器

 

 

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.98', MASTER_USER='slave001', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107;
mysql> START SLAVE;
(4)在从服务器进行show salve status验证

 

 

mysql> SHOW SLAVE STATUS\G
如果Slave_IO_Running或者Slave_SQL_Running表示yes,就代表正常

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论