mysql主从复制

主从复制(Replication)

1.介绍 

两台或以上数据库实例,通过二进制日志,实现数据的“同步”关系。

2.主从复制前提(搭建过程)

# 时间同步

#至少2台以上实例,要有角色划分

#主库开binlog

#网络通畅

#开启专用复制线程

#专门开启一个复制用户

#"补课"

#确认复制起点


#总结

1.需要两台以上数据库实例,网络通畅,时间同步,server_id不同,区分不同角色(主库,从库)

2.主库开启binlog,建立专用复制用户。

3.从库需要提前补课

4.从库:主库的链接信息,确认复制起点

5.从库:   需要专用的复制线程


3.搭建

实例准备

[root@later03 ~]# systemctl start mysqld3308

[root@later03 ~]# systemctl start mysqld3308

[root@later03 ~]# systemctl start mysqld3309

检查server_id 

[root@later03 tmp]# mysql -S /tmp/mysql3307.sock -e "select @@server_id";

+-------------+

| @@server_id |

+-------------+

|          7 |

+-------------+

[root@later03 tmp]# mysql -S /tmp/mysql3308.sock -e "select @@server_id";

+-------------+

| @@server_id |

+-------------+

|          8 |

+-------------+

[root@later03 tmp]# mysql -S /tmp/mysql3309.sock -e "select @@server_id";

+-------------+

| @@server_id |

+-------------+

|          9 |

+-------------+

3.3 检查主库的binlog 

[root@later03 tmp]# mysql -S /tmp/mysql3307.sock -e "select @@log_bin";

+-----------+

| @@log_bin |

+-----------+

|        1 |

+-----------+

3.4建立复制用户

mysql -S /tmp/mysql3307.sock -e "grant replication slave on *.*  to repl@'localhost' identified by '123'";

 grant replication slave on *.* to 'repl'@''

3.5 主库备份恢复到从库

主库备份:

mysqldump -S /tmp/mysql3307.sock -A --master-data=2 --single-transaction > /tmp/all.sql 

从库恢复:mysql  -S /tmp/mysql3308.sock   < /tmp/all.sql  

从库恢复: mysql  -S /tmp/mysql3309.sock   < /tmp/all.sql

3.6告知从库复制信息

查看binlog复制起点

[root@later03 ~]# grep "\-- CHANGE MASTER " /tmp/all.sql 

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=849;

3308,3309  执行:

CHANGE MASTER TO

  MASTER_HOST='39.101.199.159',

  MASTER_USER='repl',

  MASTER_PASSWORD='luobiao123',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mysql-bin.000005',

  MASTER_LOG_POS=194,

  MASTER_CONNECT_RETRY=10;


3.7 从库中开启专用复制线程

mysql> start slave;


3.8 验证主从状态

show slave status ;

 Slave_IO_Running: Yes

 Slave_SQL_Running: Yes

3.9 重置从库,如果主库重启,或者发生变化,可以重置主从关系,重新设置

1.停止从库   stop slave;

2.重置 reset slave all; 


主从复制原理 

4.1 主从中涉及到的资源

文件:

主库:binlog文件 

从库:

relay-log文件:存储接受的binlog

later03-relay-bin.000001

手工定义方法: vi /etc/my.cnf 

relay_log_basename=/relay_log/later03-relay-bin 


master.info :连接主库的信息,已经接受到的binlog位置信息。

默认存储在从库的数据路径下。

手工定义:

master_info_repository=FILE/TABLE

relay-log.info 

作用:

记录从库回放到的relay-log的位置点。

默认在从库的数据路径下。

手工定义:

relay_log_info_repository=FILE/TABLE


4.1.2线程:

(1)主库:

Binlog_dump_Thread

作用:用来接b收从库请求,并且投递binlog给从库。

show processlist;

(2)从库:

IO线程,请求日志,接收日志

SQL线程,回放日志:


4.2 主从复制原理

画图说明:

文字说明:

1.S: change master to IP,Port,User,Password,binlog位置点信息

,执行start  slave 启动IO和SQL线程。  

2.S:连上主库 

3.M:分配Dump_T,专门和S_IO通信。

show processlist;

4.S:IO线程,根据master.info记录的日志点信息,请求新日志

5.M:DUMP_T 接收请求,截取日志,返回给S_IO

6.S: IO线程接收到binlog,日志放在TCP/IP,此时网络层面返回

ACK给主库,主库工作完成。

7:S:IO将binlog最终写入到relay-log ,并跟新master.info ,IO线程工作结束.

8:S:SQL线程读R.info,获取上次执行到的位置点

9.S:SQL线程向后执行新的relay-log,再次跟新R.info 

小细节:

1.S:relay-log 参数:relay_log_purge=ON 定期自动删除应用过的relay-log 

2.M Dump线程实时监控主库的binlog变化,如果有新变化发信号给从库。



5.主从监控

5.1主库监控

show processlist; 查看主库dump进程

show slave hosts;查看从库的情况

5.2从库监控

show slave status;


主从相关信息,来自于Master.info 

Master_Host: 39.101.199.159

 Master_User: repl

Master_Port: 3306

Connect_Retry: 10

 Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 1461

从库的relay-log的执行情况,来自于Relay.info   一般用作判断主从延时

Relay_Log_File: later03-relay-bin.000002

Relay_Log_Pos: 932

Relay_Master_Log_File: mysql-bin.000002

Exec_Master_Log_Pos: 1461

Seconds_Behind_Master: 0

从库线程状态,具体报错信息

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Last_IO_Errno: 0

 Last_IO_Error: 

Last_SQL_Errno: 0

Last_SQL_Error: 


过滤复制相关信息

Replicate_Do_DB: 

Replicate_Ignore_DB: 

Replicate_Do_Table: 

Replicate_Ignore_Table: 

Replicate_Wild_Do_Table: 

Replicate_Wild_Ignore_Table: 

延时从库的配置信息

SQL_Delay: 0

SQL_Remaining_Delay: NULL

GTID相关复制信息

 Retrieved_Gtid_Set: 2ade123b-73aa-11ea-b05d-00163e082e57:4-6

 Executed_Gtid_Set: 205e7212-736e-11ea-bfde-00163e0477d5:1-123






你可能感兴趣的:(mysql主从复制)