Mysql第五天——Mysql主从复制

Mysql主从复制

一、主从复制的基本原理

slave会从master读取binlog来进行数据同步
1.原理:
Mysql第五天——Mysql主从复制_第1张图片
Mysql第五天——Mysql主从复制_第2张图片
主数据库的每次变更(增删改查)都会记录到二进制文件总
从数据库有两个线程,一个是io线程去读取二进制文件,并写入到自己的中继日志中,还有一个sql线程,数据重放到自己的数据库中

2.步骤:
MySQL主从复制过程分成三步:
1 master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
2 slave将master的binary log events拷贝到它的中继日志(relay log);
3 slave重做中继日志中的事件,将改变应用到自己的数据库中。把中继日志中的事件信息一条一条的在本地执行一次,完 成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)。


二、主从复制的基本原则

1.每个slave只有一个master
2.每个slave只能有一个唯一的服务器ID
3.每个master可以有多个salve


三、主从复制的条件

1.主从服务器操作系统版本和位数一致;
2.Master 和 Slave 数据库的版本要一致;
3. Master 和 Slave 数据库中的数据要一致;
4. Master 开启二进制日志,Master 和 Slave 的 server_id 在局域网内必须唯一;


四、主从复制的配置

1、Master 上的配置(3307)
(1) 安装数据库,并初始化

初始化:
/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3307/data

(2) 修改数据库配置文件,指明 server_id,开启二进制日志(log-bin);

vi my.cnf

<1>在中间指明 server_id
Mysql第五天——Mysql主从复制_第3张图片

<2>在最后删掉二进制日志的注释
Mysql第五天——Mysql主从复制_第4张图片
(3) 启动数据库;

mysqld_safe --defaults-file=/data/3307/my.cnf &

(4) 登录数据库,查看当前是哪个日志,position 号是多少,授权数据复制用户;

## 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现在的日志文件) 
mysql> show master status;
##创建数据同步用户,并授予相应的权限,允许从节点是192.168.72.%,并且密码已经帮它设置好了是111111
mysql> grant replication slave on *.* to rep@'192.168.72.%' identified by '111111';
## 刷新授权表信息
mysql> flush privileges;

(5) 备份数据库(记得加锁和解锁);

## 先临时锁表
mysql> flush tables with read lock;

注意这步是退出mysql执行的
## 这里我们实行全库备份,在实际中,我们可能只同步某一个库,那也可以只备份一个库 
mysqldump  -uroot -p123456 -S /data/3307/mysql.sock -A --events >aaa.sql;

## 解锁
mysql> unlock tables; 

(6) 传送备份数据到 Slave 上;
将 Master 上备份的数据远程传送到 Slave 上,以用于 Slave 配置时恢复数据

scp /data/3307/aaa.sql [email protected]:/data/3308

2、Slave 上的配置(3308)
(1) 安装数据库,并初始化

初始化:
   /application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3308/data

(2) 修改数据库配置文件,指明 server_id,也要开启二进制 日志 log-bin:

vi my.cnf

<1>在中间指明 server_id

Mysql第五天——Mysql主从复制_第5张图片
<2>在最后删掉二进制日志的注释
在这里插入图片描述
(3)启动数据库:

mysqld_safe --defaults-file=/data/3308/my.cnf &

(4) 导入数据,还原备份;

mysql -uroot -p123456 -S /data/3308/mysql.sock < aaa.sql

(5)登录数据库,添加相关参数(Master 的 IP、端口、同步用户、密码、position 号、读取哪个日志文件,超时请求时间);

 mysql>change master to master_host='192.168.72.132', master_user='rep',master_password='111111', master_port=3307, master_log_file='mysql-bin.000001 ' , master_log_pos=107, master_connect_retry=10;

(6) 开启同步,查看状态;

## 开启主从同步
mysql> start slave;

## 查看主从同步状态
mysql> show slave status\G;

主要看以下两个参数,这两个参数如果是 Yes 就表示主从同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes 

你可能感兴趣的:(Mysql基础)