概要
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主从同步搭建完毕