MySQL 主从同步配置

教程环境:
系统:CentOS 7
主服务器:192.168.10.15
从服务器:192.168.10.20
数据库版本:MySQL 5.7
注:MySQL 版本一定要一致,配置前,主从需同步的数据库的数据需一致

安装 MySQL

主服务器配置

  • 修改主库的 my.cnf 在 [mysqld] 下新增配置
# vim /etc/my.cnf
# 新增以下内容

server_id = 1
log-bin = mysql-bin
binlog_format = mixed

binlog-do-db = solo
expire_logs_days = 7
  • 配置解释:
# server-id 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# 此值在master和slave上都需要设置.
# 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.

server-id = 1 #[必须]服务器唯一ID,默认是1 

#log-bin 打开二进制日志功能.                                                                               
#在复制(replication)配置中,作为MASTER主服务器必须打开此项                                                   
#如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志. 

log-bin = mysql-bin #[必须]启用二进制日志   
  
#需要开启生成二进制日志记录相关配置,配置在需要被复制的服务器上,即:master                                  
binlog-do-db = my_test1 #指定对名称为test_db的数据库记录二进制日志                                              
# binlog-ignore-db = mysql #指定不对名称为mysql的数据库记录二进制日志                                             
# binlog-ignore-db = information_schema #指定不对名称为information_schema的数据库记录二进制日志  

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

image.png

  • 重启 MySQL 服务
# systemctl restart mysqld
  • 重启后进入 MySQL
# mysql -uroot -p
  • 创建同步用户,用户名自定义,密码需要符合密码规则,并授予用户 REPLICATION SLAVE 权限和 REPLICATION CLIENT 权限,用于在主从库之间同步数据
mysql> CREATE USER 'slavedb'@'192.168.10.20' IDENTIFIED BY 'Abc123..456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slavedb'@'192.168.10.20';
  • 用户名:slavedb,密码:Abc123..456,可使用此用户的服务器IP:192.168.10.20(从服务器IP地址)
  • 若需所有服务器都可以使用这个用户,则将IP地址改为 % 即可

image.png

  • 查看主库配置状态
mysql> show master status;
  • 记录下FilePosition的值,并且不进行其他操作以免引起Position的变化。

image.png

从服务器配置

  • 修改主库的 my.cnf 在 [mysqld] 下新增配置
# vim /etc/my.cnf
# 新增以下内容

server-id = 2
log-bin = mysql-slave-bin
replicate-do-db = solo
  • 配置解释
# server-id 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# 此值在master和slave上都需要设置.
# 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.

server-id = 2 #[必须]服务器唯一ID,默认是1

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

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

image.png

  • 重启 MySQL 服务
# systemctl restart mysqld
  • 重启后进入 MySQL
# mysql -uroot -p
  • 执行同步命令
mysql> change master to master_host='192.168.10.15', master_user='slavedb', master_password='Abc123..456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=1132;
master_host :Master的地址
master_port:Master的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

image.png

  • 开启主从复制
mysql> start slave;

image.png

  • 查看同步状态:
mysql> show slave status \G;

SlaveIORunning 和 SlaveSQLRunning 都是Yes说明主从复制已经开启

image.png

  • 至此完成了 MySQL 主从同步搭建工作!

测试

  • 在主库中新增数据,查看从库是否马上显示
  • 在主库中删除数据,查看从库是否马上删除
  • 在主库中更新数据,查看从库是否马上更新


标题:MySQL 主从同步配置
作者:Mune
地址:https://cnxiaobai.com/articles/2021/05/31/1622397180971.html

    评论
    0 评论
avatar

取消