Mysql主从同步
- 1. 主从同步的定义
- 2. 主从同步的实现原理
- 3. 为什么要使用主从同步
- 4. 搭建主从复制环境
- 4.1. 数据库信息
- 4.2. master数据库配置
- 4.2.1. 编辑my.cnf配置
- 4.2.2. 创建用于同步的slave用户
- 4.3. slave数据库配置
- 4.3.1. 编辑my.cnf配置
- 4.3.2. 配置master数据库
- 4.4. 查看主从同步效果
1. 主从同步的定义
将两个不同的数据库分别部署,一个设置为master数据库负责对数据进行写入,一个设置为slave服务器负责对数据的搜索,master数据库将写入的记录保存到binlog文件中,slave数据库检测master的binlog文件的变化,将变更的记录同步到自身,从而保证master数据库跟slave数据库的数据一致性,这就是主从同步
2. 主从同步的实现原理
- 从库执行
start slave
语句,从库创建了IO线程
以及Sql执行线程
- 创建了
IO线程
的同时,IO线程
连接到主库,并且请求主库返回binlog
中的变更记录- 主库检测到从库的连接,给该从库的连接创建一个
dump log线程
用来给从库i/o线程
传binlog
- 主库将变更的
binlog日志
传递给从库- 从库的
IO线程
将读取到主库返回的binlog文件
,将文件写入relay log文件
中- 从库的
Sql执行线程
读取relay log文件
更新数据
3. 为什么要使用主从同步
- 数据的热备份,对数据进行“半即时”备份
- 读写分离, 降低主数据库的压力, 将主要的查询业务分配到从数据库上执行,主数据库主要负责数据的写入以及少部分的查询业务
- 实时灾备,用于故障切换
4. 搭建主从复制环境
4.1. 数据库信息
主库域名:MySql_Master1
从库域名:MySql_Slave1
4.2. master数据库配置
4.2.1. 编辑my.cnf配置
vim /etc/mysql/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
重启mysql服务是my.cnf生效
4.2.2. 创建用于同步的slave用户
进入 master数据库 执行以下语句
create user ‘slave’@‘localhost’ identified by ‘123456’;
grant replication slave on . to ‘myslave’@’%’
FLUSH PRIVILEGES;SHOW MASTER STATUS查看master服务配置信息
±--------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±--------------±---------±-------------±-----------------±------------------+
| binlog.000006 | 156 | | | |
±--------------±---------±-------------±-----------------±------------------+
4.3. slave数据库配置
4.3.1. 编辑my.cnf配置
vim /etc/mysql/my.cnf
[mysqld]
server-id=2
# 非必须
# log-bin=mysql-bin
重启mysql服务是my.cnf生效
4.3.2. 配置master数据库
停止
slave
服务
stop slave;
设置
master
数据库信息
change master to master_host='MySQL_Master1',master_user='slave',master_port=3306,master_password='123456',master_log_file='binlog.000006',master_log_pos=156;
启动
slave
服务
start slave;
查看slave配置信息
show slave status\G;
# 显示的信息中开启了io线程以及sql执行线程表示开启成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
4.4. 查看主从同步效果
在主数据创建数据库
test
CREATE DATABASE test
切换master, 查看master数据库的列表数据
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
±-------------------+
切换slave, 查看slave数据库的列表数据
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
±-------------------+
从上面可以看出在master数据库创建了
test
数据库之后,在slave也同样创建了数据库test