一、概述

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

  主要应用:

  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= //[必须]服务器唯一ID,默认是1,一般取IP最后一段

  

  3. 配置备库

vi /etc/my.conf
[mysqld]
log-bin=mysql-bin //[非必须]启用二进制日志
server-id= //[必须]服务器唯一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. | | | |
+------------------+----------+--------------+------------------+
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数字前后无单引号。

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

Mysql>start slave;   

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

mysql> show slave status\G

           *************************** . row ***************************

              Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.145.10 //主服务器地址
Master_User: repl//授权帐户名,尽量避免使用root
Master_Port: //数据库端口,部分版本没有此行
Connect_Retry:
Master_Log_File: mysql-bin.
Read_Master_Log_Pos: //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.
Relay_Log_Pos:
Relay_Master_Log_File: mysql-bin.
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
...... 注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

参考:

  1) 高性能mysql第三版

  2) itwork的blog

最新文章

  1. NotePad++中如何出去闪烁的光标?
  2. 分享Kali Linux 2016.2第41周镜像虚拟机
  3. Linux:用户&用户组操作
  4. super和this区别
  5. Java中必须了解的常用类
  6. Android Priority Job Queue (Job Manager):后台线程任务结果传回前台(三)
  7. javascript 封装 构造函数继承 非构造函数继承
  8. Lucene自定义扩展QueryParser
  9. pyqt最小化学习
  10. 利用虚函数减少导出DLL的头文件依赖
  11. Express 学习笔记纯干货(Routing、Middleware、托管静态文件、view engine 等等)
  12. Android Studio 1.0RC1版发布
  13. web 文件下载(.shp)
  14. 使用 LD_PRELOAD 变量拦截调用
  15. [CTSC2018]暴力写挂
  16. 模拟实现strncpy,strncat,strncmp
  17. 初识kbmmw 5 中httpsys的支持
  18. 实测iOS Dynamic Framework 对 App 启动时间的影响效果
  19. c#多线程 Invoke方法的使用
  20. 【洛谷】【st表+模拟】P1311 选择客栈

热门文章

  1. oracle 11g r2 使用rman进行迁移rac到rac
  2. Java面试(二)
  3. python爬西刺代理
  4. 2014.8.25 VS新建项目模板消失解决方法
  5. Python——string
  6. .net 连接ORACLE中文显示乱码解决方案
  7. Keepalived使用小结
  8. Python绘图matplotlib
  9. OK6410 tftp下载内核、文件系…
  10. instanceof php