mysql主从复制

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,就代表正常

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。