概要

MySQL Replication (MySQL 主从复制) 是什么?为什么要主从复制以及它的实现原理是什么?

  • 主从复制概念

  MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

  • 主要用途

    • 读写分离

        在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

    • 数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换

    • 高可用HA

    • 架构扩展

        随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能。

配置服务器

  • 主服务器
[myslqd]
server-id=1			# 必须。设置服务器id,不与从服务器冲突即可
log_bin=mysql-bin		# 必须。启动MySQ二进制日志系统
binlog-do-db=test		# 需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
binlog-ignore-db=mysql		# 不同步mysql系统数据库
binlog_format="MIXED"		# 优化mysql的复制模式
expire_logs_days=7		# 设定binlog日志过期时间(过期自动删除)

  写好配置文件后,记得重启数据库service msyqld restart,然后用cli进入mysql,show master status\G;查询一下主服务器的状态。

  查询后需要记录下来比较重要的字段为:mysql-bin.0000xx

  • 从服务器

    [mysqld]
    server-id=2		# 必须。设置服务器id,不与主服务器冲突即可
    

    其他无特殊需求可以暂不设置,重启数据库后,进入mysql-client。

    change master to master_host='你的IP',master_port='你的数据库端口',master_user='主服务器的用户',master_password='主服务器用户的密码',master_log_file='mysql-bin.0000xx',master_log_pos=0;		# master_log_pos设置成0代表任意
    start slave;
    show slave status\G;
    

      在最后的状态中,看到Slave_IO_Running 以及 Slave_SQL_Running 都为YES即代表mysql主从同步搭建完毕