什么是mysql主从同步

当主库(master)的数据发生变化的时候,会实时的同步到从库(slave)。

主从同步有什么好处

  1. 数据备份
  2. 容错,高可用
  3. 水平扩展数据库的负载能力、
  4. 主数据库出现问题,可以切换到从数据库。
  5. 可以进行数据库层面的读写分离。

主从同步的原理

MySQL 主从复制是基于主服务器在二进制日志跟踪所有对数据库的更改。如果要进行复制,必须在主服务器上启用二进制日志。从服务器连接到主服务器并获取主服务器已经记录到日志的数据,从服务器接收从那时发生起的任何更新,并在主机上执行相同的更新。

从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

配置主库服务器

打开/etc/my.cnf配置文件,进行如下:

[mysqld]

# log-bin 打开二进制日志功能.
# 在复制(replication)配置中,作为master主服务器必须打开此项;如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
# [必须]启用二进制日志
log-bin=/usr/local/bin/lnmp/logs/binlog

# 此值在master和slave上都需要设置.
# 在master-slave架构中,每台机器节点都需要有唯一的server-id,数值位于1到2^32-1之间;如果在双主复制结构中没有设置ID的话就会导致循环同步问题
# 【必须】服务器唯一ID,默认是1
server-id=1

# 需要开启生成二进制日志记录相关配置,配置在需要被复制的服务器上,即:master
# 指定对名称为test_db的数据库记录二进制日志
binlog-do-db = mindoc_db

# 指定不对名称为mysql的数据库记录二进制日志
# binlog-ignore-db = mysql

# 指定不对名称为information_schema的数据库记录二进制日志
# binlog-ignore-db = information_schema

# binlog日志格式,mysql默认采用,如果从服务器slave有别的slave要复制那么该slave也需要这一项
binlog_format = mixed

# 超过7天的binlog删除
expire_logs_days = 7

重启主服务器,查看主库配置状态

show master status

 获取主数据库此刻数据坐标,用于主从启动后,复制数据的起始位置,获取到这个值后,主数据库就不能再有数据的修改操作。

配置从库服务器

打开/etc/my.cnf配置文件,进行如下:

[mysqld]
# 必须配置,且要比主服务器大
server-id=11

# 从库服务器可以不配
# log-bin=/usr/local/bin/lnmp/logs/binlo

# replicate-do-db 需要做复制的数据库,如果复制多个数据库,重复设置这选项即可master上不需要此项,slave上需要
# 复制名称为test_db的数据库
replicate-do-db = mindoc_db

# replicate-ignore-db 不需要复制的数据库,如果要忽略复制多个数据库,重复设置这个选项即可
# replicate-ignore-db = mysql #不需要(忽略)复制名称为mysql的数据库

执行同步命令

在从库的客户端执行命令

# 设置主服务器ip,同步账号密码,同步位置
change master to master_host='主库IP' , master_port=3306, master_user='root',master_password='密码', master_log_file='binlog.000002',master_log_pos=9871;

说明:

  1. master_log_file:主库文件名
  2. master_log_pos:参数的值与主库保持一致

在从数据库中设置复制数据的用户、坐标等信息,在执行此操作之前需保证主从数据库现时刻数据一致,因为是从设置的坐标处开始复制。

开启同步功能

start slave;

停止从库slave

slave stop;

查看从服务器状态

show slave status;

开始启动后,查看从Mysql复制状态,其中Slave_IO_Running、Slave_SQL_Running两项为YES时,表示同步正在进行。

此时主从库的数据完全一致,如果对主库进行增删改操作,从库会自动同步进行操作。