数据库服务主从同步(基础方式)
主从同步作用
可以实现数据信息实时保存
可以实现数据库高可用架构
可以实现数据库读写分离功能(负载功能)
数据库主从同步原理
主从同步实践过程
步骤一:准备连个数据库实例环境
| 主机(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不变,重启数据库服务


- 同步成功

