网站Logo 欢迎来到我的博客

MYSQL主从同步

zhang
83
2025-04-25

数据库服务主从同步(基础方式)

主从同步作用

可以实现数据信息实时保存

可以实现数据库高可用架构

可以实现数据库读写分离功能(负载功能)

数据库主从同步原理

主从同步实践过程

步骤一:准备连个数据库实例环境

主机(Centos7.9) IP 服务
db03(主数据库) 10.0.0.53 mysql-8.0.36
db04(从数据库) 10.0.0.54 mysql-8.0.36
#停止从库上的mysql服务
[root@db04 /data/3306/data]# /etc/init.d/mysqld stop
#初始化数据库
[root@db04 /data]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data

  • 步骤二:在主库中进行数据备份(逻辑备份)
#创建用户与修改权限,为主从配置做准备
mysql> create user repl@'10.0.0.%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to repl@'10.0.0.%';
Query OK, 0 rows affected (0.01 sec)
#全量备份
[root@db03 /backup]# mysqldump -uroot -p1  -A  --single-transaction --source-data >/backup/all.sql
--single-transaction:在备份期间可以不影响数据库业务   
--source-data:在备份文件中记录备份后的binlog日志和位置点信息,便于主从同步
#多备份一份,比较all.sql 查看位置点
[root@db03 /backup]# mysqldump -uroot -p1  -A  --single-transaction  >/backup/all02.sql 

  • --source-data:在备份文件中记录备份后的binlog日志和位置点信息,便于主从同步

  • 发送全量备份文件到从库服务器10.0.0.54
[root@db03 /backup]# scp -rp /backup/all.sql 10.0.0.54:/tmp/all.sql

  • 步骤三:在从库中进行数据恢复
mysql> source /tmp/all.sql;
  • 步骤四:在从库中进行主从配置
#查看位置点信息
[root@db04 /data]# head -30 /tmp/all.sql 

  • 从库执行主从配置

CHANGE MASTER TO
MASTER_HOST='10.0.0.53',
MASTER_PORT=3306,
MASTER_USER='repl',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000003',
MASTER_LOG_POS=735358,
MASTER_CONNECT_RETRY=10; 
#查看生成的slave_master_info 文件
show tables from mysql;

  • 查看slave_master_info\G 表里信息,对比是否与全量备份文件的binlog日志与位置点是否相同

  • 步骤五:激活主从同步功能
mysql> start slave;
  • 补充:主从同步异常如何排查问题:
show slave status\G
Slave_IO_Running: no
Slave_SQL_Running: Yes

故障案例:

#原因:server_id 相同。
最后的 I/O 错误:
致命错误:由于源服务器和副本服务器的 MySQL服务器ID相同,
副本 I/O线程停止运行;要使复制正常工作,这些 ID 必须不同(或者在副本上必须使用 --replicate-same-server-id 选项,
但这并不总是合理的;在使用该选项之前请先查阅手册)。

  • 原本server_id为1

#解决:修改从库的server_id 为2,保持server_id不变,重启数据库服务

  • 同步成功