码迷,mamicode.com
首页 > 数据库 > 详细

mysql 复制(主从复制)

时间:2016-05-23 17:20:27      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:

一、概述

  让一台服务器的数据与其他服务器数据保持同步。一台主库的数据可以同步到多台备库上,而备库本身也可以配置成其他服务器的主库。

  主要应用:

  1) 数据分布

  2) 负载均衡

  3) 伪备份。在备份基础上能增加更安全的技术补充

  4) 高可用性和故障切换。避免mysql单点失败

  5) 升级测试。升级数据库前,将数据复制到备库,使得查询能够在备库按照预期执行。

  支持两种复制方式

  1) 基于语句的复制

  2) 基于行的复制

  两种方式复制原理一样:在主库上记录二进制日志、在备库重放日志 实现异步的数据复制。异步代表在同一时间点备库的数据与主库不一致,几秒,几分甚至几个小时的延迟。

  复制是向后兼容,即备库数据库版本高于主库 而不能是 低于主库

  关于开销:

  1) 启用二进制日志带来的开销;

  2) 每个备库也会对主库增加一些I/O开销

  3) 锁竞争也会阻碍事务的提交

二、复制的工作原理

  1. 在主库上把数据更改记录到二进制日志 (binary log) 中。

  2. 备库将主库上的日志复制到中继日志 (relay log) 中。

  3. 备库读取中继日志中的事件,将数据放入备库中。

  技术分享

三、配置复制

  1. 创建复制账号

    建议为每台数据库服务器创建相同账号。

mysql> grant replication slave,replication client on *.* to repl@192.168.0.% identyfied by password;

  2. 配置主库  

vi /etc/my.conf 
    [mysqld]
    log-bin=mysql-bin   //[必须]启用二进制日志
    server-id=10      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

  

  3. 配置备库

vi /etc/my.conf 
    [mysqld]
    log-bin=mysql-bin   //[非必须]启用二进制日志
    server-id=6     //[必须]服务器唯一ID,默认是1,一般取IP最后一段

  4. 分别重启数据库

/etc/init.d/mysql restart

  5. 登录主服务器的mysql,查询master的状态  

mysql>show master status;
       +------------------+----------+--------------+------------------+
       | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
       +------------------+----------+--------------+------------------+
       | mysql-bin.000004 |      308 |              |                  |
       +------------------+----------+--------------+------------------+
       1 row in set (0.00 sec)
       注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

记下file 和 position 用于配置备库

  6. 配置备库 

mysql>change master to master_host=192.168.145.10,master_user=repl,master_password=password,
    master_log_file=mysql-bin.000004,master_log_pos=308;   //注意不要断开,308数字前后无单引号。

  7. 启动从服务器复制功能 

Mysql>start slave;   

  8. 检查从服务器复制功能状态

mysql> show slave status\G

           *************************** 1. row ***************************

              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.145.10  //主服务器地址
              Master_User: repl//授权帐户名,尽量避免使用root
              Master_Port: 3306    //数据库端口,部分版本没有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 600     //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes    //此状态必须YES
              Slave_SQL_Running: Yes     //此状态必须YES
                    ......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

 

参考:

  1) 高性能mysql第三版

  2) itwork的blog

mysql 复制(主从复制)

标签:

原文地址:http://www.cnblogs.com/hejun695/p/5520149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!